Введение
Изобилие рекламных баннеров на сайтах с каждым днём увеличивается. Реклама мешает восприятию полезного контента, увеличивает время загрузки сайтов и повышает расход траффика. Кроме этого на интернет-ресурсах довольно большое количество плагин-контейнеров, скриптов и прочего “мусора”. Их наличие так же не прибавляют скорости и отзывчивости сайтам, не говоря уж о “слежке” за посетителями.
Способы блокировки рекламы
Способов избавиться от надоедливой рекламы множество. И с каждым годом список увеличивается. Их можно разделить на три группы:
- Плагины для браузеров. Плагины удаляют рекламный контент во время загрузки страницы. Самые популярные из них, это
uBlock Origin, AdBlock и Adblock Plus. Они используют разнообразные алгоритмы для фильтрации контента. Работают довольно хорошо, но иногда режут и невиновный контент. - Приложения для блокировки рекламы. Могут находиться и в составе некоторых антивирусах, и как отдельные программы. Иногда работают хуже, чем плагины. Но пользоваться ими тоже можно.
- Блокировка рекламы на сетевом шлюзе с помощью файла hosts или прокси-серверов. Не совсем эффективный вариант, но в составе в выше перечисленными способами даёт свои плюс. Например, позволяет хоть и частично, но избавиться от рекламы в приложениях. Так же данный способ не требует установки плагинов и приложений на устройствах.
Установка UNBOUND в Debian GNU/Linux
В моём случае, блокировка рекламы будет происходить на домашнем сервере. В качестве кеширующего DNS сервера будем использовать unbound.
daniiiil112@debian:~$ sudo apt update
daniiiil112@debian:~$ sudo apt install unbound
Для простоты обновления списка хостов и возможности автоматического обновления, необходимо создать простенький скрипт.
daniiiil112@debian:~$ sudo nano /etc/unbound/hosts_update.sh
#!/bin/sh
# указываем адрес нужного списка
URL="http://sbc.io/hosts/alternates/fakenews-gambling/hosts"
# удаляем старый список при обновлении
rm /etc/unbound/unbound.conf.d/hosts-alternates.conf
# добавляем "server:" в начало нового списка
echo "server:" > /etc/unbound/unbound.conf.d/hosts-alternates.conf
# получаем список хостов, форматируем и добавляем
curl $URL | grep '^0\.0\.0\.0' | awk '{print "local-zone: \""$2"\" redirect\nlocal-data: \""$2" A 0.0.0.0\""}' >> /etc/unbound/unbound.conf.d/hosts-alternates.conf
# перезапускаем unbound
service unbound restart
Необходимый адрес можно выбрать на странице GiHub-репозитория StevenBlack/hosts: https://github.com/StevenBlack/hosts
Не забываем дать право на запуску скрипту и запускаем его.
daniiiil112@debian:~$ sudo chmod +x /etc/unbound/hosts_update.sh
daniiiil112@debian:~$ sudo /etc/unbound/hosts_update.sh
Если нет ошибок в скрипте, появится файл /etc/unbound/unbound.conf.d/hosts-alternates.conf со списком заблокированных хостов и перезапустится unbound.
Для автоматического обновления необходимо добавить запись в cron
daniiiil112@debian:~$ sudo crontab -e
# обновление списка каждый день в полночь
0 0 * * * /etc/unbound/hosts_update.sh
Проверяем работу. Берем любой адрес из списка и стучимся в него.
daniiiil112@debian:~$ ping www.googletagmanager.com
PING www.googletagmanager.com (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.023 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.033 ms
64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.031 ms
В моём случае всё заработало сразу и без проблем.