Правила файрвола pfSense - создание и управление ими
Файрвол pfSense построен на основе pf (packet filter) - системы фильтрации пакетов, заимствованной из OpenBSD. pf выполняет фильтрацию с сохранением состояния соединений (stateful inspection): после разрешения первого пакета соединения все последующие пакеты этого же соединения пропускаются автоматически на основании записи в таблице состояний (state table). Это означает, что правило файрвола необходимо создавать только для инициирующего направления трафика - ответный трафик обрабатывается без явного правила.
Материал ориентирован на администраторов, имеющих опыт работы с межсетевыми экранами Cisco ASA, FortiGate или MikroTik, и переходящих на pfSense. Для каждого ключевого отличия приведены пояснения, упрощающие миграцию.
Принципы обработки правил
Трёхуровневая иерархия правил
pfSense обрабатывает правила файрвола в строго определённом порядке. Правила делятся на три класса, которые оцениваются последовательно:
- Floating rules - обрабатываются первыми. Применяются к одному или нескольким интерфейсам одновременно и поддерживают фильтрацию в обоих направлениях.
- Правила групп интерфейсов - обрабатываются вторыми. Применяются ко всем интерфейсам, входящим в группу (включая вкладки VPN).
- Правила интерфейсов - обрабатываются последними. Применяются только к конкретному интерфейсу.
Порядок имеет практическое значение: если правило группы интерфейсов заблокировало трафик, правило на вкладке конкретного интерфейса не может его отменить - пакет уже обработан на предыдущем уровне.
Принцип first match wins
Внутри каждого уровня правила обрабатываются последовательно сверху вниз. Первое совпавшее правило определяет судьбу пакета - дальнейшая проверка не выполняется. Пакеты, не совпавшие ни с одним правилом, отбрасываются неявным правилом запрета (implicit deny).
Внимание:
Floating rules с отключённым флагом Quick работают по обратному принципу - last match wins. Это исключение рассмотрено в разделе Floating rules .
Привязка к интерфейсу и направление
Правила на вкладках интерфейсов фильтруют только входящий трафик на соответствующем интерфейсе. Трафик от хостов LAN обрабатывается правилами LAN, трафик из интернета - правилами WAN. Фильтрация исходящего трафика на уровне интерфейса не выполняется - для этого используются floating rules.
Сравнение с другими платформами
| Характеристика | pfSense (pf) | Cisco ASA | FortiGate | MikroTik RouterOS |
|---|---|---|---|---|
| Модель обработки | First match wins | First match wins (ACL) | Policy ID, first match wins | Chains (filter/nat/mangle) |
| Привязка правил | Per-interface, inbound | Per-interface, inbound | Zone-based (zone pairs) | Per-chain, configurable |
| Неявное правило | Deny (silent) | Deny (implicit) | Deny (policy ID 0) | Accept (default policy) |
| Stateful | Да (по умолчанию) | Да (по умолчанию) | Да (по умолчанию) | Требует connection-state matcher |
| Floating/Global rules | Да (floating) | Global ACL | Global policy | Forward chain |
Администраторам MikroTik следует обратить особое внимание на различие моделей: в MikroTik RouterOS политика по умолчанию - Accept (пропускать), в pfSense - Deny (запрещать). При миграции необходимо убедиться, что все разрешающие правила созданы явно.
Автоматически генерируемые правила
pfSense автоматически создаёт несколько служебных правил, которые не отображаются в веб-интерфейсе как обычные правила:
- Anti-lockout rule - предотвращает блокировку административного доступа. Разрешает трафик из любого источника внутренней сети к IP-адресу LAN-интерфейса на порты управления (по умолчанию - веб-интерфейс и SSH). Отключается в System > Advanced > Admin Access.
- Anti-spoofing (uRPF) - проверяет обратный маршрут для каждого пакета по RFC 3704 (Unicast Reverse Path Forwarding). Пакеты с адресами источника, несовместимыми с таблицей маршрутизации, отбрасываются.
- Block private networks - блокирует RFC 1918 адреса на WAN-интерфейсе (при включённой опции в настройках интерфейса).
- Block bogon networks - блокирует пакеты с адресами из незанятого и зарезервированного адресного пространства. Список bogon-сетей обновляется ежемесячно с серверов Netgate.
Интерфейс управления правилами
Управление правилами файрвола осуществляется через Firewall > Rules. Каждый сетевой интерфейс представлен отдельной вкладкой. Дополнительно присутствует вкладка Floating для правил, применяемых к нескольким интерфейсам.

