Страница 1 из 6

Миграция из ipfw на pf

СообщениеДобавлено: 27 фев 2011, 14:52
mlevel
Переписывая правила, возникло несколько вопросов:
1. Как задается тип файрвола(открытый/закрытый), нужны ли в конце правила как в ipfw - allow/deny ip from any to any ?
2. Где задаються стандартные значения макроса <me>? Можно ли сходу использовать его, не меняя значения по умолчанию?
3. В какой последовательности pf обрабатывает правила, если там нет номера для каждого правила?
4. Можно ли увидеть количество пакетов что пройшли через правило pf (аналог ipfw show)?
5. Обязательно ли в правилах pf указывать атрибуты in/out (block in quick from any to any)?
Насколько я понял одним правилом pf - block quick from 10.10.10.10 to any,
можно заменить два правила ipfw -
1. deny ip from 10.10.10.10 to any
2. deny ip from any to 10.10.10.10 ?

Re: Миграция из ipfw на pf

СообщениеДобавлено: 28 фев 2011, 09:45
Андрей
mlevel писал(а):1. Как задается тип файрвола(открытый/закрытый), нужны ли в конце правила как в ipfw - allow/deny ip from any to any ?

Да. Если стенка закрытая, то в начале указываете открытые порты, а потом пишите запрещающее правило. Т.е. Вы открываете только то, что можно.
mlevel писал(а):2. Где задаються стандартные значения макроса <me>? Можно ли сходу использовать его, не меняя значения по умолчанию?

Код: Выделить всё
table <me> { 1_ip, 2_ip, ... , n_ip}

Задается, желательно, в самом верху конфига. Вообще есть вариант пользовать self (т.е. себя) self подразумевает все "свои" ip (ip ифейсов машины).
mlevel писал(а):3. В какой последовательности pf обрабатывает правила, если там нет номера для каждого правила?

Если нет номера, то это не значит что номера нет вообще, есть номера строк. Вот по ним он и обрабатывает.
mlevel писал(а):4. Можно ли увидеть количество пакетов что пройшли через правило pf (аналог ipfw show)?

man pfctl
mlevel писал(а):5. Обязательно ли в правилах pf указывать атрибуты in/out (block in quick from any to any)?

А это от вас зависит, вы пишите конфиг под себя. А что блокировать входящий, исходящий или всё - решать вам.
mlevel писал(а):Насколько я понял одним правилом pf - block quick from 10.10.10.10 to any,

Правило запретит хождение трафика с 10.10.10.10 на любой. Если честно - бессмысленное правило, либо уточните, что за машина 10.10.10.10.

ЗЫ. На форуме я задавал подобный вопрос по миграции с pf на ipfw. Но мигрировать не стал.

Re: Миграция из ipfw на pf

СообщениеДобавлено: 28 фев 2011, 10:29
lehisnoe
mlevel писал(а):1. Как задается тип файрвола(открытый/закрытый), нужны ли в конце правила как в ipfw - allow/deny ip from any to any ?
PF по умолчанию не блокирует трафик. Для закрытого типа последним должно быть правило:
Код: Выделить всё
block in quick from any to any
.
mlevel писал(а):2. Где задаються стандартные значения макроса <me>? Можно ли сходу использовать его, не меняя значения по умолчанию?

Можно самом создать таблицу с названием, например, "me" и поместить туда нужные хосты. Либо же использовать встроенное макро - "self":
Код: Выделить всё
pass in quick from "self" to "self"

mlevel писал(а):3. В какой последовательности pf обрабатывает правила, если там нет номера для каждого правила?
Сверху вниз.

mlevel писал(а):4. Можно ли увидеть количество пакетов что пройшли через правило pf (аналог ipfw show)?
У меня не так много опыта в использовании PF, но я такой статы не наблюдал.

mlevel писал(а):5. Обязательно ли в правилах pf указывать атрибуты in/out (block in quick from any to any)?
Это зависит от того, какой цели ты хочешь достичь. Можно указывать, а можно и нет (прям как в ipfw).

