pfBlockerNG в pfSense - блокировка IP и DNS

pfBlockerNG - пакет для pfSense, обеспечивающий комплексную фильтрацию сетевого трафика на основе репутационных списков IP-адресов и доменных имён. Пакет объединяет две ключевые функции: блокировку IP-адресов из списков угроз (включая GeoIP-фильтрацию по странам) и DNSBL (DNS Blackhole List) - перехват DNS-запросов к вредоносным, рекламным и нежелательным доменам. В отличие от IDS/IPS, который анализирует содержимое трафика, pfBlockerNG работает на уровне IP-адресов и DNS-запросов, обеспечивая первый уровень защиты с минимальным влиянием на производительность.

pfBlockerNG интегрируется с файрволом pfSense через создание автоматических алиасов и правил, которые блокируют или разрешают трафик на основе регулярно обновляемых списков из внешних источников.

Установка pfBlockerNG

Установка выполняется через менеджер пакетов:

  1. Перейти в System > Package Manager > Available Packages
  2. Найти pfBlockerNG и устанавливать именно этот пакет, если только вам не нужна возможность, доступная пока лишь в ветке разработки
  3. Нажать Install и подтвердить установку
  4. Дождаться завершения установки

После установки конфигурация доступна через Firewall > pfBlockerNG.

Внимание:

Никогда не устанавливайте pfBlockerNG и pfBlockerNG-devel одновременно. Они управляют одними и теми же алиасами, правилами файрвола и конфигурацией Unbound, поэтому совместная работа приводит к конфликтующим наборам правил.

pfBlockerNG или pfBlockerNG-devel

pfBlockerNG - стабильный пакет, а pfBlockerNG-devel в списке пакетов самой Netgate описан как «версия pfBlockerNG для разработки». У них общая кодовая база и общий набор возможностей, просто в -devel изменения приходят раньше, а вместе с ними раньше приходят и регрессии. Устанавливать следует только один из них.

Раньше этот выбор значил больше, чем сейчас. Несколько лет базовый пакет заметно отставал, и -devel был практичным вариантом. Разрыв закрыт: релиз-ноты pfSense Plus 23.01 сообщают, что пакет pfBlockerNG обновлён до состояния pfBlockerNG-devel и после обновления безопасно удалить pfBlockerNG-devel с сохранением настроек и установить вместо него pfBlockerNG.

pfBlockerNGpfBlockerNG-devel
РольСтабильный выпускВетка разработки
Изменения приходятПосле обкатки в -develПервыми
Когда выбиратьПрод, вариант по умолчаниюНужна ещё не выпущенная функция или проверяется исправление
Netgate Plus 23.01+Рекомендуется, соответствует -develМожно заменить базовым пакетом

Отдельно про pfSense CE: в релиз-нотах CE утверждения из 23.01 нет, поэтому проверьте в System > Package Manager > Available Packages на своей установке, какие версии предлагает репозиторий, и выбирайте базовый пакет, если нет конкретной причины поступить иначе.

Чтобы перейти с -devel на базовый пакет, сначала включите Keep Settings на вкладке General, удалите pfBlockerNG-devel, затем установите pfBlockerNG. Настройки переживут замену, потому что оба пакета хранят конфигурацию в одном и том же разделе config.xml.

Системные требования

ПараметрМинимумРекомендуется
RAM1 ГБ2 ГБ и более
Диск5 ГБ свободного пространства10 ГБ
DNS ResolverUnbound (обязательно для DNSBL)Unbound в режиме Resolver

DNSBL требует использования Unbound DNS Resolver в качестве основного DNS-сервиса pfSense. При использовании DNS Forwarder (dnsmasq) функция DNSBL недоступна.

Первоначальная настройка

После установки необходимо выполнить базовую конфигурацию через мастер настройки.

Общие параметры

Настройка выполняется на вкладке General (Firewall > pfBlockerNG > General).

ПараметрОписаниеРекомендация
Enable pfBlockerNGАктивация пакетаВключить
Keep SettingsСохранение настроек при переустановкеВключить
CRON SettingsРасписание обновления списковEvery hour или Every 6 hours
Global LoggingВедение журнала событийВключить
MaxMind License KeyКлюч для загрузки базы GeoIPТребуется для GeoIP

