Найти в Дзене
Всё про pfSense

pfBlockerNG для домашней сети

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-D
Оглавление

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

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

Установка

-2

Итак, у нас уже есть настроенный 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 из списков и, если таковые сессии найдутся, то будут ликвидированы.

-3

Осталось только выбрать нужные фиды. По умолчанию уже будет группа фидов 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
-4

Теперь все 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)
-5

Проверка

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

-6

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

-7

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

-8

Если же какой-то фид даёт слишком частые ложные срабатывания, то прежде чем отключать его целиком попробуйте для него опцию 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:

-9
-10