pfBlockerNG в pfSense - блокировка IP и DNS
pfBlockerNG - пакет для pfSense, обеспечивающий комплексную фильтрацию сетевого трафика на основе репутационных списков IP-адресов и доменных имён. Пакет объединяет две ключевые функции: блокировку IP-адресов из списков угроз (включая GeoIP-фильтрацию по странам) и DNSBL (DNS Blackhole List) - перехват DNS-запросов к вредоносным, рекламным и нежелательным доменам. В отличие от IDS/IPS, который анализирует содержимое трафика, pfBlockerNG работает на уровне IP-адресов и DNS-запросов, обеспечивая первый уровень защиты с минимальным влиянием на производительность.
pfBlockerNG интегрируется с файрволом pfSense через создание автоматических алиасов и правил, которые блокируют или разрешают трафик на основе регулярно обновляемых списков из внешних источников.
Установка pfBlockerNG
Установка выполняется через менеджер пакетов:
- Перейти в System > Package Manager > Available Packages
- Найти pfBlockerNG и устанавливать именно этот пакет, если только вам не нужна возможность, доступная пока лишь в ветке разработки
- Нажать Install и подтвердить установку
- Дождаться завершения установки
После установки конфигурация доступна через 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.
| pfBlockerNG | pfBlockerNG-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.
Системные требования
| Параметр | Минимум | Рекомендуется |
|---|---|---|
| RAM | 1 ГБ | 2 ГБ и более |
| Диск | 5 ГБ свободного пространства | 10 ГБ |
| DNS Resolver | Unbound (обязательно для 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:
- Зарегистрировать аккаунт на maxmind.com
- В личном кабинете создать License Key
- Скопировать ключ в поле MaxMind License Key в настройках pfBlockerNG
- Выполнить обновление через Update для загрузки базы GeoIP
Блокировка IP-адресов
Блокировка IP-адресов обеспечивает фильтрацию трафика на основе репутационных списков, содержащих адреса известных источников угроз - ботнет-серверов, спам-рассылок, сканеров уязвимостей и других вредоносных ресурсов.
Настройка IP-блокировки
Конфигурация выполняется на вкладке IP (Firewall > pfBlockerNG > IP).
Группы IPv4 и IPv6
Для каждого списка создаётся группа с индивидуальными параметрами:
| Параметр | Описание |
|---|---|
| Alias Name | Имя алиаса (используется в правилах файрвола) |
| List Action | Действие при совпадении |
| Update Frequency | Частота обновления списка |
| Source | URL-адрес списка и его формат |
| 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 | Расширенный список Spamhaus | https://www.spamhaus.org/drop/edrop.txt |
| DShield | Топ-20 атакующих IP за последние сутки | https://feeds.dshield.org/block.txt |
| Feodo Tracker | IP-адреса C2-серверов банковских троянов | https://feodotracker.abuse.ch/downloads/ipblocklist.txt |
| Emerging Threats | IP-адреса активных угроз | https://rules.emergingthreats.net/fwrules/emerging-Block-IPs.txt |
| CINS Army | Распределённый список атакующих | https://cinsscore.com/list/ci-badguys.txt |
| Abuse.ch SSLBL | IP-адреса вредоносных SSL-серверов | https://sslbl.abuse.ch/blacklist/sslipblacklist.txt |
GeoIP-блокировка
GeoIP-фильтрация позволяет блокировать или разрешать трафик на основе географического расположения IP-адреса. Эта функция полезна для ограничения доступа из стран, откуда легитимный трафик не ожидается.
Настройка GeoIP выполняется на вкладке IP в разделе GeoIP:
- Убедиться, что ключ MaxMind введён в общих настройках
- Перейти на вкладку IP > GeoIP
- Выбрать континенты или страны для блокировки
- Установить действие (Deny Inbound, Deny Both и т.д.)
- Сохранить и выполнить обновление
Стратегии 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 Sources | URL-адреса списков доменов |
| 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 Whitelist | DNSBL > DNSBL Configuration | Глобальный белый список доменов |
| Custom Whitelist | DNSBL > DNSBL Groups | Белый список для конкретной группы |
| TLD Whitelist | DNSBL > DNSBL TLD | Исключение доменов верхнего уровня |
| Wildcard Whitelist | DNSBL > DNSBL Whitelist | Поддерживает маски *.domain.com |
Формат записей белого списка
# Точное совпадение домена
example.com
# Домен и все поддомены
.example.com
# Комментарий с описанием
example.com # Корпоративный порталРекомендации по белым спискам
При первоначальном развёртывании pfBlockerNG рекомендуется:
- Включить DNSBL с минимальным набором списков
- Мониторить журнал блокировок в течение нескольких дней
- Добавить в белый список домены, необходимые для работы бизнес-приложений
- Постепенно расширять количество активных списков
Типичные домены для белого списка:
- Домены корпоративных сервисов (Microsoft 365, Google Workspace)
- CDN-провайдеры (Akamai, CloudFront, Cloudflare)
- Сервисы обновлений операционных систем
- Платёжные системы и банковские сервисы
Пользовательские списки
pfBlockerNG поддерживает создание пользовательских списков IP-адресов и доменов для адаптации фильтрации под конкретные потребности.
Пользовательские IP-списки
На вкладке IP нажать Add и заполнить:
- Alias Name - имя списка
- List Action - действие (Deny/Permit)
- Source - выбрать Custom и ввести IP-адреса или подсети построчно
- Сохранить и выполнить Force Update
Пользовательские DNSBL-списки
На вкладке DNSBL нажать Add и заполнить:
- Group Name - имя группы
- DNSBL Source - выбрать Custom и ввести домены построчно
- List Action - Unbound
- Сохранить и выполнить 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-фильтрация не работает
- Убедиться, что DNSBL включена на вкладке DNSBL
- Проверить, что DNS Resolver (Unbound) является основным DNS-сервисом pfSense (Services > DNS Resolver)
- Убедиться, что клиенты используют pfSense как DNS-сервер
- Проверить, что Python установлен (требуется для DNSBL в pfBlockerNG-devel)
- Выполнить принудительное обновление: Firewall > pfBlockerNG > Update > Force
- Проверить журнал ошибок: Firewall > pfBlockerNG > Logs > Error
Ложные срабатывания DNSBL
- Определить заблокированный домен в журнале DNSBL
- Добавить домен в белый список через DNSBL Whitelist или через страницу блокировки
- При массовых ложных срабатываниях отключить проблемный список
- Использовать
nslookupилиdigдля проверки разрешения домена через pfSense
Высокое потребление памяти
- Проверить количество записей в активных списках: Firewall > pfBlockerNG > Logs > Summary
- Уменьшить количество активных IP-списков
- Увеличить размер таблицы файрвола: System > Advanced > Firewall & NAT > Firewall Maximum Table Entries
- При использовании GeoIP проверить, что загружены только необходимые базы
- Рассмотреть увеличение объёма RAM
Ошибки обновления списков
- Проверить доступность DNS: Diagnostics > DNS Lookup
- Проверить маршрутизацию: Diagnostics > Ping до адреса источника списка
- Убедиться, что исходящий HTTPS-трафик (порт 443) не блокируется
- Проверить, не изменился ли URL источника (источники периодически меняют адреса)
- Проверить формат списка - некоторые источники меняют формат без предупреждения
Пакет не работает после обновления pfSense
- Удалить и переустановить pfBlockerNG через System > Package Manager
- Повторно выполнить настройку через мастер
- Выполнить Force Update для загрузки всех списков
- Проверить совместимость версии пакета с текущей версией pfSense
Рекомендации по развёртыванию
Поэтапное внедрение
- Этап 1: Установить pfBlockerNG с минимальным набором IP-списков (Spamhaus DROP, DShield)
- Этап 2: Включить DNSBL с основными списками вредоносных доменов
- Этап 3: Добавить списки рекламы и трекеров
- Этап 4: Настроить GeoIP-фильтрацию
- Этап 5: Добавить пользовательские списки на основе анализа логов
Мониторинг после развёртывания
После каждого этапа внедрения необходимо:
- Мониторить журналы блокировок минимум 48 часов
- Проверять работоспособность бизнес-критичных приложений
- Формировать белый список на основе обращений пользователей
- Контролировать потребление ресурсов (RAM, CPU, размер таблиц)
Отключение и удаление pfBlockerNG
Чтобы отключить pfBlockerNG, не удаляя пакет, откройте Firewall > pfBlockerNG > General, снимите флажок Enable pfBlockerNG и нажмите Save. Пакет перестаёт применять списки, убирает свои правила файрвола и алиасы и прекращает отвечать на запросы DNSBL, при этом все списки, белые списки и настройки сохраняются до момента повторного включения.
При диагностике проблем со связностью начинайте именно с этого. Один шаг изолирует pfBlockerNG как причину, и он полностью обратим - это важно, потому что заблокированная запись в списке и сломанное правило файрвола с клиентской машины выглядят одинаково.
Полное удаление пакета:
- Включите Keep Settings на вкладке General, если планируете переустановку
- Перейдите в System > Package Manager > Installed Packages
- Удалите pfBlockerNG (или pfBlockerNG-devel)
- Убедитесь, что в 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 из-за неисправленных уязвимостей в апстриме, настоятельно рекомендует их удалить и предупреждает, что в будущих мажорных выпусках они работать перестанут.
Связанные разделы
- Управление пакетами - установка и обновление пакетов pfSense
- Suricata IDS/IPS - анализ содержимого трафика в дополнение к репутационной фильтрации pfBlockerNG
- DNS в pfSense - настройка DNS Resolver (Unbound), необходимого для работы DNSBL
- Правила файрвола - взаимодействие правил файрвола с алиасами pfBlockerNG
- Алиасы файрвола - использование алиасов pfBlockerNG в пользовательских правилах