Получение ключа MaxMind

Для использования GeoIP-блокировки необходимо получить бесплатный ключ лицензии MaxMind:

  1. Зарегистрировать аккаунт на maxmind.com
  2. В личном кабинете создать License Key
  3. Скопировать ключ в поле MaxMind License Key в настройках pfBlockerNG
  4. Выполнить обновление через Update для загрузки базы GeoIP

Блокировка IP-адресов

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

Настройка IP-блокировки

Конфигурация выполняется на вкладке IP (Firewall > pfBlockerNG > IP).

Группы IPv4 и IPv6

Для каждого списка создаётся группа с индивидуальными параметрами:

ПараметрОписание
Alias NameИмя алиаса (используется в правилах файрвола)
List ActionДействие при совпадении
Update FrequencyЧастота обновления списка
SourceURL-адрес списка и его формат
Header/LabelОписание списка

Действия при совпадении

ДействиеОписание
Deny BothБлокировка трафика в обоих направлениях
Deny InboundБлокировка только входящего трафика от адресов из списка
Deny OutboundБлокировка только исходящего трафика к адресам из списка
Permit InboundРазрешение входящего трафика (белый список)
Permit OutboundРазрешение исходящего трафика (белый список)
Alias OnlyСоздание алиаса без автоматического правила

Для большинства списков угроз рекомендуется действие Deny Both для полной блокировки взаимодействия с вредоносными адресами.

Популярные источники IP-списков

ИсточникОписаниеURL
Spamhaus DROPАдреса, захваченные для спама и атакhttps://www.spamhaus.org/drop/drop.txt
Spamhaus EDROPРасширенный список Spamhaushttps://www.spamhaus.org/drop/edrop.txt
DShieldТоп-20 атакующих IP за последние суткиhttps://feeds.dshield.org/block.txt
Feodo TrackerIP-адреса C2-серверов банковских трояновhttps://feodotracker.abuse.ch/downloads/ipblocklist.txt
Emerging ThreatsIP-адреса активных угрозhttps://rules.emergingthreats.net/fwrules/emerging-Block-IPs.txt
CINS ArmyРаспределённый список атакующихhttps://cinsscore.com/list/ci-badguys.txt
Abuse.ch SSLBLIP-адреса вредоносных SSL-серверовhttps://sslbl.abuse.ch/blacklist/sslipblacklist.txt

GeoIP-блокировка

GeoIP-фильтрация позволяет блокировать или разрешать трафик на основе географического расположения IP-адреса. Эта функция полезна для ограничения доступа из стран, откуда легитимный трафик не ожидается.

Настройка GeoIP выполняется на вкладке IP в разделе GeoIP:

  1. Убедиться, что ключ MaxMind введён в общих настройках
  2. Перейти на вкладку IP > GeoIP
  3. Выбрать континенты или страны для блокировки
  4. Установить действие (Deny Inbound, Deny Both и т.д.)
  5. Сохранить и выполнить обновление

Стратегии GeoIP-фильтрации

СтратегияОписаниеПрименение
Блокировка по странамЗапрет трафика из выбранных странСерверы с аудиторией из определённого региона
Разрешение по странамРазрешение трафика только из выбранных стран, остальные блокируютсяЛокальные сервисы без международного доступа
Только входящийБлокировка входящих соединений из стран, исходящий разрешёнСтандартная защита без ограничения исходящего доступа

Внимание:

GeoIP-базы не обеспечивают абсолютную точность определения местоположения. Некоторые IP-адреса (VPN, CDN, облачные провайдеры) могут быть привязаны к неверной стране. Тестируйте GeoIP-правила перед развёртыванием в рабочей среде.

DNSBL - блокировка DNS-запросов

DNSBL (DNS Blackhole List) - механизм блокировки доступа к нежелательным доменам через перехват DNS-запросов. Когда клиент запрашивает разрешение заблокированного домена, pfBlockerNG возвращает фиктивный IP-адрес (обычно 10.10.10.1) вместо реального адреса сервера. Это предотвращает подключение к вредоносным, рекламным и трекинговым ресурсам на уровне DNS.

