Pi-hole - это сетевое программное обеспечение с открытым исходным кодом для блокировки рекламы и вредоносных доменов в вашей сети, предотвращая DNS-запросы для доменов, которые связаны с вредоносными программами, рекламой, отслеживанием.
Он похож на популярные браузерные расширения Adblock Plus и uBlock Origin, которые вы не контролируете и не знаете, что они могут блокировать, а что нет. Некоторые называют блокировщики рекламы “де-факто рекламными сетями” за то, что некоторым платят за занесение их сайтов в белый список, например, Google платит Adblock Plus за показ их рекламы.
Особенности Pi-hole:
- Прост в установке. Установка происходит в одну команду и сразу после нее Pi-hole готов к работе.
- Удаляет рекламу и трекеры в тех местах, где традиционные браузерные плагины блокировки рекламы не могут этого сделать.
- Pi-hole блокирует рекламу в видео на YouTube, смарт-телевизорах и мобильных приложениях. Блокировка рекламы происходит на сетевом уровне (до того, как она достигнет устройства).
- Может выступать в качестве второй линии защиты от вредоносных программ и вирусов, поскольку он может блокировать известные вредоносные домены и серверы используемые ботнетами.
- Блокировка рекламы распространяется на всю вашу сеть - включая смарт-телевизоры и другие интеллектуальные устройства
Установка Pi-Hole
Воспользуемся официальным установщиком Pi-Hole:curl -sSL https://install.pi-hole.net | bash
Начнется установка Pi-hole в процессе которой нам нужно будет настроить несколько параметров.
На этапе выбора интерфейса выбираем wg0 если вы планируете использовать свой DNS сервер вместе с Wireguard
Выбираем DNS-провайдера. Можете выбрать любого, например Quad9, далее мы настроим и будем использовать наш собственный сервер, так что этот параметр не столь важен.
Выбираем все доступные виды блокировок.
Позже через веб-интерфейс мы добавим дополнительно несколько списков для блокировки.
Для возможности администрировать сервер через веб-интерфейс, выберите On
и устанавливаем веб сервер
включаем или отключаем ведение логов
Далее выбираем, какой уровень детализации нам нужен в статистике Pi-hole. Уровень конфиденциальности может быть изменен в любое время через веб интерфейс. Подробнее читайте по ссылке https://docs.pi-hole.net/ftldns/privacylevels/
На этом установка завершена и нам будет показан пароль веб-панели администратора.
Его необходимо изменить командой:
pihole -a -p
Теперь нужно настроить unbound в качестве собственного рекурсивного DNS-сервера, который мы будем использовать вместо общедоступного DNS-сервера. Это поможет еще больше повысить конфиденциальность DNS-запросов.
Установка и настройка Unbound DNS
Вкратце, Unbound - это рекурсивный DNS, который фокусируется на безопасности и конфиденциальности.Установим Unbound DNS:
sudo apt install unbound unbound-host -y
Скачиваем список DNS-серверов:
curl -o /var/lib/unbound/root.hints https://www.internic.net/domain/named.cache
Открываем конфиг /etc/unbound/unbound.conf.d/pi-hole.conf и добавляем следующее:
server:
# if no logfile is specified, syslog is used
# logfile: "/var/log/unbound/unbound.log"
verbosity: 1
port: 5353
do-ip4: yes
do-udp: yes
do-tcp: yes
# may be set to yes if you have IPv6 connectivity
do-ip6: no
# use this only when you downloaded the list of primary root servers
root-hints: "/var/lib/unbound/root.hints"
# respond to DNS requests on all interfaces
interface: 0.0.0.0
max-udp-size: 3072
# IPs authorised to access the DNS Server
access-control: 0.0.0.0/0 refuse
access-control: 127.0.0.1 allow
access-control: 10.20.20.0/24 allow
# hide DNS Server info
hide-identity: yes
hide-version: yes
# limit DNS fraud and use DNSSEC
harden-glue: yes
harden-dnssec-stripped: yes
harden-referral-path: yes
# add an unwanted reply threshold to clean the cache and avoid, when possible, DNS poisoning
unwanted-reply-threshold: 10000000
# have the validator print validation failures to the log val-log-level: 1
# don't use Capitalisation randomisation as it known to cause DNSSEC issues sometimes
# see https://discourse.pi-hole.net/t/unbound-stubby-or-dnscrypt-proxy/9378 for further details
use-caps-for-id: no
# reduce EDNS reassembly buffer size
# suggested by the unbound man page to reduce fragmentation reassembly problems
edns-buffer-size: 1472
# TTL bounds for cache
cache-min-ttl: 3600
cache-max-ttl: 86400
# perform prefetching of close to expired message cache entries
# this only applies to domains that have been frequently queried
prefetch: yes
prefetch-key: yes
# one thread should be sufficient, can be increased on beefy machines
num-threads: 1
# ensure kernel buffer is large enough to not lose messages in traffic spikes
so-rcvbuf: 1m
# ensure privacy of local IP ranges
private-address: 192.168.0.0/16
private-address: 169.254.0.0/16
private-address: 172.16.0.0/12
private-address: 10.0.0.0/8
private-address: fd00::/8
private-address: fe80::/10
Перeзагружаем сервер.
reboot
После перезагрузки проверяем, работает ли приведенная выше конфигурация.
dig pi-hole.net @127.0.0.1 -p 5353
dig sigok.verteiltesysteme.net @127.0.0.1 -p 5353
Вывод должен содержать "status: NOERROR"
dig sigfail.verteiltesysteme.net @127.0.0.1 -p 5353
Вывод должен содержать "status: SERVFAIL":
Если эти проверки прошли успешно, то мы можем перейти в веб-интерфейс и продолжить настройку там.
Настройка Pi-Hole
Наконец, нам нужно настроить Pi-Hole для обращения к собственному DNS-серверу. Введя в браузере адрес http://<your_server_ip>/admin войдите используя пароль администратора, который вы сохранили ранее. Затем нажмите Настройки слева и DNS в верхней части страницы
Убираем все галочки в левой колонке Upstream DNS Servers, а в правой Custom 1 прописываем 127.0.0.1#5353. Убедитесь, что Pi-Hole настроен только на прослушивание запросов в интерфейсе Wireguard, в противном случае вы откроете свой сервер для атак усиления DNS и других проблем.
Чуть ниже ставим галочку Use DNSSEC и нажимаем Save .
Настройка списков блокировки
Переходим в раздел Group management --> Adlist и в строку Address: вносим свои списки блокировки, например следующие:https://raw.githubusercontent.com/PolishFiltersTeam/KADhosts/master/KADhosts.txt
https://raw.githubusercontent.com/FadeMind/hosts.extras/master/add.Spam/hosts
https://raw.githubusercontent.com/anudeepND/blacklist/master/adservers.txt
https://raw.githubusercontent.com/FadeMind/hosts.extras/master/UncheckyAds/hosts
https://raw.githubusercontent.com/FadeMind/hosts.extras/master/add.2o7Net/hosts
https://raw.githubusercontent.com/crazy-max/WindowsSpyBlocker/master/data/hosts/spy.txt
https://raw.githubusercontent.com/D...rsions Anti-Malware List/AntiMalwareHosts.txt
https://raw.githubusercontent.com/FadeMind/hosts.extras/master/add.Risk/hosts
https://zerodot1.gitlab.io/CoinBlockerLists/hosts_browser
https://www.github.developerdan.com/hosts/lists/ads-and-tracking-extended.txt
https://v.firebog.net/hosts/Easylist.txt
В сети можно найти множество других списков блокировки под разные задачи. Например, на сайте https://firebog.net/ или как вариант, можно посмотреть какие списки использует ваш плагин для блокировки рекламы в браузере.
Подключение к VPN
На этом этапе сервер полностью настроен. Осталось добавить в конфигурационный файл Wireguard на ПК или мобильном устройстве наш DNS. Для этого открываем файл /etc/wireguard/wg0-client.conf или редактируем конфиг в приложении на телефоне, меняем DNS на 10.20.20.1Теперь когда Wireguard включен, мы обращаемся к нашему персональному DNS серверу.