pfBlockerNG - пакет pfSense для фильтрации IP трафика и DNSBL блокировки по готовым фидам с некоторыми дополнительными функциями и обширными возможностями по конфигурированию в целом.

И если в предыдущей статье было в деталях расписано устройство и каждая опция, для настройки в целом, то в данной статье будет приведён пример настройки для домашней сети.

Установка

Итак, у нас уже есть настроенный pfSense с двумя (для простоты) интерфейсами - WAN и LAN. Заходим на System > Package Manager > Available Packages и выбираем pfBlockerNG-devel (не -devel ветка фактические не поддерживается, не используйте её!).

Переходим на Firewall > pfBlockerNG и в появившемся визарде жмём несколько раз next, а затем finish.

После откроется страница обновления/перезагрузки pfBlockerNG - тут он скачает дефолтные фиды и применит основные настройки. Дожидаемся окончания процесса (в конце будет строка "UPDATE PROCESS ENDED") и переходим на Firewall > pfBlockerNG > IP.

Настройка IP фильтрации

Ставим галочки: De-Duplication, CIDR Aggregation, Suppression, Force Global IP Logging и ASN Reporting в значение "Enabled - ASN entries cached for 1 week". Так мы оптимизируем размер IP таблиц, не позволим приватным адресам попасть в список блокировки (лучше вообще никогда не убирать галочку Suppression) и получим весьма информативные логи. MaxMind GeoIP в нашем случае не обязательна, но можете бесплатно зарегистрироваться на https://www.maxmind.com/en/geolite2/signup и ввести полученный код в MaxMind License Key, чтобы видеть код страны IP адреса в логах/репортах. Оставляем Inbound/Outbound Firewall Rules как есть (WAN+Block и LAN+Reject соответственно) и ставим галочку Kill States - при обновлении IP фидов таблица соединений будет просканирована на наличие IP из списков и, если таковые сессии найдутся, то будут ликвидированы.

Осталось только выбрать нужные фиды. По умолчанию уже будет группа фидов PRI1 на странице Firewall > pfBlockerNG > IP > IPv4. Туда входят основные фиды из группы PRI1 - наиболее качественные, с низкой вероятность false-posive срабатываний. Но после некоторого времени смотрите логи (Firewall > pfBlockerNG > Alerts) - некоторые из этих фидов могут сильно повлиять на работу торрента, точнее могут заблокировать соединения с торрент-трекерами и сидами. Если вы уверены, что соединения с таковыми IP адресами безопасно для вашего торрент-клиента, то можете отключить соответствующие фиды переключив State в состояние OFF.

Для IPv6 по умолчанию не будет группы фидов, поэтому следует добавить нужные на Firewall > pfBlockerNG > Feeds.

DNSBL фильтрация

Теперь займёмся блокировкой неугодных доменов - рекламы, трекеров, малвари и фишинга. Идём на Firewall > pfBlockerNG > DNSBL. Делаем следующие настройки - Enable DNSBL, DNSBL Mode = Unbound python mode, DNS Reply Logging, DNSBL Blocking, HSTS mode, CNAME Validation. Если что-то не написано - оставляем как есть. Если в сети используется IPv6, то включаем IPv6 DNSBL. Идём дальше - Web Server Interface = Localhost, Resolver cache (ускорит резолвинг после обновления/перезапуска pfBlockerNG). Ставим галочку у TOP1M и выбираем следующие домены: AERO, COM, NET, INFO, IO, ORG, RU, XN-P1AI (это .РФ). Значение DNSBL IPs List Action ставим в "Alias Deny".

Так как DNSBL врят ли будет нам полезен, если браузеры пойдут в обход нашего DNS через DNS-over-HTTPS или DNS-over-TLS, то нам надо заблокировать это дело. На Firewall > pfBlockerNG > DNSBL > DNSBL SafeSearch ставим DoH/DoT Blocking в Enable и выбираем через Ctrl+A все домены списка DoH/DoT Blocking List.

По умолчанию выбран только StevenBlack_ADs фид, содержащий не такое уж большое количество рекламных доменов.

Поэтому вот моя подборка:

  • Реклама - Adaway, D_Me_ADs, EasyList, EasyList_Russian, Yoyo, Ad_Wars, Anudeep_BL, Fademinds, hostsVN, LanikSJ, PL_Adservers

  • Трекинг - D_Me_Tracking, EasyPrivacy, Fademind_2o7, Frogeye_First, Lightswitch05, Max_MS, Perflyst_Android, Perflyst_FireTV, Perflyst_TV

  • Фишинг - OpenPhish, PhishingArmy

  • Скрытые криптомайнеры - CoinBlocker_All, CoinBlocker_Opt, NoCoin, Prigent_Crypto

  • Малварь - D_Me_Malw, SWC, URLhaus_Mal, Krisk_C19

Но что, если будет обращение к внешнему DNS серверу? Сделаем переадресацию портов - так, чтобы запросы на 53/UDP порт всегда редиректились на pfSense. А запросы на DNS-over-TLS порт (853/TCP) заблокируем.

Идём на Firewall > NAT > Port Forward - Add. И создаём следующее правило:

  • Interface - LAN

  • Address Family - IPv4

  • Protocol - TCP/UDP

  • Destination - Invert match + LAN address

  • Destination port range - DNS

  • Redirect target IP - LAN address

  • Redirect target port - DNS

