pfctl

Управление устройством фильтрации пакетов (packet filter, PF) и трансляции сетевых адресов (network address translation, NAT)

Синтаксис:

pfctl [-AdeghmNnOoqRrvz] [-a закладка] [-D макрос=значение]

[-F модификатор ] [-f файл] [-i интерфейс] [-k хост] [-p устройство]

[-s модификатор] [-t таблица -T команда [адрес ...]] [-x уровень]


Поддерживаемые платформы:

Neutrino

Опции:

-A

Загружать только правила очередей, содержащиеся в файле правил. Другие правила и опции игнорируются.

-a закладка

Применять опции -f, -F и -s только к правилам в указанной закладке. Помимо основного набора правил, утилита pfctl позволяет загружать дополнительные наборы правил (закладки) по имени и манипулировать ими. Основной набор правил является закладкой по умолчанию.

Закладкам присваиваются имена, и они могут быть вложенными, при этом различные компоненты пути к закладке разделяются символами косой черты (/), аналогично иерархиям файловой системы. Операции набора правил применяются к последнему компоненту пути к закладке.

Реализация правил закладки из основного набора правил описана в документации к pf.conf.

В закладки также можно добавить частные таблицы путем загрузки закладки из файла pf.conf с табличными операторами или с использованием стандартных команд таблиц, например:

# pfctl -a foo/bar -t mytable -T add 1.2.3.4 5.6.7.8

Если в закладку загружено правило со ссылкой на таблицу, то правилом используется частная таблица (если она определена), затем происходит возвращение к таблице, определенной в основном наборе правил (если она существует). Данное поведение аналогично правилам C для области видимости переменной. Также возможно создание отдельных таблиц с одинаковыми именами в глобальном наборе правил и закладке, что не рекомендуется; в этом случае выдается предупреждение.

-D макрос=значение

Определить указанный макрос и его значение в командной строке. При этом макрос в наборе правил перезаписывается.

-d

Деактивировать фильтр пакетов.

-e

Активировать фильтр пакетов.

-F модификатор

Очистить параметры фильтра, определенные модификатором (можно использовать сокращенный вариант):

-f файл

Загрузить правила, содержащиеся в указанном файле. Этот файл может содержать макросы, таблицы, опции, а также правила нормализации, формирования очередей, трансляции и фильтрации. Операторы должны отображаться в указанном порядке, за исключением макросов и таблиц.

Для использования стандартного потока вывода необходимо указать для аргумента файл значение -.

-g

Включать выходные данные ( полезно при отладке).

-h

Вывести справочную информацию.

-i интерфейс

Ограничить операцию указанным интерфейсом.

-k хост

Уничтожить все записи состояния, созданные указанным хостом. Можно указать вторую опцию -k, что приведет к уничтожению всех записей состояния между первым и вторым хостом. Например, для уничтожения всех записей состояния, созданных хостом host, введите следующее значение:

# pfctl -k host

Для уничтожения всех записей состояния между хостами host1 и host2 введите следующее значение:

# pfctl -k host1 -k host2

-m

Объединить явно указанные опции без сброса пропущенных значений. Эта опция позволяет корректировать отдельные опции, не изменяя остальные:

# echo "set loginterface fxp0" | pfctl -mf -

-N

Загружать только правила NAT, присутствующие в файле правил. Другие правила и опции игнорируются.

-n

Фактически не загружать правила; выполнять только синтаксический анализ.

-O

(прописная "О") Загружать только опции, присутствующие в файле правил. Другие правила и опции игнорируются.

-o

Активировать оптимизатор наборов правил, который предпринимает попытку оптимизации наборов правил путем удаления дублированных правил и более эффективного определения порядка правил. Как правило, оптимизатор выполняет следующее:
С целью адаптации быстрых правил к фактическому поведению сети можно указать вторую опцию -o для использования загруженного набора правил в качестве профиля обратной связи.

Примечание. Оптимизатор наборов правил изменяет набор правил с целью повышения эффективности. Побочным эффектом изменения набора правил может стать изменение значений статистики по каждому из правил. При необходимости учета по каждому правилу (например, для выставления счетов) следует отказаться от использования оптимизатора наборов правил или добавить препятствующее оптимизации поле метки во все правила учета.

-p устройство

Использовать вместо устройства по умолчанию /dev/pf файл устройство.

-q

Вывести только ошибки и предупреждения.

-R

Загрузить только правила фильтрации, содержащиеся в файле правил. Другие правила и опции игнорируются.

-r

Выполнять обратный поиск DNS для выводимых состояний.

-s модификатор

Вывести параметры фильтра, определенные модификатором (можно использовать сокращенный вариант):

Обратите внимание, что при автоматической оптимизации skip step, выполняемой io-pkt, реализация правил пропускается при наличии такой возможности. Учет пакетов, переданных с запоминанием состояния, ведется в правиле, создавшем состояние (даже если реализация правила выполняется только один раз для всего соединения).

-T команда [адрес ...]

