Блокировка трекеров и рекламы с помощью Pi-hole

После эксперимента с роутером ASUS и возвращением на mesh wifi NetGear мне захотелось сделать с домашней сетью что-нибудь еще. Конечно, до виртуальных локальных сетей и серверных шкафов домашней сети мне пока далеко, да и не очень хочется этим заниматься пока что, а вот какие-то базовые вещи вполне можно сделать.У ASUS там были кое-какие встроенные настройки для безопасности сети, есть что-то и у NetGear, но за них хотят отдельную подписку. Поэтому очевидной была идея улучшения безопасности сети, и в частности — добавления механизма предотвращения трекинга в интернете устройств, находящихся в локальной сети дома. Один из таких инструментов — это построение “черной дыры” запросов DNS.

Многие, если не все, слышали про расширения для браузеров, которые отрезают рекламу и трекеры за пользователями на отдельно взятом устройстве — телефоне или компьютере. “Черные дыры” по сути, позволяют делать то же самое, но на уровне локальной сети с помощью фильтрации запросов DNS. Все, что нужно для этого сделать — добавить в сеть специальное программное обеспечение, перехватывающее DNS-запросы. Когда пользователь вбивает адрес сайта в строку браузера, на сервер DNS уходит запрос о переводе URL в IP-адрес сайта, к которому надо подключиться. Фильтры, о которых речь пойдет ниже, умеют блокировать часть DNS-запросов по известным спискам, таким образом предотвращая загрузку контента из сети. В списках в данном случае содержатся доменные адреса различных рекламных сетей, трекеров, фишинговых и других вредоносных сайтов. Я попробовал пару таких решений — Pi-hole и AdGuard Home — и делюсь тем, что я об этом узнал, поскольку в твиттере получил много вопросов по этому поводу.

За основу я взял микро-компьютер Rapsberry Pi. В принципе, можно использовать любой компьютер с Linux, но мне давно хотелось поиграться с Raspberry Pi, а тут подвернулась очевидно хорошая и полезная причина. Зачем это вообще? Домашний интернет-фильтр:
– Решение, по сути, бесплатное, за исключением стоимости самого компьютера Raspberry Pi
– Позволяет обеспечить фильтрацией все домашние устройства, даже что-то типа Smart TV, хотя их вообще лучше в интернет не выпускать
– Оптимизирует трафик путем блокировки большого количества запросов до того, как они загрузились к вам домой.

Но, например, для телефона, который носите с собой, локальный блокировщик все равно может понадобиться. И для этого есть решения: можно на Raspberry Pi настроить свой VPN, и, выходя из дома, подключаться в сеть через этот VPN, заодно фильтруя DNS запросы. Вообще Raspberry Pi, как домашняя сетевая платформа внезапно оказалась очень интересной темой, но в рамках этого поста мы поговорим только про “отрезание” трекинга и рекламы.

Безусловно, есть некая “серая территория” по поводу блокировки рекламы, и она располагается больше в этической, а не юридической, области. Блокировка рекламы законом не запрещена, хотя для многих сайтов, живущих с рекламы, это может оказаться болезненным ударом. К сожалению, в интернете реклама и слежка за пользователем чаще всего неразрывно связаны, и поэтому могут быть случайные жертвы. Подумайте о том, чтобы при установке и настройке такого фильтра добавлять в исключения любимые сайты, нуждающиеся в поддержке путем показа рекламы, или же просто дайте им денег путем пожертвований или оформления подписки.

Аппаратная часть
Для реализации этого плана в первую очередь вам понадобится Raspberry Pi — полноценный компьютер размером с ладонь, который работает под управлением варианта Linux. Можно купить только плату, а можно сразу купить набор у реселлеров, где в комплекте сразу будет то, что и так понадобится: блок питания, карта памяти с установщиком системы, кабель HDMI, корпус для платы. Я купил вот такой у CanaKit, в котором есть сразу все:


(Позже я купил другой корпус с улучшенным охлаждением, что позволило отказаться от кулера)

