PF на FreeBSD
От разработчика: Вариант 1 Вариант 2
PF on FreeBSD
Правила в pf:
- Макросы: Определенные пользователем переменные
- Таблицы
- Опции управления
- Скраб: Пересборка пакетов для их нормализации и дефрагментации
- Очереди: Управление пропускной способностью и приоритетами (ALTQ)
- Преобразования: (NAT, проброс портов)
- Правила фильтрации
Как действуют правила фильтрации:
Применится последнее правильно, которое подошло по заданным критериеям. Параметр quick завершает проверку правил, если текущее правило верно. Если в начале разместить pass all то, в случае если ниодно нижестоящее правило не подошло - пакет будет разрешен.
rc.conf
pf_enable="NO"
pf_rules="/etc/pf/pf.conf"
pf_program="/sbin/pfctl"
pf_flags=""
pflog_enable="YES"
pflog_logfile="/var/log/pf.log"
pflog_program="/sbin/pflogd"
pflog_flags=""
pfsync_enable="NO"
pfsync_syncdev=""
pfsync_ifconfig=""
Правила
Общий вид: action [direction] [log] [quick] [on interface] [af] [proto protocol] [from src_addr [port src_port]] [to dst_addr [port dst_port]] [flags tcp_flags] [state]
Конфиг
#--------------
# FILE pf.conf
#--------------
#------------
# 1. Marcos
#------------
ext_if="em0"
#------------
# 2. Tables
#------------
# Таблица c IP-адресами заблокированным на подключение к 25-порту
table persist file "/etc/pf/ip_blocksmtp"
#------------
# 3. Options
#------------
set skip on lo0
set block-policy return
#------------
# 4. Scrub
#------------
scrub in all
#------------
# 5. Queue ALTQ
#------------
#------------
# 6. NAT, port map
#------------
#------------
# 7. Filter
#------------
pass all
pass on lo0
block drop in quick log on $ext_if from
#---------------
# END of pf.conf
#---------------
Command
# Включить
pfctl -e
# Выключить
pfctl -d
# Посмотреть что есть
pfctl -sr
# Проверить правила без применения
pfctl -nf /etc/pf/pf.conf
# Применить правила
pfctl -f /etc/pf/pf.conf
# Просмотр содержимого таблицы
pfctl -t tablebname -T show
# Добавление адреса в таблицу
pfctl -t tablebname -T add 192.168.1.1
# Удаление адресов из таблицы
pfctl -t tablename -T delete 192.168.1.1