C.1. Введение в работу с пакетным фильтром OpenBSD

Пакетный фильтр OpenBSD в настоящий момент успешно портирован во все рассматриваемые в этом курсе системы: в FreeBSD, NetBSD и DragonFly BSD. Большинство описанных в этом обзоре функций, таких как authpf(8) или CARP и pfsync портированы во все четыре системы. (pfsync(4), кажется нет в NetBSD.) Но при этом самая свежая и наиболее функциональная версия входит в OpenBSD, а остальные системы могут от неё отставать больше или меньше.

Здесь описана версия OpenBSD 4.0, и кое где по тексту упоминаются отличия свойственные FreeBSD 6.2.

Для активации пакетного фильтра в OpenBSD надо добавить строку pf=YES в файл /etc/rc.conf.local(5). В FreeBSD понадобятся следующие строки в файле /etc/rc.conf(5):

pf_enable="YES"                 # Включить PF (Подгрузить модуль, если требуется)
pf_rules="/etc/pf.conf"         # Откуда подгружать правила для pf
pf_flags=""                     # дополнительные флаги для управляющей программы pfctl(8)
pflog_enable="YES"              # запуск pflogd(8) (система журналирования)
pflog_logfile="/var/log/pflog"  # где pflogd должен хранить журнал
pflog_flags=""                  # дополнительные флаги для pflogd
      

Кроме того, пакетный фильтр можно запустить при помощи команды

# pfctl -e
        
а остановить при помощи команды
# pfctl -d
        

Эти две команды не подгружают правила, а только запускают брандмауэр. Для подгрузки правил надо воспользоваться командой

# pfctl -f /etc/some-ruleset-file
      

Вот некоторые примеры использования команды pfctl(8):

# pfctl -f /etc/pf.conf     Загрузить файл pf.conf
# pfctl -nf /etc/pf.conf    Проверить синтаксис, но не загружать
# pfctl -Nf /etc/pf.conf    Загрузить только правила NAT
# pfctl -Rf /etc/pf.conf    Загрузить только фильтрующие правила

# pfctl -sn                 Показать текущие правила NAT 
# pfctl -sr                 Показать текущие правила фильтра
# pfctl -ss                 Показать текущую таблицу состояний (state table)
# pfctl -si                 Показать статистику
# pfctl -sa                 Показать ВСЁ что можно
      

Для ведения журнала может использоваться система pflogd(8), которая создаёт псевдо сетевой интерфейс pflog0. Это позволяет слушать журнал «на лету» при помощи утилиты tcpdump(8) (см. Раздел 6.11, «Демонстрация основных навыков работы с утилитой tcpdump(1)»). Кроме того, pflogd(8)сохраняет журнал в отдельный файл, который пишется в двоичном формате. Для чтения журнального файла тоже применяется утилита tcpdump(8), — в ней, для этого, предусмотрено несколько характерных условий, предназначенных не для прослушивания сети (основное её предназначение), а специально для анализа журнальных файлов pf(4).