Рис. 1. Список правил файрвола на вкладке LAN
На странице списка правил отображаются:
- Порядковый номер и действие - значок действия (Pass, Block, Reject) с индикацией цветом
- Интерфейс - интерфейс, к которому привязано правило
- Протокол - TCP, UDP, ICMP или другой протокол IP
- Источник и назначение - адреса, сети или алиасы
- Порт - порт назначения (для TCP/UDP/SCTP)
- Gateway - шлюз для policy routing (при наличии)
- Описание - текстовое описание правила
Правила можно перемещать перетаскиванием для изменения порядка, дублировать, отключать без удаления и группировать с помощью разделителей (separators).
Создание правила
Для создания нового правила необходимо перейти на вкладку нужного интерфейса в Firewall > Rules и нажать одну из кнопок добавления (добавить в начало или в конец списка).

Рис. 2. Форма редактирования правила файрвола
Action (действие)

Рис. 3. Выбор действия правила
Поле Action определяет, что произойдёт с пакетом при совпадении с правилом:
| Действие | Поведение | Когда использовать |
|---|---|---|
| Pass | Пакет пропускается. Создаётся запись в таблице состояний (при включённом state tracking). | Разрешающие правила для легитимного трафика |
| Block | Пакет отбрасывается без уведомления отправителя. | Запрет трафика без раскрытия информации о файрволе |
| Reject | Пакет отбрасывается с отправкой уведомления отправителю: TCP RST для TCP-пакетов, ICMP Unreachable для остальных протоколов. | Запрет трафика внутри доверенных сетей - ускоряет обнаружение ошибок конфигурации на стороне клиента |
Внимание:
Действие Reject не следует использовать на WAN-интерфейсе. Отправка уведомлений об отклонении пакетов в интернет раскрывает наличие файрвола и может использоваться для разведки сетевой инфраструктуры.
Interface (интерфейс)
Определяет интерфейс, на котором действует правило. Правило фильтрует трафик, входящий на указанный интерфейс. Это ключевой момент: для разрешения трафика из LAN в интернет правило создаётся на вкладке LAN, а не WAN.
Address Family (семейство адресов)
Определяет, к какому типу IP-пакетов применяется правило:
- IPv4 - только IPv4-трафик
- IPv6 - только IPv6-трафик
- IPv4+IPv6 - оба типа трафика в одном правиле
При использовании алиасов в полях Source или Destination система автоматически применяет только те записи алиаса, которые соответствуют выбранному семейству адресов.
Protocol (протокол)
Определяет протокол IP-пакета:
- TCP, UDP, SCTP - транспортные протоколы с возможностью указания портов
- TCP/UDP - совпадение с TCP или UDP в одном правиле
- ICMP - с возможностью выбора конкретных типов ICMP-сообщений (Echo Request, Destination Unreachable и др.)
- Any - любой протокол
- Другие протоколы IP: ESP, AH, GRE, IPEncap, IGMP и т.д.
Source и Destination (источник и назначение)
Каждое поле поддерживает несколько типов значений:
- Any - любой адрес
- Single host or alias - один IP-адрес или алиас
- Network - подсеть в нотации CIDR (например, 192.168.1.0/24)
- Адрес интерфейса - LAN address, WAN address и т.д. (динамически подставляется текущий адрес интерфейса)
- PPPoE/L2TP clients - диапазон адресов клиентов PPPoE или L2TP
- This firewall (self) - только для Destination; совпадает с любым адресом, назначенным файрволу
Опция Invert Match инвертирует условие: правило совпадает со всеми адресами, кроме указанных.
Port (порт)
Для протоколов TCP, UDP и SCTP доступна настройка портов источника и назначения:
- Одиночный порт:
443 - Диапазон:
1024-65535 - Алиас портов:
WebPorts(содержащий набор портов)
Внимание:
Фильтрация по порту источника используется крайне редко. В подавляющем большинстве случаев достаточно указать только порт назначения.
Gateway (шлюз)
По умолчанию файрвол использует системную таблицу маршрутизации для определения следующего узла (next hop). Явное указание шлюза в правиле реализует policy routing - принудительную маршрутизацию трафика через указанный шлюз или группу шлюзов (gateway group).
Типичные сценарии применения:
- Направление трафика определённых хостов через конкретный WAN-интерфейс в конфигурации Multi-WAN
- Маршрутизация трафика через VPN-шлюз для определённых подсетей
- Балансировка нагрузки между несколькими WAN-каналами
Logging (журналирование)
Включение опции Log активирует запись событий совпадения правила в журнал файрвола. Журнал доступен в Status > System Logs > Firewall. Рекомендуется включать журналирование для правил блокировки критичного трафика и при диагностике проблем.
Избыточное журналирование создаёт нагрузку на систему и затрудняет анализ. На производственных системах следует журналировать только те правила, для которых это действительно необходимо.
Description (описание)
Текстовое описание правила длиной до 52 символов. Рекомендуется указывать назначение правила и номер заявки (тикета), если правило создано по запросу. Описание не влияет на обработку трафика, но существенно упрощает аудит и сопровождение набора правил.
Дополнительные параметры
При раскрытии секции Advanced Options становятся доступны расширенные настройки:
- Source OS - пассивное определение операционной системы отправителя по характеристикам TCP SYN-пакетов (p0f fingerprinting)
- TCP Flags - совпадение по конкретным TCP-флагам (SYN, ACK, FIN, RST, URG, PSH)
- Schedule - привязка правила к расписанию (правило активно только в указанное время)
- Таgging - маркировка пакетов строковым тегом для последующего совпадения в floating rules
- Max states / Max source nodes - ограничение количества состояний (глобально и по IP-адресу источника)
- Max connections per host / Max new connections per second - ограничение скорости установления соединений (только TCP)
- VLAN Priority (802.1p) - совпадение и установка приоритета PCP для QoS
Floating rules
Floating rules - расширенные правила файрвола, которые предоставляют возможности, недоступные на вкладках обычных интерфейсов. Управление floating rules осуществляется на вкладке Firewall > Rules > Floating.

Рис. 4. Вкладка Floating rules
Отличия от правил интерфейсов
| Характеристика | Правила интерфейсов | Floating rules |
|---|---|---|
| Привязка | Один интерфейс | Один, несколько или все интерфейсы |
| Направление | Только входящий (inbound) | Входящий, исходящий или оба |
| Порядок обработки | После floating и group rules | Первыми (наивысший приоритет) |
| Действие Match | Недоступно | Доступно (для traffic shaping) |
| Reply-to | Автоматически добавляется | Не добавляется автоматически |
Направление (Direction)
Floating rules поддерживают три варианта направления:
- in - только входящий трафик на выбранных интерфейсах
- out - только исходящий трафик на выбранных интерфейсах
- any - трафик в обоих направлениях
Флаг Quick
Флаг Quick определяет способ обработки совпадений:
- Quick включён (по умолчанию) - стандартный принцип first match wins. При совпадении пакет немедленно обрабатывается согласно действию правила.
- Quick отключён - принцип last match wins. Пакет продолжает проверяться по оставшимся правилам, и действие определяется последним совпавшим правилом.
Отключение Quick используется редко и предназначено для сложных сценариев, требующих переопределения действия на более поздних этапах обработки.
Действие Match
Действие Match уникально для floating rules. Оно не пропускает и не блокирует пакет, а только помечает его для целей traffic shaping - назначения в очередь ALTQ или применения limiter. Это основное применение floating rules в конфигурациях QoS.
Типичные сценарии использования
- Traffic shaping (ALTQ) - наиболее частое применение. Floating rules назначают трафик в очереди приоритезации.
- Фильтрация исходящего трафика - единственный способ фильтрации пакетов, покидающих интерфейс (outbound direction).
- Фильтрация трафика самого файрвола - контроль трафика, генерируемого процессами файрвола (DNS-запросы, NTP, обновления пакетов).
- Мультиинтерфейсные правила - применение одного правила к нескольким интерфейсам одновременно вместо дублирования правил на каждой вкладке.
Внимание:
Floating rules не добавляют автоматически директиву
reply-toдля входящего трафика. В конфигурациях Multi-WAN это может привести к асимметричной маршрутизации ответного трафика. Для Multi-WAN сценариев предпочтительно использовать правила на вкладках интерфейсов.
Отслеживание состояний
pfSense по умолчанию работает как stateful firewall. При совпадении разрешающего правила (Pass) создаётся запись в таблице состояний (state table). Все последующие пакеты того же соединения обрабатываются на основании этой записи без повторной проверки правил.

