pftop -a ← Вывести подробный мониторинг текущих сессий
pfctl -a '*' -sr ← Вывести из оперативной памяти список всех правил с таблицами
pfctl -nf /path/to/filewall.conf ← Проверить на наличие синтаксических ошибок конфигурационный файл с правилами для pf
pfctl -f /path/to/filewall.conf ← Загрузить правила из файла
pfctl -e ← Включить фаервол
pfctl -d ← Отключить фаервол
1. У pf есть одна особенность в его работе, перед другими фаерволами и это то, что он применяет действие в отношение пакета по его последнему совпадению с правилами а не до первого совпавшего, как в остальных. Т.е. если у вас сначала идёт запрещающее правило а после разрешающее, то будет выполнено последнее совпавшее, т.е. разрешить.
2. Так же вам необходимо иметь поддержку утилит для работы с pf (описано в Сюды)
3. Так же pf поддерживает подключаемые таблицы с IP адресами
4. Для включения фаервола, необходимо приписать его в /etc/rc.conf:
Прописываем в конфиг такие строки
pf_enable=«YES»
pf_rules=«/etc/firewall/pf.conf» ← пусть к файлу может быть любой
pf_flags=««
pflog_enable=«YES» ← включаем поддержку ведения логов (по желанию)
pflog_logfile=»/var/log/firewall/pflog» ← путь к лог файлам
pflog_flags=««
gateway_enable=«YES» ← включать только, если за нашим хостом находится локальная сеть (необходимо для поддержки NAT)
Создаём файл с правилами, touch /etc/firewall/pf.conf и включаем pf, kldload pf.ko && /etc/rc.d/pf start && /etc/rc.d/pflog start
Теперь у нас всё готово для начала того, что бы писать правила для нашего фаервола !
Открываем наш конфиг vim /etc/firewall/pf.conf
home_net=«172.16.17.0/24» ← Создаём переменную, где описываем нашу внутреннюю сеть
v_ext=«ext0» ← Наш внешний интерфейс, который смотрит в мир
v_17=«vlan17» ← Интерфейс, за которым находится 17я сеть
v_16=«vlan16»
ms=«modulate state» ← описываем состояние
kp=«keep state»
icmp_types=»{echoreq unreach}« ← описываем желаемые типы ICMP
director=«172.16.17.17»
admin=«172.16.16.2»
tcp4=«inet proto tcp» ← описываем желаемые протоколы
udp4=«inet proto udp»
icmp=«inet proto icmp»
esp =«inet proto esp»
set optimization aggressive
set skip on lo0
set block-policy drop
set limit { states 500000, src-nodes 500000, frags 50000 }
set limit { table-entries 500000, tables 500000 }
scrub in on ext0 all fragment reassemble
scrub in all
antispoof log quick for ext0 inet