Принцип работы DNSBL

Клиент                 Unbound DNS              pfBlockerNG
   |                      |                         |
   |-- DNS-запрос ------->|                         |
   |   malware.example.com|                         |
   |                      |-- Проверка DNSBL ------>|
   |                      |                         |
   |                      |<-- Домен в чёрном ------|
   |                      |   списке: 10.10.10.1    |
   |                      |                         |
   |<-- Ответ: 10.10.10.1|                         |
   |                      |                         |
   |-- Соединение к 10.10.10.1 (виртуальный IP pfBlockerNG)
   |-- Получает страницу блокировки или RST

Настройка DNSBL

Конфигурация выполняется на вкладке DNSBL (Firewall > pfBlockerNG > DNSBL).

Основные параметры

ПараметрОписаниеРекомендация
Enable DNSBLАктивация DNS-фильтрацииВключить
DNSBL Virtual IPВиртуальный IP для заблокированных доменов10.10.10.1 (по умолчанию)
DNSBL Listening PortПорт веб-сервера страницы блокировки8081 (по умолчанию)
DNSBL SSL Listening PortПорт HTTPS для страницы блокировки8443
DNSBL WhitelistДомены, исключённые из блокировкиПо необходимости
TLD ExclusionИсключение доменов верхнего уровняПо необходимости

DNSBL-группы

Для каждого списка блокировки создаётся группа с настройками:

ПараметрОписание
Group NameИмя группы списков
DNSBL SourcesURL-адреса списков доменов
List ActionДействие: Unbound (рекомендуется)
Update FrequencyЧастота обновления
Header/LabelОписание источника

Популярные DNSBL-источники

Блокировка рекламы и трекеров

ИсточникОписание
EasyListОсновной список блокировки рекламы (Adblock Plus)
EasyPrivacyБлокировка трекинговых скриптов и пикселей
AdGuard DNSФильтры рекламы от AdGuard
Peter Lowe’s Ad ListКомпактный список рекламных и трекинговых доменов
Steven Black’s HostsОбъединённый список вредоносных и рекламных доменов

Блокировка вредоносных доменов

ИсточникОписание
Abuse.ch URLhausДомены, распространяющие вредоносное ПО
Malware Domain ListДомены, связанные с вредоносным ПО
Phishing ArmyФишинговые домены
SANS ISC SuspiciousПодозрительные домены из SANS Internet Storm Center
Disconnect MalwareДомены вредоносного ПО от Disconnect

Блокировка телеметрии

ИсточникОписание
Windows TelemetryДомены телеметрии Microsoft Windows
Smart TV TrackingДомены отслеживания Smart TV

Страница блокировки DNSBL

При обращении к заблокированному домену пользователь видит страницу блокировки pfBlockerNG. Страница отображает:

  • Заблокированный домен
  • Группу DNSBL, содержащую домен
  • Время блокировки
  • Кнопку для добавления домена в белый список (при наличии прав)

Настройка внешнего вида страницы блокировки выполняется на вкладке DNSBL > DNSBL Customization.

Белые списки

Белые списки (whitelists) позволяют исключить определённые IP-адреса или домены из блокировки.

Белый список IP-адресов

Для исключения IP-адресов из блокировки используется группа с действием Permit Inbound или Permit Outbound на вкладке IP. Адреса из разрешающих групп имеют приоритет над блокирующими.

Белый список DNSBL

Белый список доменов настраивается в нескольких местах:

МетодРасположениеОписание
DNSBL WhitelistDNSBL > DNSBL ConfigurationГлобальный белый список доменов
Custom WhitelistDNSBL > DNSBL GroupsБелый список для конкретной группы
TLD WhitelistDNSBL > DNSBL TLDИсключение доменов верхнего уровня
Wildcard WhitelistDNSBL > DNSBL WhitelistПоддерживает маски *.domain.com

Формат записей белого списка

# Точное совпадение домена
example.com

# Домен и все поддомены
.example.com

# Комментарий с описанием
example.com # Корпоративный портал

Рекомендации по белым спискам

При первоначальном развёртывании pfBlockerNG рекомендуется:

  1. Включить DNSBL с минимальным набором списков
  2. Мониторить журнал блокировок в течение нескольких дней
  3. Добавить в белый список домены, необходимые для работы бизнес-приложений
  4. Постепенно расширять количество активных списков

