Обработка набора правил
После загрузки набора правил в PF набор правил образует связанный список. Каждое правило содержит параметры, указывающие на то, к каким пакетам его следует применять. Параметрами могут быть адреса источника или назначения, тип протокола, номера портов и т.д. К пакету, соответствуюму правилу, применяется указанное действие. Пакет анализируется в соответствии со всеми правилами списка (если не указано обратное ключевым словом quick), при этом более поздние правила переопределяют более ранние, а в том случае, если несколько правил устанавливают политику пропуска/блокирования данного пакета, используется действие, указанное в последнем правиле. Об одном специфическом исключении – ключевом слове quick – будет упомянуто позже. То обстоятельство, что набор правил в PF хранится в виде множественных связанных списков, позволяет PF выполнять автоматическую оптимизацию наборов правил.
Все настройки PF определяются в одном файле /etc/pf.conf. Соблюдается следующий порядок определений:
- списки – определенные пользователем множества, например диапазоны IP-адресов
- макросы – определенные пользователем переменные, задающие, к примеру, названия интерфейсов
- таблицы – структуры для хранения списков IP-адресов
- опции – директивы, контролирующие поведение PF
- нормализация трафика – директивы нормализации и дефрагментации пакетов
- очереди – управление полосой пропускания и приоритами пакетов
- NAT – управление NAT
- RDR – управление перенаправлением пакетов
- правила фильтрации – директивы выборочной фильтрации пакетов
Использование логических операторов
Многие прикладные протоколы используют целый диапазон номеров портов; также может возникнуть необходимость в правилах применимых к группе хостов. Средства определения диапазонов востребованы и для написания правил, разрешающих FTP-соединения. На теме настроек для работы с FTP-протокол следует остановиться отдельно, пока же опишем логические операторы, необходимые для эффективного задания числовых множеств: