Правила файрвола pfSense - создание и управление ими

Файрвол pfSense построен на основе pf (packet filter) - системы фильтрации пакетов, заимствованной из OpenBSD. pf выполняет фильтрацию с сохранением состояния соединений (stateful inspection): после разрешения первого пакета соединения все последующие пакеты этого же соединения пропускаются автоматически на основании записи в таблице состояний (state table). Это означает, что правило файрвола необходимо создавать только для инициирующего направления трафика - ответный трафик обрабатывается без явного правила.

Материал ориентирован на администраторов, имеющих опыт работы с межсетевыми экранами Cisco ASA, FortiGate или MikroTik, и переходящих на pfSense. Для каждого ключевого отличия приведены пояснения, упрощающие миграцию.

Принципы обработки правил

Трёхуровневая иерархия правил

pfSense обрабатывает правила файрвола в строго определённом порядке. Правила делятся на три класса, которые оцениваются последовательно:

  1. Floating rules - обрабатываются первыми. Применяются к одному или нескольким интерфейсам одновременно и поддерживают фильтрацию в обоих направлениях.
  2. Правила групп интерфейсов - обрабатываются вторыми. Применяются ко всем интерфейсам, входящим в группу (включая вкладки VPN).
  3. Правила интерфейсов - обрабатываются последними. Применяются только к конкретному интерфейсу.

Порядок имеет практическое значение: если правило группы интерфейсов заблокировало трафик, правило на вкладке конкретного интерфейса не может его отменить - пакет уже обработан на предыдущем уровне.

Принцип first match wins

Внутри каждого уровня правила обрабатываются последовательно сверху вниз. Первое совпавшее правило определяет судьбу пакета - дальнейшая проверка не выполняется. Пакеты, не совпавшие ни с одним правилом, отбрасываются неявным правилом запрета (implicit deny).

Внимание:

Floating rules с отключённым флагом Quick работают по обратному принципу - last match wins. Это исключение рассмотрено в разделе Floating rules .

Привязка к интерфейсу и направление

Правила на вкладках интерфейсов фильтруют только входящий трафик на соответствующем интерфейсе. Трафик от хостов LAN обрабатывается правилами LAN, трафик из интернета - правилами WAN. Фильтрация исходящего трафика на уровне интерфейса не выполняется - для этого используются floating rules.

Сравнение с другими платформами

ХарактеристикаpfSense (pf)Cisco ASAFortiGateMikroTik RouterOS
Модель обработкиFirst match winsFirst match wins (ACL)Policy ID, first match winsChains (filter/nat/mangle)
Привязка правилPer-interface, inboundPer-interface, inboundZone-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 ACLGlobal policyForward 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 для правил, применяемых к нескольким интерфейсам.

Список правил файрвола pfSense

Рис. 1. Список правил файрвола на вкладке LAN

На странице списка правил отображаются:

  • Порядковый номер и действие - значок действия (Pass, Block, Reject) с индикацией цветом
  • Интерфейс - интерфейс, к которому привязано правило
  • Протокол - TCP, UDP, ICMP или другой протокол IP
  • Источник и назначение - адреса, сети или алиасы
  • Порт - порт назначения (для TCP/UDP/SCTP)
  • Gateway - шлюз для policy routing (при наличии)
  • Описание - текстовое описание правила

Правила можно перемещать перетаскиванием для изменения порядка, дублировать, отключать без удаления и группировать с помощью разделителей (separators).

Создание правила

Для создания нового правила необходимо перейти на вкладку нужного интерфейса в Firewall > Rules и нажать одну из кнопок добавления (добавить в начало или в конец списка).

Редактирование правила файрвола pfSense

Рис. 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.

Floating rules pfSense

Рис. 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). Все последующие пакеты того же соединения обрабатываются на основании этой записи без повторной проверки правил.

Таблица состояний pfSense

Рис. 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) ---
  Явное правило запрета с журналированием

Описания правил

Каждое правило должно содержать осмысленное описание. Рекомендуется включать:

  • Назначение правила (что разрешает/запрещает)
  • Номер тикета или запроса на изменение
  • Дату создания (для временных правил)

Стратегия порядка следования

Рекомендуемый порядок правил на вкладке интерфейса:

  1. Правила блокировки известных угроз (blacklists)
  2. Правила доступа к управлению файрволом
  3. Правила для внутренних сервисов (DNS, NTP, DHCP)
  4. Правила доступа к серверам
  5. Правила доступа пользователей к интернету
  6. Явное правило запрета с включённым журналированием (для аудита отклонённого трафика)

Явное правило запрета в конце списка не является обязательным - 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 в веб-интерфейсе.

Таблица состояний

При подозрении, что трафик блокируется устаревшей записью в таблице состояний:

  1. Перейти в Diagnostics > States
  2. Найти записи для проблемного IP-адреса или порта
  3. Удалить устаревшие состояния кнопкой удаления
  4. При массовой очистке использовать Diagnostics > States > Reset States

Внимание:

Сброс всех состояний прервёт все активные соединения через файрвол, включая собственную сессию администратора. Выполнять эту операцию следует только в согласованное окно обслуживания.

Захват пакетов

Для детальной диагностики доступен встроенный инструмент захвата пакетов в Diagnostics > Packet Capture:

  1. Выбрать интерфейс, на котором требуется перехват
  2. Указать фильтр по протоколу, адресу и порту
  3. Запустить захват и воспроизвести проблемный трафик
  4. Остановить захват и скачать файл 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 не защищаетДоступ через интерфейс, отличный от LANAnti-lockout действует только на LAN; для других интерфейсов требуется явное правило доступа

Связанные разделы

Last updated on