Типичные домены для белого списка:

  • Домены корпоративных сервисов (Microsoft 365, Google Workspace)
  • CDN-провайдеры (Akamai, CloudFront, Cloudflare)
  • Сервисы обновлений операционных систем
  • Платёжные системы и банковские сервисы

Пользовательские списки

pfBlockerNG поддерживает создание пользовательских списков IP-адресов и доменов для адаптации фильтрации под конкретные потребности.

Пользовательские IP-списки

На вкладке IP нажать Add и заполнить:

  1. Alias Name - имя списка
  2. List Action - действие (Deny/Permit)
  3. Source - выбрать Custom и ввести IP-адреса или подсети построчно
  4. Сохранить и выполнить Force Update

Пользовательские DNSBL-списки

На вкладке DNSBL нажать Add и заполнить:

  1. Group Name - имя группы
  2. DNSBL Source - выбрать Custom и ввести домены построчно
  3. List Action - Unbound
  4. Сохранить и выполнить Force Update

Логирование и мониторинг

Журналы pfBlockerNG

Журналы доступны через Firewall > pfBlockerNG > Logs:

ЖурналСодержание
DNSBLЗаблокированные DNS-запросы с указанием клиента и домена
IP BlockЗаблокированные IP-адреса с указанием списка-источника
GeoIPЗаблокированные соединения по географическому признаку
ErrorОшибки обновления списков и работы пакета

Статистика

Вкладка Reports предоставляет статистику работы pfBlockerNG:

  • Количество заблокированных запросов по категориям
  • Топ заблокированных доменов и IP-адресов
  • Топ клиентов по количеству заблокированных запросов
  • Графики активности по времени

Виджет Dashboard

pfBlockerNG добавляет виджет на панель управления pfSense с краткой статистикой блокировок за текущий период.

Интеграция с файрволом

pfBlockerNG автоматически создаёт алиасы в файрволе pfSense для каждой активной группы IP-блокировки. Эти алиасы видны в Firewall > Aliases и могут использоваться в пользовательских правилах.

Автоматические правила

При выборе действия Deny Both/Inbound/Outbound pfBlockerNG автоматически создаёт правила файрвола на вкладке Floating Rules. Эти правила обрабатываются до пользовательских правил на интерфейсах.

Ручное использование алиасов

При выборе действия Alias Only создаётся только алиас без автоматического правила. Этот алиас можно использовать в собственных правилах на любом интерфейсе для более гранулярного контроля.

Диагностика проблем

DNS-фильтрация не работает

  1. Убедиться, что DNSBL включена на вкладке DNSBL
  2. Проверить, что DNS Resolver (Unbound) является основным DNS-сервисом pfSense (Services > DNS Resolver)
  3. Убедиться, что клиенты используют pfSense как DNS-сервер
  4. Проверить, что Python установлен (требуется для DNSBL в pfBlockerNG-devel)
  5. Выполнить принудительное обновление: Firewall > pfBlockerNG > Update > Force
  6. Проверить журнал ошибок: Firewall > pfBlockerNG > Logs > Error

Ложные срабатывания DNSBL

  1. Определить заблокированный домен в журнале DNSBL
  2. Добавить домен в белый список через DNSBL Whitelist или через страницу блокировки
  3. При массовых ложных срабатываниях отключить проблемный список
  4. Использовать nslookup или dig для проверки разрешения домена через pfSense

Высокое потребление памяти

  1. Проверить количество записей в активных списках: Firewall > pfBlockerNG > Logs > Summary
  2. Уменьшить количество активных IP-списков
  3. Увеличить размер таблицы файрвола: System > Advanced > Firewall & NAT > Firewall Maximum Table Entries
  4. При использовании GeoIP проверить, что загружены только необходимые базы
  5. Рассмотреть увеличение объёма RAM

Ошибки обновления списков

  1. Проверить доступность DNS: Diagnostics > DNS Lookup
  2. Проверить маршрутизацию: Diagnostics > Ping до адреса источника списка
  3. Убедиться, что исходящий HTTPS-трафик (порт 443) не блокируется
  4. Проверить, не изменился ли URL источника (источники периодически меняют адреса)
  5. Проверить формат списка - некоторые источники меняют формат без предупреждения

