Packet Filter Firewall (PF, межсетевой экран OpenBSD


В июле 2003 программный межсетевой экран OpenBSD, известный как PF, был портирован в FreeBSD и стал доступен из коллекции портов FreeBSD; первым релизом, где PF был интегрирован в основную систему, стала FreeBSD 5.3 в ноябре 2004. PF это полноценный межсетевой экран с широким набором возможностей, в котором есть опциональная поддержка ALTQ (Alternate Queuing). ALTQ предоставляет управление пропускной способностью Quality of Service (QoS), позволяющее гарантировать пропускную способность для различных сервисов на основе фильтрующих правил. Проект OpenBSD поддерживает Руководство Пользователя PF, которое не было внесено в этот раздел руководства во избежание дублирования работы.

Дополнительную информацию можно получить с веб сайта PF для FreeBSD: http://pf4freebsd.love2party.net/.
26.4.1. Включение PF

PF включен в базовую поставку FreeBSD версии 5.3 и выше в качестве отдельного загружаемого модуля. PF динамически подгружает модуль ядра если включена переменная rc.conf pf_enable="YES". Загружаемый модуль создан с включенным pflog(4).

Замечание: Модуль предполагает, что файл конфигурации вашего ядра содержит строки options INET и device bpf. Если не определен параметр NOINET6 для FreeBSD версий до 6.0-RELEASE и NO_INET6 для более поздних версий (например, в файле make.conf(5)), требуется также параметр options INET6.

После загрузки модуля или пересборки ядра с поддержкой PF, функциональность pf может управляться при помощи команды pfctl.

pf включается при помощи команды

# pfctl -e

Команда pfctl позволяет управлять правилами pf. Дополнительную информацию следует черпать из страницы справочника pfctl(8).
26.4.2. Параметры ядра

Включение PF путем компиляции с ядром FreeBSD не является обязательным требованием, и описано здесь в качестве дополнительной информации. При компиляции PF с ядром загружаемый модуль не используется.

Пример параметров конфигурации ядра для включения PF находится в /usr/src/sys/conf/NOTES и показан здесь:

device pf
device pflog
device pfsync

device pf включает поддержку межсетевого экрана ''Packet Filter''.

device pflog включает необязательное сетевое псевдоустройство pflog(4), которое может использоваться для протоколирования трафика через bpf(4). Даемон pflogd(8) может использоваться для сохранения протоколируемой информации на диск.

device pfsync включает необязательное сетевое псевдоустройство pfsync(4), используемое для отслеживания ''изменений состояния''. Поскольку оно не входит в загружаемый модуль, для его использования необходимо собрать собственное ядро.

Эти настройки будут действовать только после сборки и установки нового ядра.
26.4.3. Доступные параметры rc.conf

Для активации PF во время загрузки в /etc/rc.conf должны быть включены следующие переменные:

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

Если за межсетевым экраном находится локальная сеть и необходимо передавать пакеты для компьютеров этой сети, или использовать NAT, включите также следующий параметр:

gateway_enable="YES" # Включить сетевой шлюз
26.4.4. Включение ALTQ

ALTQ может быть включен только путем компилирования ядра FreeBSD с соответствующими параметрами. ALTQ поддерживается не всеми существующими драйверами сетевых карт. Для просмотра списка поддерживаемых устройств в вашем релизе FreeBSD обратитесь к странице справочника altq(4). Следующие параметры включат ALTQ и добавят дополнительную функциональность.

options ALTQ
options ALTQ_CBQ # Class Bases Queuing (CBQ)
options ALTQ_RED # Random Early Detection (RED)
options ALTQ_RIO # RED In/Out
options ALTQ_HFSC # Hierarchical Packet Scheduler (HFSC)
options ALTQ_PRIQ # Priority Queuing (PRIQ)
options ALTQ_NOPCC # Required for SMP build

options ALTQ включает подсистему ALTQ.

options ALTQ_CBQ включает Class Based Queuing (CBQ). CBQ позволяет распределять пропускную способность соединений по классам или очередям для выставления приоритетов трафика на основе правил фильтрации.

options ALTQ_RED включает Random Early Detection (RED). RED используется для предотвращения перегрузки сети. RED вычисляет длину очереди и сравнивает ее с минимальной и максимальной границей очереди. Если очередь превышает максимум, все новые пакеты отбрасываются. В соответствии со своим названием, RED отбрасывает пакеты из различные соединений в произвольном порядке.

options ALTQ_RIO включает Random Early Detection In and Out.

options ALTQ_HFSC включает Hierarchical Fair Service Curve Packet Scheduler. Дополнительная информация о HFSC находится по адресу: http://www-2.cs.cmu.edu/~hzhang/HFSC/main.html.

options ALTQ_PRIQ включает Priority Queuing (PRIQ). PRIQ всегда пропускает трафик из более высокой очереди первым.

options ALTQ_NOPCC включает поддержку SMP для ALTQ. Эта опция необходима для SMP систем.
26.4.5. Создание правил фильтрации

Пакет PF читает конфигурацию из файла pf.conf(5); пакеты отвергаются, пропускаются или модифицируются в соответствии с правилами и определениями из этого файла. В стандартную поставку FreeBSD входит файл /etc/pf.conf, содержащий полезные примеры с комментариями.

Несмотря на наличие собственного для FreeBSD файла /etc/pf.conf, синтаксис его совпадает с OpenBSD. Отличное руководство по конфигурации pf, написанное группой разработки OpenBSD, расположено по адресу http://www.openbsd.org/faq/pf/.

Внимание: Изучая Руководство PF, имейте в виду, что различные версии FreeBSD содержат разные версии pf. pf в FreeBSD 5.X соответствует OpenBSD версии 3.5, в FreeBSD 6.X pf соответствует OpenBSD версии 3.7.

Список рассылки, посвящённый FreeBSD packet filter является хорошим местом, чтобы задавать вопросы по конфигурации и использованию пакета pf. Не забудьте проверить архивы списка рассылки перед тем, как задавать вопрос.

Обновлено: 13.03.2015