mlevel писал(а):Насколько я понял одним правилом pf - block quick from 10.10.10.10 to any,
можно заменить два правила ipfw -
1. deny ip from 10.10.10.10 to any
2. deny ip from any to 10.10.10.10 ?
Нет, не верно, т.к. от отсутствия указания интерфейса src и dst не поменяются: почувствуй разницу между from 10.10.10.10 и to 10.10.10.10

Re: Миграция из ipfw на pf

СообщениеДобавлено: 28 фев 2011, 10:45
Андрей
lehisnoe писал(а):4. Можно ли увидеть количество пакетов что пройшли через правило pf (аналог ipfw show)?

pfctl -s all -вся доступная справка по текущему состоянию pf/

А вот примеры из man'а. Может оно?
Код: Выделить всё
                   # pfctl -t test -vTshow
                      129.128.5.191
                       Cleared:     Thu Feb 13 18:55:18 2003
                       In/Block:    [ Packets: 0        Bytes: 0        ]
                       In/Pass:     [ Packets: 10       Bytes: 840      ]
                       Out/Block:   [ Packets: 0        Bytes: 0        ]
                       Out/Pass:    [ Packets: 10       Bytes: 840      ]


Код: Выделить всё
                   # pfctl -vvsTables
                   --a-r-  test
                       Addresses:   1
                       Cleared:     Thu Feb 13 18:55:18 2003
                       References:  [ Anchors: 0        Rules: 1        ]
                       Evaluations: [ NoMatch: 3496     Match: 1        ]
                       In/Block:    [ Packets: 0        Bytes: 0        ]
                       In/Pass:     [ Packets: 10       Bytes: 840      ]
                       In/XPass:    [ Packets: 0        Bytes: 0        ]
                       Out/Block:   [ Packets: 0        Bytes: 0        ]
                       Out/Pass:    [ Packets: 10       Bytes: 840      ]
                       Out/XPass:   [ Packets: 0        Bytes: 0        ]

Re: Миграция из ipfw на pf

СообщениеДобавлено: 28 фев 2011, 11:00
mlevel
lehisnoe писал(а):Можно самом создать таблицу с названием, например, "me" и поместить туда нужные хосты. Либо же использовать встроенное макро - "self":
Код: Выделить всё
pass in quick from "self" to "self"

По умолчанию в макрос self записани все интерфейсы? Или нужно вручную вбивать?

lehisnoe писал(а):Нет, не верно, т.к. от отсутствия указания интерфейса src и dst не поменяются: почувствуй разницу между from 10.10.10.10 и to 10.10.10.10

В ipfw у меня такие правила работают, применяется ко всем интерфейсам(без фактического указания интерфейса). В системе 2 интерфейса(внутренний, внешний).

lehisnoe писал(а):Это зависит от того, какой цели ты хочешь достичь. Можно указывать, а можно и нет (прям как в ipfw).

Если мне нужно заблокировать входящий и исходящий трафик с определенного ІР - адреса?

Андрей писал(а):Правило запретит хождение трафика с 10.10.10.10 на любой. Если честно - бессмысленное правило, либо уточните, что за машина 10.10.10.10.

Это роутер, блокирует клиентов.

Re: Миграция из ipfw на pf

СообщениеДобавлено: 28 фев 2011, 12:23
lehisnoe
mlevel писал(а):
lehisnoe писал(а):Можно самом создать таблицу с названием, например, "me" и поместить туда нужные хосты. Либо же использовать встроенное макро - "self":
Код: Выделить всё
pass in quick from "self" to "self"

По умолчанию в макрос self записани все интерфейсы? Или нужно вручную вбивать?
Смотрим man:
man 5 pf.conf писал(а):the self keyword - all addresses assigned to the interface(s)

mlevel писал(а):
lehisnoe писал(а):Нет, не верно, т.к. от отсутствия указания интерфейса src и dst не поменяются: почувствуй разницу между from 10.10.10.10 и to 10.10.10.10

