27.4. Packet Filter (PF, межсетевой экран OpenBSD) и ALTQ

Пересмотрел и обновил John Ferrell.

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

Проект OpenBSD осуществляет замечательную работу по поддержке PF FAQ. Этот раздел руководства фокусируется на взаимосвязи PF и FreeBSD, предоставляя лишь общую информацию по его использованию. За более подробной информацией по использованию PF обратитесь к PF FAQ.

Дополнительные сведения о PF для FreeBSD можно получить с веб сайта: http://pf4freebsd.love2party.net/.

27.4.1. Использование модуля ядра PF

Чтобы загрузить PF как модуль ядра, добавьте следующую строку в /etc/rc.conf:

pf_enable="YES"

Далее, выполните стартовый скрипт:

# /etc/rc.d/pf start

Учтите, модуль PF не загрузится, если он не сможет найти конфигурационный файл с набором правил. По умолчанию размещение файла с правилами следующее: /etc/pf.conf. Если путь к файлу отличается от вышеприведённого, то внесите в /etc/rc.conf строку вида:

pf_rules="/path/to/pf.conf"

Файл с примерами конфигураций pf.conf находится в каталоге /usr/share/examples/pf/.

Модуль PF можно также загрузить вручную:

# kldload pf.ko

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

pflog_enable="YES"

и запустите на выполнение скрипт:

# /etc/rc.d/pflog start

Если вам необходимы другие функциональные возможности PF, то придется добавить поддержку PF в ядро.

27.4.2. Параметры ядра

Включение PF путем компиляции с ядром FreeBSD не является обязательным требованием, однако вам может понадобиться одна из функциональных возможностей, которая не включена в загружаемый модуль. Например, pfsync(4) являет собой псевдоустройство, которое вносит определенные изменения в таблицу состояний, используемую PF. В дальнейшем, это псевдоустройство может быть скомпоновано с carp(4) чтобы создать отказоустойчивую систему межсетевых экранов на основе PF.

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

device pf
device pflog
device pfsync

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

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

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

27.4.3. Доступные параметры rc.conf

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

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"            # Включить сетевой шлюз

27.4.4. Создание правил фильтрации

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

Внимание: Изучая PF FAQ, имейте в виду, что различные версии FreeBSD могут содержать разные версии pf. В настоящий момент FreeBSD использует ту же версию PF, которая включена в OpenBSD═4.1.

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

27.4.5. Работа с PF

Для управления PF используйте утилиту pfctl(8). Ниже приведено несколько полезных команд (все возможные команды и опции приведены на странице справочника pfctl(8)):

Команда Действие
pfctl -e Включить PF
pfctl -d Выключить PF
pfctl -F all -f /etc/pf.conf Сбросить все правила (NAT, правила фильтрации, состояния соединений, таблицы и т.д.) и загрузить новые с файла /etc/pf.conf
pfctl -s [ rules | nat | state ] Отобразить правила фильтрации, правила NAT или таблицу состояний соединений
pfctl -vnf /etc/pf.conf Проверить /etc/pf.conf на наличие ошибок, но сами наборы правил не загружать

27.4.6. Включение 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 всегда первым пропускает трафик из очереди c более высоким приоритетом.

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

Этот, и другие документы, могут быть скачаны с ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите <doc@FreeBSD.org>.
По вопросам, связанным с русским переводом документации, пишите в рассылку <frdp@FreeBSD.org.ua>.
Информация по подписке на эту рассылку находится на сайте проекта перевода.