Кроме этого, для настройки понадобятся USB клавиатура и мышь, а также Ethernet-кабель для подключения к сети. Хотя у Raspberry Pi есть Wifi, подключать её как сетевой фильтр лучше через кабель. Сам процесс настройки Raspberry Pi достаточно простой и сопровождается графическим интерфейсом, поэтому там даже рассказывать особо нечего. Если вы купили набор, типа того, который выше, там на SD-карте уже сразу будет установщик, который проведет вас через нужные шаги установки системы. Можно скачать установщик системы, который отформатирует на Маке карту памяти и запишет туда загрузочный образ, где можно будет выбрать вариант операционной системы для Rasbperry

Для такого фонового процесса как Pi-hole даже графический интерфейс системы не нужен, поэтому можно установить версию Raspbian Lite OS без него. Но если вас пугает необходимость управлять системой в командной строке, то можно и обычную Raspbian ставить, так как Pi-hole не пожирает много ресурсов, и ничего ужасного в работе GUI не будет. Либо в командной строке, либо же через интерфейс Raspbian лучше сразу активировать возможность подключаться к устройству по ssh (в терминале можно сделать touch ssh и скопировать файл на карту памяти). Пройдя настройку Raspberry Pi, вы получите работающий компьютер с логином pi и паролем raspberry, который, разумеется, лучше сразу поменять на что-то другое (для этого можно использовать passwd в терминале).

Важный момент: для надежной работы Pi-hole нужно зафиксировать за Raspberry IP-адрес в локальной сети, чтобы роутер не поменял его в какой-то момент. Процедура для этого будет зависеть от вашего роутера, но важно, чтобы в результате манипуляций IP адрес был закреплен за Raspberry Pi. При этом, как я упоминал выше, лучше использовать подключение кабелем Ethernet, и фиксировать на роутере адрес именно для интерфейса Ethernet. То есть последовательность такая:
– Устанавливаете систему на Raspberry Pi
– Подключаете кабелем к роутеру в какой-нибудь из портов Ethernet
– Вычисляете IP адрес интерфейса Ethernet (либо в терминале, либо в настройках роутера)
– Закрепляете этот адрес за Raspberry Pi

Теперь можно ходить к Raspberry Pi удаленно через SSH (или, например, клиентом VNC, включив в настройках Raspbian доступ по VNC). В любом случае, при работе с Raspbian часто команды придется выполнять в командной строке, поэтому лучше к этому привыкать.

Установка фильтра Pi-hole
Следующим шагом вам надо определиться с тем, какой фильтр DNS-запросов устанавливать. Я вначале попробовал AdGuard Home, который многие в твиттере рекомендовали как более продвинутое решение. Принципиально AdGuard Home и Pi-hole не отличаются, но у AdGuard есть интересные возможности, для которых на Pi-hole еще надо делать дополнительные приседания.

Я бы с удовольствием продолжил пользоваться AdGuard Home, но у меня после его установки возникли проблемы. Не знаю, с чем именно это связано, но на некоторых устройствах дома DNS сошел с ума, и многие совершенно обычные ресурсы перестали загружаться. Я читал, что иногда роутер NetGear Orbi может перехватывать запросы DNS, и это может вызывать проблемы при работе фильтра в сети. У меня они возникли, и в итоге пришлось срочно все отключить, чтобы не ломался рабочий день (мы же в эпохе WFH). Вместо повторной настройки AdGuard Home я решил сделать второй попыткой установку Pi-hole, и в этот раз у меня все заработало без проблем. Возможно, я сделаю еще один подход к AdGuard Home, потому что мне не очень нравится интерфейс Pi-hole, но уже потом, когда появится дополнительное желание.

С установкой Pi-hole все почти так же просто, как и к настройкой Raspberry Pi — нужно закачать установщик из интернета, запустить его, и дальше следовать шагам визарда. Я выбрал путь ручной загрузки и установки отсюда. В терминале (разумеется, по ssh на Raspberry Pi) делаем:

