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

> pfBlockerNG - пакет pfSense для блокировки по IP и DNS. Установка, DNSBL и GeoIP, выбор между pfBlockerNG и -devel, отключение и удаление пакета.

Source: https://opennix.org/docs/pfsense/packages/pfsense-pfblockerng/


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.

| | 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:

1. Зарегистрировать аккаунт на [maxmind.com](https://www.maxmind.com/en/geolite2/signup)
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** | Частота обновления списка |
| **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**:

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

```text
Клиент                 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` |

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

```text
# Точное совпадение домена
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 из-за неисправленных уязвимостей в апстриме, настоятельно рекомендует их удалить и предупреждает, что в будущих мажорных выпусках они работать перестанут.

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

- [Управление пакетами](/docs/pfsense/packages/pfsense-package-management/) - установка и обновление пакетов pfSense
- [Suricata IDS/IPS](/docs/pfsense/packages/pfsense-suricata/) - анализ содержимого трафика в дополнение к репутационной фильтрации pfBlockerNG
- [DNS в pfSense](/docs/pfsense/services/pfsense-dns/) - настройка DNS Resolver (Unbound), необходимого для работы DNSBL
- [Правила файрвола](/docs/pfsense/firewall/pfsense-firewall-rules/) - взаимодействие правил файрвола с алиасами pfBlockerNG
- [Алиасы файрвола](/docs/pfsense/firewall/pfsense-firewall-aliases/) - использование алиасов pfBlockerNG в пользовательских правилах

