Введение

Пакетный фильтр (англ. Packet Filter, также pf) — это stateful-пакетный фильтр, распространяемый под лицензией BSD и являющийся ключевым компонентом программного обеспечения для межсетевых экранов. Он сопоставим с netfilter (iptables), ipfw и ipfilter. PF был разработан для OpenBSD, но портирован на многие другие операционные системы.

История

PF изначально был разработан как замена IPFilter Даррена Рида, от которого он унаследовал значительную часть синтаксиса правил. IPFilter был удален из репозитория CVS OpenBSD 30 мая 2001 года из-за обеспокоенности разработчиков OpenBSD его лицензией. Первоначальную версию PF написал Дэниел Хартмайер. Она впервые появилась в OpenBSD 3.0, выпущенной 1 декабря 2001 года. Впоследствии PF был значительно переработан Хеннингом Брауэром и Райаном Макбрайдом, при этом основную часть кода написал Хеннинг Брауэр. В настоящее время Хеннинг Брауэр является основным разработчиком PF.

Особенности

Синтаксис фильтрации аналогичен IPFilter, но с некоторыми изменениями для большей ясности. Трансляция сетевых адресов (NAT) и обеспечение качества обслуживания (QoS) были интегрированы в PF. Функции, такие как pfsync и CARP для обеспечения отказоустойчивости и резервирования, authpf для аутентификации сессий и FTP-прокси для упрощения межсетевого экранирования сложного протокола FTP, также расширили возможности PF. PF также поддерживает SMP (симметричную многопроцессорность) и STO (опции отслеживания состояния). Одной из многих инновационных особенностей является система логирования PF. Логирование в PF настраивается для каждого правила в файле pf.conf, а данные логов предоставляются PF через псевдосетевой интерфейс pflog – это единственный способ извлечения данных из режима ядра для программ пользовательского уровня. Логи можно отслеживать с помощью стандартных утилит, таких как tcpdump, которая в OpenBSD была специально расширена для этой цели, или сохранять на диск в двоичном формате tcpdump/pcap с помощью демона pflogd.