Указать команду (можно использовать сокращенный вариант) для применения к таблице. Доступны следующие команды:
Команды add, delete, replace и test можно снабдить списком адресов: непосредственно в командной строке и/или в неформатированном текстовом файле с помощью флага -f. В текстовом файле допускается использовать комментарии, начинающиеся с символа #. Вместе с этими командами также можно один или два раза указать опцию -v. В этом случае утилита pfctl выводит подробный результат операции для каждого отдельного адреса; в качестве префикса используется одна из следующих букв:
Для каждой таблицы ведется набор счетчиков, значения которых можно получить с помощью опции -v. Например, следующие команды позволяют определить открытый межсетевой экран, на котором ведется учет пакетов, передаваемых на FTP-сервер OpenBSD или поступающих с него. Для конфигурирования межсетевого экрана и отправки 10 ping-запросов на FTP-сервер используются следующие команды:

# printf "table { ftp.NetBSD.org }\n \

pass out to keep state\n" | pfctl -f-

# ping -qc10 ftp.NetBSD.org

Теперь можно использовать команду таблицы show для вывода количества пакетов и байтов, передаваемых или блокируемых правилами со ссылкой на таблицу, по каждому адресу и направлению пакета. Время запуска текущей операции учета также отображается в строке Cleared:

# pfctl -t test -vTshow

129.128.5.191

Cleared: Thu Feb 13 18:55:18 2003

In/Block: [ Packets: 0 Bytes: 0 ]

In/Pass: [ Packets: 10 Bytes: 840 ]

Out/Block: [ Packets: 0 Bytes: 0 ]

Out/Pass: [ Packets: 10 Bytes: 840 ]

Аналогичным образом, можно просматривать глобальную информацию о таблицах. Для этого следует дважды указать опцию - v и команду -s Tables. При этом отображается количество адресов в каждой таблице, количество правил со ссылкой на таблицу и глобальная статистика по пакетам для всей таблицы:

# pfctl -vvsTables

--a-r- test

Addresses: 1

Cleared: Thu Feb 13 18:55:18 2003

References: [ Anchors: 0 Rules: 1 ]

Evaluations: [ NoMatch: 3496 Match: 1 ]

In/Block: [ Packets: 0 Bytes: 0 ]

In/Pass: [ Packets: 10 Bytes: 840 ]

In/XPass: [ Packets: 0 Bytes: 0 ]

Out/Block: [ Packets: 0 Bytes: 0 ]

Out/Pass: [ Packets: 10 Bytes: 840 ]

Out/XPass: [ Packets: 0 Bytes: 0 ]


В этом случае обнаружено совпадение только одного пакета – исходного запроса ping, но все пакеты, передаваемые в результате этого состояния, учитываются корректно. Перезагрузка таблицы (таблиц) или набора правил не влияет на учет пакетов. Если передается пакет с запоминанием состояния, который больше не соответствует таблице, то вместо увеличения значения счетчиков Pass, увеличиваются значения двух счетчиков XPass. В приведенном примере подобное поведение возникнет в случае очистки таблицы во время выполнения команды ping.

Если указана одна опция -v, утилита pfctl выводит только первую строку, содержащую флаги и имя таблицы. Флаги определены следующим образом:

-t таблица

Указать имя таблицы.

-v

Вывести расширенную информацию. Если опция -v указана повторно, утилита pfctl выводит более подробную информацию, включая предупреждения набора правил. Влияние этой опции на команды таблицы описано выше.

-x уровень

Установить один из следующих уровней отладки (можно использовать сокращение):

-z

Очистить статистику по каждому правилу.

Описание:

Утилита pfctl взаимодействует с устройством фильтрации пакетов через интерфейс ioctl_socket(), описанный в pf. Она позволяет настраивать наборы правил и параметры и извлекать информацию о статусе из фильтра пакетов.

Фильтрация пакетов ограничивает передачу определенных типов пакетов через сетевые интерфейсы по направлению к хосту или от хоста на основе правил фильтрации, описанных в pf.conf. Фильтр пакетов также может заменять адреса и порты пакетов. Замена адресов и портов источников исходящих пакетов называется NAT (Network Address Translation – трансляция сетевых адресов) и используется для подключения внутренней сети (как правило, зарезервированного адресного пространства) к внешней (Интернет), для чего все соединения с внешними хостами инициируются шлюзом. Замена адресов и портов назначения используется для перенаправления соединений на различные хосты и/или порты. Также поддерживается комбинация обоих типов трансляции (двунаправленная трансляция NAT). Правила трансляции описаны в документации к pf.conf.

Фильтр пакетов не перенаправляет пакеты между интерфейсами самостоятельно. Перенаправление можно активировать путем определения для переменных sysctl net.inet.ip.forwarding и net.inet6.ip6.forwarding значения 1. Постоянные значения этих переменных можно установить в /etc/sysctl.conf.

Файлы:

/etc/pf.conf

Файл правил фильтрации пакетов.

/etc/pf.os

База данных пассивных отпечатков ОС.