Пакет не работает после обновления pfSense

  1. Удалить и переустановить pfBlockerNG через System > Package Manager
  2. Повторно выполнить настройку через мастер
  3. Выполнить Force Update для загрузки всех списков
  4. Проверить совместимость версии пакета с текущей версией pfSense

Рекомендации по развёртыванию

Поэтапное внедрение

  1. Этап 1: Установить pfBlockerNG с минимальным набором IP-списков (Spamhaus DROP, DShield)
  2. Этап 2: Включить DNSBL с основными списками вредоносных доменов
  3. Этап 3: Добавить списки рекламы и трекеров
  4. Этап 4: Настроить GeoIP-фильтрацию
  5. Этап 5: Добавить пользовательские списки на основе анализа логов

Мониторинг после развёртывания

После каждого этапа внедрения необходимо:

  • Мониторить журналы блокировок минимум 48 часов
  • Проверять работоспособность бизнес-критичных приложений
  • Формировать белый список на основе обращений пользователей
  • Контролировать потребление ресурсов (RAM, CPU, размер таблиц)

Отключение и удаление pfBlockerNG

Чтобы отключить pfBlockerNG, не удаляя пакет, откройте Firewall > pfBlockerNG > General, снимите флажок Enable pfBlockerNG и нажмите Save. Пакет перестаёт применять списки, убирает свои правила файрвола и алиасы и прекращает отвечать на запросы DNSBL, при этом все списки, белые списки и настройки сохраняются до момента повторного включения.

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

Полное удаление пакета:

  1. Включите Keep Settings на вкладке General, если планируете переустановку
  2. Перейдите в System > Package Manager > Installed Packages
  3. Удалите pfBlockerNG (или pfBlockerNG-devel)
  4. Убедитесь, что в Firewall > Aliases не осталось алиасов, созданных pfBlockerNG, а в Services > DNS Resolver нет остаточных записей DNSBL в custom options

Если после удаления DNS работает странно, перезапустите службу DNS Resolver: DNSBL работает через Python-модуль Unbound, и резолверу нужен перезапуск, чтобы его выгрузить.

Альтернативы pfBlockerNG

Прямой замены pfBlockerNG внутри pfSense нет: ни один другой пакет официального репозитория не совмещает репутационные списки IP, фильтрацию по GeoIP и блокировку на уровне DNS. Реальные альтернативы либо покрывают часть этого объёма, либо выносят функцию за пределы файрвола.

Внутри pfSense:

  • Suricata или Snort - пакеты IDS/IPS, анализирующие содержимое трафика, а не репутацию IP и DNS. Они дополняют pfBlockerNG, а не заменяют его, и требуют заметно больше CPU и памяти.
  • Списки блокировки в DNS Resolver - Unbound принимает host overrides и custom options, поэтому небольшой список можно вести вручную вообще без пакетов. Такой подход плохо масштабируется дальше нескольких сотен записей и не даёт ни обновления списков, ни отчётности, ни GeoIP.

За пределами pfSense:

  • Pi-hole или AdGuard Home - выделенные DNS-синкхолы на отдельном хосте. По функции DNSBL они не уступают pfBlockerNG и дают лучшую отчётность, но не фильтруют по IP-адресам и странам и добавляют ещё одно устройство в путь отказа каждого DNS-запроса в сети.
  • Zenarmor - сторонний коммерческий пакет для pfSense с бесплатным тарифом, фильтрация на уровне приложений. В официальный репозиторий пакетов pfSense он не входит, то есть устанавливается и поддерживается вне канала пакетов Netgate.

Отдельно о том, что выбирать не стоит. Для контентной фильтрации в pfSense иногда предлагают Squid, SquidGuard и Lightsquid. Netgate объявила все три устаревшими и в pfSense Plus, и в pfSense CE из-за неисправленных уязвимостей в апстриме, настоятельно рекомендует их удалить и предупреждает, что в будущих мажорных выпусках они работать перестанут.

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

Проверено OpenNix LLC · Обновлено