Pull to refresh
2119.45

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

Reading time4 min
Views13K

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:

Новости, обзоры продуктов и конкурсы от команды Timeweb.Cloud - в нашем Telegram-канале

Жамкнуть

Tags:
Hubs:
Total votes 4: ↑4 and ↓0+4
Comments13

Articles

Information

Website
timeweb.cloud
Registered
Founded
Employees
201–500 employees
Location
Россия
Representative
Timeweb Cloud