Рис. 5. Таблица состояний (Diagnostics > States)
Типы состояний (State Type)
| Тип | Описание | Применение |
|---|---|---|
| Keep State | Стандартное отслеживание состояний. По умолчанию для всех правил. | Большинство сценариев |
| Sloppy State | Менее строгая проверка последовательности пакетов. Допускает пропущенные пакеты. | Асимметричная маршрутизация, кластерные конфигурации |
| Synproxy State | Файрвол проксирует TCP-хендшейк: устанавливает соединение с клиентом от своего имени, затем устанавливает соединение с сервером. | Защита от SYN flood-атак на публичные сервисы |
| None | Отслеживание состояний отключено. Каждый пакет проверяется по правилам. | Специальные случаи; требует парных правил для ответного трафика |
Таблица состояний и таймауты
Таблица состояний хранит информацию обо всех активных соединениях. Каждая запись содержит:
- Адреса и порты источника и назначения
- Интерфейс, на котором создано состояние
- Текущее состояние TCP-соединения (SYN_SENT, ESTABLISHED, FIN_WAIT и т.д.)
- Время создания и время последнего пакета
- Количество переданных байт и пакетов
Состояния удаляются по истечении таймаута неактивности. Значения таймаутов по умолчанию настраиваются в System > Advanced > Firewall & NAT. pfSense поддерживает адаптивные таймауты: при заполнении таблицы состояний выше порогового значения таймауты автоматически сокращаются для освобождения ресурсов.
Просмотр текущей таблицы состояний доступен в Diagnostics > States. Здесь можно фильтровать состояния по интерфейсу, IP-адресу, порту и удалять отдельные записи вручную.
Ограничение количества состояний
В параметрах правила доступны ограничения:
- Maximum state entries - максимальное количество состояний, создаваемых данным правилом
- Maximum source nodes - максимальное количество уникальных IP-адресов источника
- Maximum established connections per host - максимальное количество установленных соединений для одного IP
- Maximum new connections per second - ограничение скорости установления новых TCP-соединений (защита от DDoS)
Группировка и организация правил
При увеличении количества правил их организация становится критически важной. pfSense предоставляет несколько механизмов для упорядочивания набора правил.
Разделители (Separators)
Разделители - цветные полосы с текстовыми заголовками, которые визуально группируют правила на вкладке интерфейса. Разделители не влияют на обработку трафика и служат исключительно для навигации. Для добавления разделителя следует нажать кнопку разделителя в верхней части списка правил.
Рекомендуемая структура разделителей:
--- Management Access ---
SSH, HTTPS к файрволу
--- Internal Services ---
DNS, NTP, DHCP
--- Server Farm ---
Правила доступа к серверам
--- User Access ---
Доступ пользователей к ресурсам
--- Deny All (explicit) ---
Явное правило запрета с журналированиемОписания правил
Каждое правило должно содержать осмысленное описание. Рекомендуется включать:
- Назначение правила (что разрешает/запрещает)
- Номер тикета или запроса на изменение
- Дату создания (для временных правил)
Стратегия порядка следования
Рекомендуемый порядок правил на вкладке интерфейса:
- Правила блокировки известных угроз (blacklists)
- Правила доступа к управлению файрволом
- Правила для внутренних сервисов (DNS, NTP, DHCP)
- Правила доступа к серверам
- Правила доступа пользователей к интернету
- Явное правило запрета с включённым журналированием (для аудита отклонённого трафика)
Явное правило запрета в конце списка не является обязательным - implicit deny выполнит ту же функцию. Однако явное правило с журналированием позволяет фиксировать весь отклонённый трафик, что полезно для диагностики и аудита.
Устранение неполадок
Чтение журнала файрвола
Журнал файрвола доступен в Status > System Logs > Firewall. Каждая запись содержит:
- Действие (Pass или Block)
- Интерфейс, на котором сработало правило
- Правило, вызвавшее запись (ID правила или описание)
- Адреса и порты источника и назначения
- Протокол и флаги
Для эффективного анализа рекомендуется использовать фильтры по интерфейсу, действию и IP-адресу.
Просмотр загруженных правил через консоль
Для просмотра текущих правил, загруженных в ядро pf, используется команда pfctl:
# View all loaded rules with rule numbers
pfctl -sr
# View rules with verbose output (includes labels and counters)
pfctl -vsr
# View current state table
pfctl -ss
# View state table filtered by host
pfctl -ss | grep 192.168.1.100
# View state table statistics
pfctl -siКоманды выполняются в консоли файрвола: через SSH, последовательную консоль или Diagnostics > Command Prompt в веб-интерфейсе.
Таблица состояний
При подозрении, что трафик блокируется устаревшей записью в таблице состояний:
- Перейти в Diagnostics > States
- Найти записи для проблемного IP-адреса или порта
- Удалить устаревшие состояния кнопкой удаления
- При массовой очистке использовать Diagnostics > States > Reset States
Внимание:
Сброс всех состояний прервёт все активные соединения через файрвол, включая собственную сессию администратора. Выполнять эту операцию следует только в согласованное окно обслуживания.
Захват пакетов
Для детальной диагностики доступен встроенный инструмент захвата пакетов в Diagnostics > Packet Capture:
- Выбрать интерфейс, на котором требуется перехват
- Указать фильтр по протоколу, адресу и порту
- Запустить захват и воспроизвести проблемный трафик
- Остановить захват и скачать файл pcap для анализа в Wireshark
Дополнительно захват пакетов возможен из командной строки:
# Capture packets on LAN interface for specific host
tcpdump -i em1 host 192.168.1.100 -n -vv
# Capture only TCP SYN packets (new connections)
tcpdump -i em1 'tcp[tcpflags] & tcp-syn != 0' -n
# Save capture to file for later analysis
tcpdump -i em1 host 192.168.1.100 -w /tmp/capture.pcapТипичные проблемы и решения
| Симптом | Вероятная причина | Решение |
|---|---|---|
| Трафик блокируется при наличии разрешающего правила | Правило расположено ниже блокирующего правила | Переместить разрешающее правило выше блокирующего |
| Правило не совпадает с трафиком | Правило создано на неверном интерфейсе | Проверить, что правило создано на интерфейсе, на который входит трафик |
| Ответный трафик не проходит | Устаревшая запись в таблице состояний | Очистить состояния для проблемного соединения |
| Floating rule не работает | Не установлен флаг Quick | Включить Quick для немедленного применения действия |
| Anti-lockout rule не защищает | Доступ через интерфейс, отличный от LAN | Anti-lockout действует только на LAN; для других интерфейсов требуется явное правило доступа |
Связанные разделы
- Алиасы - группировка адресов и портов для упрощения управления правилами
- Расписания - применение правил по расписанию
- Лучшие практики - рекомендации по организации набора правил и политике безопасности
- NAT и проброс портов - трансляция адресов и проброс портов, взаимодействие NAT-правил с правилами файрвола
- Установка pfSense - установка и первоначальная настройка pfSense
- Интеграция pfSense с Wazuh - мониторинг событий файрвола в SIEM-системе Wazuh