![](https://habrastorage.org/getpro/habr/upload_files/336/216/9a8/3362169a8215b31f0254acb8618f1bf7.png)
pfBlockerNG - пакет pfSense для фильтрации IP трафика и DNSBL блокировки по готовым фидам с некоторыми дополнительными функциями и обширными возможностями по конфигурированию в целом.
И если в предыдущей статье было в деталях расписано устройство и каждая опция, для настройки в целом, то в данной статье будет приведён пример настройки для домашней сети.
Установка
![](https://habrastorage.org/getpro/habr/upload_files/6af/d95/3cf/6afd953cf6adb00f24f1141a228afad5.png)
Итак, у нас уже есть настроенный 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 из списков и, если таковые сессии найдутся, то будут ликвидированы.
![](https://habrastorage.org/getpro/habr/upload_files/81d/9a8/740/81d9a87407821c2f73f3de2855ef7cec.png)
Осталось только выбрать нужные фиды. По умолчанию уже будет группа фидов 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
![](https://habrastorage.org/getpro/habr/upload_files/563/bf8/d46/563bf8d4687139bb406ec868a88800f0.png)
Теперь все 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)
![](https://habrastorage.org/getpro/habr/upload_files/89f/c6f/f4c/89fc6ff4cb2d899f2fc4ac24e2dbd970.png)
Проверка
Осталось запустить процесс обновления на Firewall > pfBlockerNG > Update - Update -> Run и, дождавшись UPDATE PROCESS ENDED, идти проверять интернет. Если открытие какого-то сайта резко прерывается или вы получаете страницу с certificate error (ведь pfBlockerNG не может по-настоящему подменить сертификат сайта), пройдя по которой видите заглушку с сообщением о блокировке:
![](https://habrastorage.org/getpro/habr/upload_files/d2f/225/3e3/d2f2253e31d5f2a71138bd552f52b9c2.png)
То переходите на Firewall > pfBlockerNG > Reports > Unified и находите нужный домен скорее всего где-то вверху списка в столбце Destination:
![](https://habrastorage.org/getpro/habr/upload_files/874/da6/936/874da6936ad57c3f2b939161824be768.png)
Если это действительно нужный вам домен, то добавляете его в белый список с помощью иконки "+", если есть сомнения - нажимаете на иконку "i", в открывшемся окне вы сможете проверить репутацию данного домен через различные онлайн-сервисы:
![](https://habrastorage.org/getpro/habr/upload_files/b5f/9d6/099/b5f9d60990c00456d4364c3b8d335a1a.png)
Если же какой-то фид даёт слишком частые ложные срабатывания, то прежде чем отключать его целиком попробуйте для него опцию 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:
![](https://habrastorage.org/getpro/habr/upload_files/009/8c3/f41/0098c3f414f893fc8de56f6fc7ff8925.png)
![](https://habrastorage.org/getpro/habr/upload_files/f09/86a/e9c/f0986ae9ce105b602560d405462e2d19.png)
Ещё про pfBlockerNG:
Комментарии (9)
Anselm_nn
05.11.2021 05:32Такое бы для RouterOS, понятно, что такой функционал есть, но готовые скрипты и ссылки не будут лишними
werter_l
06.11.2021 11:36+1Спасибо за продолжение )
Как альтернатива - Adguard Home https://github.com/AdguardTeam/AdguardHome
Можно развернуть прямо на pfsense https://broadbandforum.co/t/205884/
Доп. списки блокировки:
oisd blocklist https://oisd.nl/how2use
StevenBlack https://github.com/StevenBlack/hosts
firebog https://firebog.net/
Energized Protection - block https://github.com/EnergizedProtection/block (использовать тип ADBLOCK FILTER)
Energized Protection - unblock https://github.com/EnergizedProtection/unblock
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) завернул по аналогии для большего удобства.
silinio Автор
06.11.2021 16:25Принудительный редирект DNS создается на LAN https://docs.netgate.com/pfsense/en/latest/recipes/dns-redirect.html
И DNS — это и TCP и UDP. Редиректить надо оба протокола.Опечатался, спасибо что заметили
Исправлено
werter_l
06.11.2021 13:23Еще хорошие мануалы по настройке pfblocker-а:
www.privacyaffairs.com/ip-filtering-pfsense
nguvu.org/pfsense/pfSense-pfblockerng-configuration-guide
На nguvu.org вообще много по настройке pfsense + оф. форум forum.netgate.com/topic/163435/proxmox-ceph-zfs-pfsense-%D0%B8-%D0%B2%D1%81%D0%B5-%D0%B2%D1%81%D0%B5-%D0%B2%D1%81%D0%B5-%D1%87%D0%B0%D1%81%D1%82%D1%8C-2
axelk
DNS over HTTPS еще есть, он остался незаблокированым. Наиболее популярные внешние сервера тоже в виде обновляемого списка было бы неплохо добавить в правила, если есть такой, подскажите.
silinio Автор
см. внимательнее:
"На 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.
silinio Автор
Ещё есть Public DNS фиды, но пользоваться ими надо с осторожностью, могут содержать false-positive адреса.