Управление устройством фильтрации пакетов (packet filter, PF) и трансляции сетевых адресов (network address translation, NAT)
pfctl [-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 для использования загруженного набора правил в качестве профиля обратной связи.
| Оптимизатор наборов правил изменяет набор правил с целью повышения эффективности. Побочным эффектом изменения набора правил может стать изменение значений статистики по каждому из правил. При необходимости учета по каждому правилу (например, для выставления счетов) следует отказаться от использования оптимизатора наборов правил или добавить препятствующее оптимизации поле метки во все правила учета. |
- -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
Предыдущий раздел: Утилиты