В ipfw у меня такие правила работают, применяется ко всем интерфейсам(без фактического указания интерфейса). В системе 2 интерфейса(внутренний, внешний).
Не вопрос, как я уже говорил выше, в PF правила тоже могут работать без указания интерфейса.

mlevel писал(а):
lehisnoe писал(а):Это зависит от того, какой цели ты хочешь достичь. Можно указывать, а можно и нет (прям как в ipfw).

Если мне нужно заблокировать входящий и исходящий трафик с определенного ІР - адреса?
Если заранее известно, с какого интерфейса может придти пакет с этого определенного адреса, то я бы указал интерфейс (но можно этого и не делать).

PS: А что подвигло на миграцию с ipfw?

Re: Миграция из ipfw на pf

СообщениеДобавлено: 28 фев 2011, 13:20
Андрей
lehisnoe писал(а):По умолчанию в макрос self записани все интерфейсы? Или нужно вручную вбивать?

Я же писал:
Андрей писал(а):Вообще есть вариант пользовать self (т.е. себя) self подразумевает все "свои" ip (ip ифейсов машины).


т.е. установлено на вешей машине 2 карты, присвоено на каждуйю по 1 ip. соответственно self будет подразумевать только те ip которые прописаны на машине. Будет алиасом 100 адресов указано - они тоже будут попадать в self. Очень удобно.

mlevel писал(а):В ipfw у меня такие правила работают, применяется ко всем интерфейсам(без фактического указания интерфейса). В системе 2 интерфейса(внутренний, внешний).

А извиняюсь нафига такие тогда проблемы?
пишем:
Код: Выделить всё
block in quick from any to 10.10.10.10
block out quick from 10.10.10.10 to any

2 правила. В чем проблема я не пойму.

Если таких машин как 10.10.10.10. много то делаем так:
Код: Выделить всё
table <enemy_host> {10.10.10.11, 10.10.10,12, 10.10.10.13}

block in quick from any to <enemy_hosts>
block out quick from <enemy_hosts> to any


Вот только я не понимаю зачем оно?

+1 к Lehisnoe, что подвигло на миграцию с ipfw?

Re: Миграция из ipfw на pf

СообщениеДобавлено: 28 фев 2011, 17:18
mlevel
Сейчас работает и pf и ipfw.
PF - выступает в роли NAT, ipfw - фильтрует трафик (около 30 правил). Но нагрузка на сервер растет, и работать будет лучше при одном файрволе. Выбрал PF, так как round-robin NAT проще реализовать.

У меня такая конструкция чудесно работает, проверил, менше правил надо писать(зачем усложнять с in/out):
Код: Выделить всё
block quick from <deny_clients> to any

Re: Миграция из ipfw на pf

СообщениеДобавлено: 28 фев 2011, 20:21
lehisnoe
mlevel писал(а):У меня такая конструкция чудесно работает, проверил, менше правил надо писать(зачем усложнять с in/out)
Я и не говорил, что она не будет работать, а привел пример того, как это сделал бы я (не вижу смысла в доп. анализе хэдеров пакета, если заранее известно, что он не попадет под правило).

PS: Попутно нашел в инете интересную схему прохождения пакета в PF:
Изображение

PPS: PF на данный момент не поддерживает многоядерность, соотв. показания pps при использовании PF будут ниже, чем при примении ipfw.

Re: Миграция из ipfw на pf

СообщениеДобавлено: 28 фев 2011, 21:48
root
mlevel писал(а):Сейчас работает и pf и ipfw.
PF - выступает в роли NAT, ipfw - фильтрует трафик (около 30 правил). Но нагрузка на сервер растет, и работать будет лучше при одном файрволе. Выбрал PF, так как round-robin NAT проще реализовать.

решать конечно тебе, но kernel nat на ipfw тоже хорошо работает и я бы остался на ipfw
когда то у меня тоже так было как у тя, а сейчас все на IPFW в том числе и NAT