Homelab

DNS-Блокировка сайтов с помощью pfBlocker-NG

Иногда возникает необходимость заблокировать некоторые сайты у себя в локальной сети. Можно для этого использовать разные решения, но сегодня мы рассмотрим pfBlocker-NG.
Перейду сразу к его настройке, часть с установкой пропущу, потому что и так понятно, что для начала его надо установить. Единственное, что я бы сказал, так это то, что надо устанавливать пакет «pfblockerng-devel», потому что обычный pfblocker достаточно тухлый в репозиториях pfSense.

Замечу, что у вас на клиентских устройствах ip адрес DNS сервера должен быть адрес вашего pfSense.

Часть 1. Блокировка сайтов.

Переходим в настройки pfBlockerNG, после чего заходим в раздел «DNSBL»

Меняем следующие параметры так:

DNSBL Mode: unbound python mode

DNSBL Blocking: enable

HSTS mode: enable

Спускаемся чуть ниже до DNSBL Confuguration и меняем параметр «Global Logging/Blocking mode» на «DNSBL WebServer/VIP

Применяем настройки, после чего переходим к разделу «DNSBL Groups»:

Нажимаем кнопку «Add», после чего в поле «Name / Description» вводим любое понравившееся нам имя, но без пробелов, спецсимволов и вообще на латинице.
В разделе «Settings» меняем параметр «Action» на «Unbound», а всё остальное не трогаем.

Листаем вниз до «DNSBL Custom List» и вводим домены, которые хотим заблокировать:

Сохраняем настройки, после чего переходим в «Update», выбираем «Reload» и «DNSBL»:

И после того как мы это сделали, наши сайты превратились в это:

Хотя раньше они были этим:

Ну и nslookup соответственно ведет туда, куда надо нам:

Если после Reload DNSBL некоторые сайты не блокируются, перейдите в «Services -> DNS Resolver», после чего перезапустите сервис.

После блокировки некоторые сайты могут выдавать ошибку SSL. Всё потому что страница блокировки pfBlockerNG висит на HTTPS. Так же если на сайты ранее переходили, а сейчас они заблокированы, то браузер тоже выдаст ошибку SSL, но перейти на страницу не даст, потому что думает, что страницу пытаются подменить мошенники. В обоих случаях сайт заблокирован, так что не вижу в этом проблемы.

Часть 2. Блокировка DNS.

Здесь всё просто:
Переходим в pfBlockerNG -> DNSBL -> DNSBL SafeSearch и в разделе «DNS over HTTPS/TLS/QUIC Blocking» ставим параметр «DoH/DoT/DoQ Blocking» на «Enable», а чуть ниже выбираем все доступные сервера и нажимаем «Save». На всякий случай перезагрузите списки DNSBL, как мы это делали чуть выше. После чего идём в «Firewall -> Rules -> [ваша локальная сеть]» и там создаем следующие правила:
Правило 1:

Action: Reject
Interface: [ваша локальная сеть]
Protocol: TCP/UDP
Source: any
Destination: any
Destination port range: DNS(53)

Правило 2:

Action: Reject
Interface: [ваша локальная сеть]
Protocol: TCP/UDP
Source: any
Destination: any
Destination port range: DNS Over TLS(853)

Правило 3:

Action: Pass
Interface: [ваша локальная сеть]
Protocol: TCP/UDP
Source: any
Destination: LAN address
Destination port range: DNS(53)

Все правила надо разместить в самом верху, а правило которое разрешает порт 53 на LAN адреса надо поставить выше запрещающих правил. После чего сохраняете настройки, применяете и при использовании сторонних DNS у вас должно быть это:

На этом всё, если статья вам понравилась или помогла, то поделитесь ею или поддержите меня материально. Можно и то и то 🙂