pfctl-ksz

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

Синтаксис:

pfctl-ksz [-AdeghmNnOoqRrvz] [-a закладка] [-D макрос=значение] [-F модификатор ] [-f файл] [-i интерфейс] [-k хост] [-p устройство] [-s модификатор] [-t таблица -T команда [адрес ...]] [-x уровень]

Опции:

-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 модификатор
Очистить параметры фильтра, определенные модификатором (можно использовать сокращенный вариант):
nat
очистить правила NAT.
queue
очистить правила очередей.
rules
очистить правила фильтрации.
state
очистить таблицу состояний (NAT и фильтрации).
Sources
очистить таблицу отслеживания источника.
info
очистить информацию фильтрации (статистические данные, не связанные с правилами).
Tables
очистить таблицы.
osfp
очистить пассивные отпечатки операционной системы.
all
очистить все вышеуказанные данные.
-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 для использования загруженного набора правил в качестве профиля обратной связи.

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

-p устройство
Использовать вместо устройства по умолчанию /dev/pf файл устройство.
-q
Вывести только ошибки и предупреждения.
-R
Загрузить только правила фильтрации, содержащиеся в файле правил. Другие правила и опции игнорируются.
-r
Выполнять обратный поиск DNS для выводимых состояний.
-s
модификатор Вывести параметры фильтра, определенные модификатором (можно использовать сокращенный вариант):
nat
вывести правила NAT, загруженные в настоящий момент.
queue
вывести правила очередей, загруженные в настоящий момент. В случае использования вместе с опцией -v команда pfctl также выводит статистику для каждой очереди. В случае использования вместе с опцией -v -v команда pfctl работает в цикле и раз в пять секунд выводит обновленную статистику очереди, в т.ч. измеренное значение пропускной способности и число пакетов в секунду.
rules
вывести правила фильтрации, загруженные в настоящий момент. В случае использования вместе с опцией -v команда pfctl также выводит статистику для каждого правила (количество реализаций, пакетов и байтов).

Обратите внимание, что при автоматической оптимизации skip step, выполняемой io-pkt-*, реализация правил пропускается при наличии такой возможности. Учет пакетов, переданных с запоминанием состояния, ведется в правиле, создавшем состояние (даже если реализация правила выполняется только один раз для всего соединения).
Anchors
выводить загруженные в настоящий момент закладки, непосредственно присоединенные к главному набору правил. Если также указана опция -a закладка, вместо этих закладок выводятся закладки, загруженные непосредственно под данной закладкой. Если указана опция -v, все закладки, присоединенные под целевой закладкой, выводятся в рекурсивном режиме.
state
вывести содержимое таблицы состояний.
Sources
вывести содержимое таблицы отслеживания источника.
info
вывести информацию о фильтре (статистику и счетчики). В случае использования вместе с опцией -v также выводится статистика отслеживания источника.
labels
вывести статистику для отдельных правил фильтрации с метками (метка, реализации, пакеты, байты). Эту команду удобно использовать в целях учета.
timeouts
вывести текущие глобальные таймауты.
memory
вывести текущие жесткие ограничения пула памяти.
Tables
вывести список таблиц.
osfp
вывести список отпечатков операционных систем.
Interfaces
вывести список интерфейсов и драйверов интерфейсов, доступных фильтру пакетов. В случае использования вместе с удвоенной опцией -v утилита pfctl также выводит статистику по интерфейсам. С помощью опции -i можно осуществлять выбор интерфейса или группы интерфейсов.
all
вывести все вышеописанные данные кроме списка интерфейсов и отпечатков операционных систем.
-T команда
[адрес ...] Указать команду (можно использовать сокращенный вариант) для применения к таблице. Доступны следующие команды:
kill
уничтожить таблицу.
flush
сбросить все адреса таблицы.
add
добавить один или несколько адресов в таблицу. Несуществующая таблица создается автоматически.
delete
удалить один или несколько адресов из таблицы.
replace
заменить адреса в таблице. Несуществующая таблица создается автоматически.
show
вывести содержимое (адреса) таблицы.
test
проверить указанные адреса на совпадение с таблицей.
zero
очистить всю статистику в таблице.
load
загрузить только определения таблицы из файла pf.conf. Эта команда используется вместе с опцией -f, как в следующем примере:
# pfctl -Tl -f pf.conf

Команды add, delete, replace и test можно снабдить списком адресов: непосредственно в командной строке и/или в неформатированном текстовом файле с помощью флага -f. В текстовом файле допускается использовать комментарии, начинающиеся с символа #. Вместе с этими командами также можно один или два раза указать опцию -v. В этом случае утилита pfctl выводит подробный результат операции для каждого отдельного адреса; в качестве префикса используется одна из следующих букв:
  • A – адрес или сеть добавлены.
  • C – адрес или сеть изменены (отменены).
  • D – адрес или сеть удалены.
  • M – совпадение адреса (только для тестирования).
  • X – адрес или сеть дублируются и, следовательно, игнорируются.
  • Y – невозможно добавить адрес или сеть из-за конфликтующих атрибутов!.
  • Z – адрес или сеть очищены (статистика).
Для каждой таблицы ведется набор счетчиков, значения которых можно получить с помощью опции -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 выводит только первую строку, содержащую флаги и имя таблицы. Флаги определены следующим образом:
  • c – константные таблицы, которые могут быть изменены только в pf.conf.
  • p – постоянные таблицы, которые не уничтожаются автоматически при отсутствии правил со ссылками на них.
  • a – таблицы, входящие в активный набор таблиц. Таблицы без этого флага в действительности не существуют, не могут содержать адреса и выводятся только в том случае, если указана опция -g.
  • i – таблицы, входящие в неактивный набор таблиц. Во время загрузки файла pf.conf этот флаг может использоваться только непродолжительное время.
  • r – таблицы, ссылки на которые содержатся в правилах.
  • h – таблица в основном наборе правил, скрытая в одной или нескольких таблицах с одинаковым именем от закладок, присоединенных ниже.
-t таблица
Указать имя таблицы.
-v
Вывести расширенную информацию. Если опция -v указана повторно, утилита pfctl выводит более подробную информацию, включая предупреждения набора правил. Влияние этой опции на команды таблицы описано выше.
-x уровень
Установить один из следующих уровней отладки (можно использовать сокращение):
none
не создавать сообщения отладки.
urgent
создавать сообщения отладки только для серьезных ошибок.
misc
создавать сообщения отладки для различных ошибок.
loud
создавать сообщения отладки для общих условий.
-z
Очистить статистику по каждому правилу.

Платформы:

ЗОСРВ «Нейтрино»

Целевые архитектуры:

aarch64, arm, armv7, e2k, mips, ppc, x86

Описание:

Утилита 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
База данных пассивных отпечатков ОС.

Классификация:

Базовые подсистемы ЗОСРВ «Нейтрино», NetBSD, СЗИ

Тематические ссылки:

/etc/pf.conf, pf, pfctl, pflogd, sysctl




Предыдущий раздел: Утилиты