Приветствую!
Для блокировки интернет-рекламы используются разные механизмы:
- Локальная блокировка с помощью записей в hosts файл;
- Локальная блокировка в браузере с помощью плагинов
- Блокировка в локальной сети с помощью прокси-сервера
- Блокировка с помощью стороннего DNS сервера
Мы реализуем блокировку с помощью нашего установленного DNS сервера Unbound с помощью создания локальной зоны.
Дано:
- Freebsd 12.0
- Unbound (настроенный и работающий)
- wget (нужен для скачивания новых списков, можно обойтись fetch)
Создаем скрипт для скачивания и обработки списка блокировок:
# vi /home/username/adsblock_unbound.sh
Следующего содержания:
#!/bin/sh # Скачиваем список wget https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-gambling/hosts # Форматируем список под нашу задачу cat hosts | grep '^0\.0\.0\.0' | awk '{print "local-zone: \""$2"\" redirect\nlocal-data: \""$2" A 0.0.0.0\""}' > ad.conf # Добавляем необходимую директиву в будущий конфигурационный файл echo "server:" > ads.conf # Заполняем конфигурационный файл значениями со 2-го шага cat ad.conf >> ads.conf # Перемещаем конфигурационный файл в рабочую директорию Unbound mv ads.conf /var/unbound/ads.conf # Прибираемся за собой rm hosts ad.conf # Перезапускаем Unbound service local_unbound restart
Редактируем конфигурационный файл Unbound:
# vi /etc/unbound/unbound.conf
Вписываем последней строкой инклюд нашего нового конфигурационного файла:
include: /var/unbound/ads.conf
Настраиваем запуск скрипта через cron по воскресеньям:
# crontab -e
#Update ADblocklist for Unbound 2 8 7 * * /home/vino/scripts/adsblock_unbound.sh
Дергаем наш скрипт:
/home/username/adsblock_unbound.sh
Видим, что все отработалось нормально, Unbound перезапустился без ошибок, новый конфигурационный файл создался:
# ll /var/unbound/ads.conf -rw-r--r-- 1 root wheel 3583298 25 февр. 15:43 /var/unbound/ads.conf
Проверим:
# ping ad.liveinternet.ru PING ad.liveinternet.ru (0.0.0.0): 56 data bytes
Ну как бы и все, не очень изящное решение, но имеет право на жизнь:)
Всем удачи!
Как всегда во фре всё просто и со вкусом!
Всё работает!
unbound легче настраивается, чем тот же bind.