Теперь все DNS запросы на внешние DNS сервера будут заворачивать на резолвер pfSense. Если в локальной сети используется IPv6, то создаём такое же правило с Address Family = IPv6.

Заблокируем DNS-over-TLS. Идём на Firewall > Rules > LAN - Add rule to top (стрелка вверх) и создаём следующее правило:

  • Action - Reject

  • Interface - LAN

  • Address Family - IPv4+IPv6

  • Protocol - TCP

  • Source - any

  • Destination - any

  • Destination Port Range - DNS over TLS (853)

Проверка

Осталось запустить процесс обновления на Firewall > pfBlockerNG > Update - Update -> Run и, дождавшись UPDATE PROCESS ENDED, идти проверять интернет. Если открытие какого-то сайта резко прерывается или вы получаете страницу с certificate error (ведь pfBlockerNG не может по-настоящему подменить сертификат сайта), пройдя по которой видите заглушку с сообщением о блокировке:

То переходите на Firewall > pfBlockerNG > Reports > Unified и находите нужный домен скорее всего где-то вверху списка в столбце Destination:

Если это действительно нужный вам домен, то добавляете его в белый список с помощью иконки "+", если есть сомнения - нажимаете на иконку "i", в открывшемся окне вы сможете проверить репутацию данного домен через различные онлайн-сервисы:

Если же какой-то фид даёт слишком частые ложные срабатывания, то прежде чем отключать его целиком попробуйте для него опцию TOP1M Whitelist - она уберёт из него популярные сайты.

Аналогично и с заблокированными IP адресами.

Важное про IP фиды - если те стали слишком уж большие, вы можете увидеть в логах pfSense "Cannot allocate memory" ошибку, вроде:

There were error(s) loading the rules: /tmp/rules.debug:31: cannot define table pfB_Europe_v4: 
Cannot allocate memory - The line in question reads [31]: table <pfB_Europe_v4> persist file “/var/db/aliastables/pfB_Europe_v4.txt”

Значит под таблицы файрвола (т.е. алиасы) выделено недостаточно памяти. Лечится увеличением Firewall Maximum Table Entries (лучше сразу раза в 2-3) на странице System > Advanced > Firewall & NAT.

Ну а посмотреть на красивые репорты с диаграммами можно на Firewall > pfBlockerNG > Reports > IP Blocks Stats / DNSBL Blocks Stats:

Ещё про pfBlockerNG:

Комментарии (9)


  1. axelk
    03.11.2021 17:04

    DNS over HTTPS еще есть, он остался незаблокированым. Наиболее популярные внешние сервера тоже в виде обновляемого списка было бы неплохо добавить в правила, если есть такой, подскажите.


    1. silinio Автор
      03.11.2021 17:39

      см. внимательнее:
      "На Firewall > pfBlockerNG > DNSBL > DNSBL SafeSearch ставим DoH/DoT Blocking в Enable и выбираем через Ctrl+A все домены списка DoH/DoT Blocking List."


      Дополнительно можно добавить DNSBL DoH фиды TheGreatWall_DoH, Bambenek_DoH, Oneoffdallas_DoH и IP фиды TheGreatWall_DoH_IP, TheGreatWall_DoH_IP6.


      Имейте ввиду, что IP DoH содержат IP адреса ряда публичных DNS серверов Google, Quad9 и Cloudflare.


    1. silinio Автор
      03.11.2021 17:40

      Ещё есть Public DNS фиды, но пользоваться ими надо с осторожностью, могут содержать false-positive адреса.


  1. Anselm_nn
    05.11.2021 05:32

    Такое бы для RouterOS, понятно, что такой функционал есть, но готовые скрипты и ссылки не будут лишними


    1. silinio Автор
      06.11.2021 11:28

  1. werter_l
    06.11.2021 11:36
    +1

    Спасибо за продолжение )

    Как альтернатива - Adguard Home https://github.com/AdguardTeam/AdguardHome

    Можно развернуть прямо на pfsense https://broadbandforum.co/t/205884/

    Доп. списки блокировки:


  1. werter_l
    06.11.2021 11:58

    Идём на Firewall > NAT > Port Forward - Add. И создаём следующее правило

    Хорошее дело делаете, популяризируя pfsense, но в оф. доки заглядывайте перед публикацией.

    Народ-то дословно будет выполнять то, что вы написали (

    Принудительный редирект DNS создается на LAN https://docs.netgate.com/pfsense/en/latest/recipes/dns-redirect.html

    И DNS - это и TCP и UDP. Редиректить надо оба протокола.

    Поправьте статью.

    Ps. Кстати, а умеет ли pfblockerNG сам в DoH? Чтобы провайдер не знал о том, к каким ресурсам идет обращение? Adguard и pi-hole могут.

    Pps. У себя в домене и ntp (123 / udp) завернул по аналогии для большего удобства.


    1. silinio Автор
      06.11.2021 16:25

      Принудительный редирект DNS создается на LAN https://docs.netgate.com/pfsense/en/latest/recipes/dns-redirect.html

      И DNS — это и TCP и UDP. Редиректить надо оба протокола.

      Опечатался, спасибо что заметили


      Исправлено