wget -O basic-install.sh https://install.pi-hole.net
sudo bash basic-install.sh

А дальше достаточно просто пройти путь настройки Pi-hole через прекрасный визуальный визард:

Примерно 12-15 экранов визарда расскажут вам, что для Pi-hole нужен нужен фиксированный IP-адрес, позволят выбрать интерфейс (Ethernet или Wifi), напомнят о необходимости задонатить бесплатному проекту, а также выбрать DNS-сервер, к которому будет ходить Pi-hole, чтобы резолвить запросы, которые не блокируются. Я выбрал Cloudflare за их подход к конфиденциальности: они не торгуют данными пользователей, и не хранят логи дольше 24 часов.

Как я уже упоминал выше, Pi-hole использует списки доменов для того, чтобы блокировать определенные ресурсы. Если я правильно помню, установщик во время настройки предложит установить один или больше популярных списков, а в дальнейшем такие списки можно отдельно находить и добавлять в Pi-hole. Потом визард Pi-hole предложит установить веб-интерфейс, с помощью которого можно просматривать статистику и управлять приложением. Фильтром можно управлять и через командную строку, но лучше все-таки поставить веб-портал. На Raspberry Pi установщик, если не ошибаюсь, еще установит веб-сервер lighttpd, чтобы могла работать админская консоль. Еще один экран предложит сохранять логи запросов, что позволит как раз просматривать статистику разрешенных и заблокированных запросов, но ускорит износ SD-карты. (Для продления сроков её жизни есть методы, которые в этой статье затрагивать не будем). Последний экран покажет вам всю нужную информацию о настройке сервера, включая пароль к админской консоли (не забудьте его поменять потом на что-то свое!)


(я потерял свой скриншот, поэтому пришлось одолжить из интернета)

Собственно, после того, как пройдена первоначальная настройка Pi-hole, дальше почти что и делать нечего. Самое главное — нужно добавить Pi-hole как DNS в локальной сети. Для этого в настройках роутера нужно указать IP-адрес Pi-hole вместо тех DNS-серверов, которые там прописаны (вероятней всего — что-то, полученное автоматически от провайдера). Таким образом это позволит всем устройствам в домашней сети пользоваться преимуществами Pi-hole по фильтрации запросов. Альтернативно можно прописать IP-адрес Raspberry Pi в качестве DNS-сервера на тех устройствах, которым вы хотите обеспечить работу фильтра, но это нивелирует смысл разворачивания такого DNS-фильтра в локальной сети.

Второе, что понадобится сделать — добавить списки доменов, которые надо блокировать. Списки обычно собирает, обновляет и распространяет весьма активное сообщество, за что ему, безусловно, спасибо. Список — это txt файл, в котором перечислены домены, которые будут блокироваться вашей Pi-hole. Есть масса сайтов в сети, откуда такие списки распространяются, есть мегасписки, которые содержат другие списки, и тд. Но со списками надо осторожно, и не надо стараться добавить сразу все: если перестараться, то легко заблокировать что-то лишнее: некоторые сайты могут перестать работать, или будут работать неправильно. Можно добавлять списки по одному (там в списках, как правило, сразу десятки тысяч доменов), и смотреть, что из критического перестало работать (если перестало).

Парочка сайтов, откуда можно черпать списки для блокировок рекламы, трекинга и вредоносных доменов, или же списка исключений:

Блокировка: https://firebog.net
Исключения https://github.com/anudeepND/whitelist
(Исключения — это проверенные временем домены, которые не стоит блокировать, потому что может сломаться функциональность сайтов)

Сама же панель управления Pi-hole доступна по IP-адресу, который вы выделяли для Raspberry Pi, в моем случае это http://10.0.0.33/admin/index.php. (да, надо еще заморочиться на https)

Через консоль можно смотреть статистику, добавлять и удалять домены для блокировки и исключений, и, в общем-то, все. Дополнительно можно установить полезное мобильное приложение Pi-hole Remote (от стороннего разработчика), и смотреть статистику, и управлять самой pi-hole через него. Важный момент: для того, чтобы получить доступ к консоли в мобильном приложении, надо просканировать токен, который можно найти в настройках веб-консоли, пароль к админской части консоли для этой цели не годится.

Посмотреть, как работает Pi-hole, лучше всего на каком-нибудь сайте, где много рекламы и трекеров (типа Buzzfeed). Достаточно загрузить этот сайт с включенной и выключенной Pi-hole, и вы сразу почувствуете разницу (ну, может, не сразу, так как надо обычно сделать несколько перезагрузок сайтов, чтобы все кэши обновились). Надо также учитывать, что некоторые сайты понимают факт блокировки рекламы через Pi-hole, и все равно будут требовать отключить блокировщик рекламы. Тут как раз одно из неудобств PiHole и проявляется: просто так отключить её как расширение в браузере для конкретной страницы нельзя. Также не получится просто добавить сам домен сайта в исключения, потому что проблема как раз в загружающейся на этом сайте рекламе и трекерах. Я еще пока что изучаю, что по этому поводу делать. Есть смысл периодически заглядывать в статистику: так я узнал, что больше всего Pi-hole блокирует один из адресов CDN Apple. Что странно — я не замечал никаких побочных эффектов, кроме того, что в Apple News перестала загружаться реклама. Правда, я считаю это честной игрой: я плачу за Apple News+, а мне все равно показывают рекламу, да еще и в виде автоматически проигрывающегося видео, и это даже нельзя отключить. Кстати, о рекламе в видео: YouTube активно борется с блокировками Pi-hole и заблокировать рекламу на YouTube сложно, а работающие сегодня методы могут перестать работать уже завтра.

Еще один момент: на данном этапе все запросы на Pi-hole показываются “от роутера”, потому что он оказывается главным “клиентом”, который ходит в сеть от лица всех домашних устройств. Мне это не показалось большой проблемой, хотя если захочется вычислить какое-то активно “стучащее” в сеть устройство, то надо будет заморочиться. Этот вопрос решается, например, путем поднятия DHCP-сервера на Raspberry, тогда каждое устройство будет ходить на Raspberry Pi со своим IP-адресом.

Парочка вещей, которые я планирую сделать, когда меня в очередной раз настигнет желание улучшить домашнюю сеть:
– Во-первых, как я упоминал выше, нужно продлить жить SD-карте, так как её постоянно эксплуатирует запись логов. Один из способов — вынести логи в оперативную память, второй — перевести Raspberry Pi на работу с SSD диска. Думаю, какой-нибудь небольшой NVMe с коробочкой через какое-то время замутить.
– Во-вторых, хочу сделать DNS Over HTTPS (DoH). Вообще я хотел это сделать сразу, но поскольку наступил на грабли с работой AdGuard, то решил пока ограничиться Pi-hole, убедиться, что все работает, и дальше уже переходить к следующему этапу. Из того, что я почитал о процессе — никаких ракетных технологий, и в результате Raspberry Pi/Pi-hole начинают разговаривать с Cloudflare DNS по HTTPS протоколу, и, соответственно, домашний провайдер не может собирать и продавать информацию о ваших предпочтениях в сайтах на сторону. Не то, чтобы мне есть что скрывать
– И в третьих, хочу также установить Pi.Alert — еще один проект для Raspberry Pi, сервис, который сканирует сеть и предупреждает о подключении к сети неизвестных устройств, а также об отключении обычно подключенных устройств.
– Плюс VPN, о котором я тоже упоминал выше.

Наверняка у Raspberry Pi есть и еще какие-то полезные применения, буду продолжать исследовать этот вопрос. Пока исследую, может быть, найду время хотя бы упорядочить устройства и провода в “сетевом углу”, а не “как попало”, как это сейчас. Но, я надеюсь, я донес главное: настроить такую штуку дома — совершенно несложно, не нужно этого бояться.