Блокировка рекламы на уровне DNS с помощью Pi-hole и OpenVPN в Ubuntu 16.04

Интернет-реклама раздражает – более того, это потенциальный источник вредоносных программ. Конечно, есть плагины, предназначенные для блокировки рекламы на устройствах или в приложениях, однако блокировка рекламы на уровне DNS – гораздо более надежное решение для ваших приложений и устройств одновременно.

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

Приложение Pi-hole особенно эффективно в связке с виртуальной частной сетью (VPN). VPN создают и поддерживают подключения через туннели, которые являются логическими сетевыми соединениями между клиентами и серверами. Кроме того, если ваша VPN поддерживает протокол Secure Socket Layer (SSL), вся транзакция зашифровывается, обеспечивая безопасный канал для передачи данных.

Данный мануал поможет установить и настроить OpenVPN и Pi-hole как сетевой фильтр для блокировки рекламы на основе DNS для всех устройств, подключенных к вашей сети.

Требования

  • Сервер Ubuntu 16.04,настроенный по этому мануалу.
  • 2 Гб памяти минимум.
  • Предварительно установленный сервер OpenVPN.

1: Сбор информации о сети

Прежде чем приступить к установке, вам необходимо собрать сетевую информацию, которую Pi-hole использует для связи с VPN. Поскольку процесс установки Pi-hole займет текущий сеанс терминала, эту информацию нужно собрать перед началом работы.

Используйте команду ip с подкомандами addr и show, чтобы определить IP-адрес tun0, сетевого интерфейса, который использует ваш VPN-туннель.

ip addr show tun0

Читайте также: Введение в сетевую терминологию, интерфейсы и протоколы

На выходе представлена подробная информация об интерфейсе.

1: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
link/none
inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
valid_lft forever preferred_lft forever

Рассмотрим вывод подробнее:

  • Первая строка сообщает имя интерфейса, tun0, а затем идет ряд флагов, которые описывают характеристики сетевого сокета.
  • Вторая строка указывает, что в настоящее время на этом интерфейсе отсутствуют устройства канального уровня.
  • Третья строка содержит IP-адрес для этого сетевого интерфейса.
  • В четвертой строке сообщается, что срок действия IPv6 интерфейса и предпочтительный срок его службы имеют значения forever. В этом случае время аренды IP-адреса никогда не изменится, поскольку адрес был специально назначен интерфейсу во время установки VPN.

Запишите IP-адрес после inet – это адрес вашего VPN-сервера. Он понадобится вам при установке Pi-hole.

Кроме адреса VPN-сервера, Pi-hole еще нуждается в шлюзе для трафика IPv4 (в точке доступа между различными сетями).

Используйте команду ip еще раз, на этот раз с подкомандами route и show, чтобы получить информацию о таблице маршрутизации вашего сервера. Передайте информацию таблицы маршрутизации команде grep, которая будет анализировать и искать вывод для строки default. default указывает шлюз по умолчанию, используемый сервером.

ip route show | grep default

Читайте также:

  • Перенаправление ввода-вывода в Linux
  • Использование Grep и регулярных выражений для поиска текстовых шаблонов в Linux

В следующем примере в выводе указывается, что IP-адрес шлюза по умолчанию — 198.51.100.1, что шлюз доступен на интерфейсе eth0 и что включена опция onlink шлюза, которая по умолчанию используется туннелированными соединениями.

default via 198.51.100.1 dev eth0 onlink

Запишите IP-адрес после via – это адрес шлюза по умолчанию.

2: Загрузка Pi-hole

Используйте Git для клонирования репозитория Pi-hole с GitHub в каталог ~/Pi-hole, который будет автоматически создан во время клонирования. Используйте параметр —depth 1 для создания клона с историей, сокращенной до последней пересмотренной версии.

Перейдите в домашний каталог и клонируйте репозиторий:

cd ~
git clone --depth 1 https://github.com/pi-hole/pi-hole.git Pi-hole

Вывод подтверждает местоположение клонирования, а затем предоставляет отчет в реальном времени, который включает количество объектов, которые нужно было скопировать Git, а также количество скопированных объектов.

Cloning into 'Pi-hole'...
remote: Counting objects: 65, done.
remote: Compressing objects: 100% (56/56), done.
remote: Total 65 (delta 5), reused 26 (delta 1), pack-reused 0
Unpacking objects: 100% (65/65), done.
Checking connectivity... done.

Перейдите в каталог Pi-hole/automated\ install/ и найдите там установочный сценарий Pi-hole.

cd Pi-hole/automated\ install/

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

nano basic-install.sh

Сохраните и закройте файл, чтобы продолжить.

Теперь у вас есть самые новые пакеты Pi-hole.

3: Установка Pi-hole

Установка и настройка Pi-hole происходит с помощью мастера в терминале. Запустите мастер установки:

bash basic-install.sh

В окне Installing packages мастер сообщит об установке пакетов и извлечении дополнительных файлов.

Затем вы получите сообщение от автоматизированного установщика Pi-hole, которое информирует о том, что приложение будет блокировать рекламу для всей сети.

Pi-hole automated installer
This installer will transform your device into a network-wide ad blocker!

Чтобы продолжить, нажмите Enter.

Затем мастер сообщит, что Pi-hole является свободным и бесплатным программным обеспечением и подскажет, как вы можете пожертвовать проекту Pi-hole.

Нажмите Enter, чтобы продолжить установку.

Затем сценарий установки сообщит вам, что для корректной работы службы необходим статический IP-адрес. Нажмите Enter, чтобы продолжить.

В следующем окне – Choose An Interface – мастер предложит выбрать интерфейс, который будет прослушивать Pi-hole. Чтобы использовать Pi-hole для мониторинга сетевого интерфейса VPN, используйте клавиши со стрелками на клавиатуре, чтобы выбрать tun0, и нажмите пробел. Затем нажмите TAB, чтобы перейти к параметрам в нижней части экрана. Выбрав <Ok>, нажмите Enter, чтобы сохранить настройки и продолжить.

Теперь мастер попросит вас указать Upstream DNS Provider. Это сервис, который Pi-hole будет использовать для разрешения доменов. Для простоты вы можете оставить здесь значение по умолчанию, Google. Нажмите TAB, чтобы перейти к параметрам в нижней части экрана, выберите <Ok> и нажмите Enter.

На следующем экране Pi-hole предложит вам выбрать, какие интернет-протоколы нужно фильтровать. Протоколы – например, IPv4 и IPv6 – определяют технический формат пакетов и схему адресации компьютеров для связи по сети. IPv4 является наиболее широко используемым интернет-протоколом для подключения устройств к сети.

Для эффективной работы Pi-hole требуется фильтрация как IPv4, так и IPv6, поэтому оставьте оба протокола выбранными и нажмите TAB, чтобы перейти к параметрам в нижней части экрана. Выберите <Ok> и нажмите клавишу Enter.

Pi-hole теперь спросит, хотите ли вы использовать текущие сетевые настройки в качестве статического IP-адреса. Чтобы приложение Pi-hole могло использовать VPN, нужно ввести эту информацию вручную на следующем экране. Потому с помощью клавиш со стрелками выберите <No> и нажмите Enter.

Теперь Pi-hole предложит ввести адрес IPv4. Укажите адрес своего VPN-сервера. Это IP-адрес после inet в выводе, который вы получили при первом запуске команды ip (в разделе 1).

Добавьте /24 в конец IP-адреса, чтобы указать маску подсети VPN. Выберите <Ok> и нажмите Enter.

Читайте также: Сетевые технологии: IP-адреса, подсети и бесклассовая адресация CIDR

На следующем экране нужно ввести шлюз IPv4 (маршрутизатор), который будет использовать Pi-hole для доступа в Интернет. Введите здесь IP-адрес шлюза по умолчанию. Это IP-адрес, который вернула вторая команда ip в разделе 1.

Выберите <Ok> и нажмите Enter.

На следующем экране убедитесь, что IP-адрес и шлюз указаны верно, прежде чем они будут применены к конфигурации Pi-hole. Если вам нужно внести изменения, выберите <No> и нажмите Enter. В противном случае выберите <Yes> и нажмите Enter, чтобы продолжить установку.

Кроме интерфейса командной строки, также для управления Pi-hole можно использовать веб-интерфейс администратора. Одним из основных преимуществ веб-интерфейса является его способность просматривать прямые DNS-запросы и блокировать статистику.

По умолчанию web admin interface имеет значение On. Это значение рекомендуется использовать и далее (оно необходимо для выполнения разделов 7 и 8).

В этом руководстве для управления Pi-hole используется веб-интерфейс, но если вы хотите проверить различные ветки проекта во время разработки или просто предпочитаете работать через сеанс терминала, вы можете узнать больше о команде Pi-hole -line в официальном FAQ.

Выберите <Ok> и нажмите Enter.

Чтобы использовать интерфейс веб-администратора для просмотра запросов DNS в реальном времени и блокировки статистики, вам необходимо настроить Pi-hole для регистрации запросов.

Это стандартная и рекомендуемая настройка, поэтому используйте TAB, чтобы выбрать <Ok>, а затем нажмите Enter.

На этом этапе Pi-hole загрузит и установит оставшиеся зависимости вместе с данными по умолчанию для списка блокировок и черного списка. Pi-hole применит все настройки сетевой конфигурации, введенные вами в течение установки.

На этом  этапе Pi-hole сообщит, что используется брандмауэр, а затем установщик предложит принять настройки брандмауэра, необходимые для правильной работы сервиса.

Выберите <Yes> и нажмите Enter.

После этого Pi-hole продолжит установку самостоятельно. По окончании заголовок диалогового окна изменится на Installation Complete!, а Pi-hole запустится автоматически и начнет фильтровать все DNS-запросы в сети. Нажмите Enter.

Теперь нужно протестировать установку.

4: Тестирование DNS-фильтрации

Когда OpenVPN и Pi-hole будут полностью настроены и работают, каждый запрос DNS, сделанный в вашей сети, будет перенаправлен в сервис Pi-hole, после чего он проверит, состоит ли домен в списке блокировки или черном списке. Если это так, фильтр удалит домен; если нет, фильтр пропустит запрос.

Несмотря на то, что Pi-hole еще не настроен для работы с OpenVPN, вы все равно можете проверить текущую установку и протестировать способность Pi-hole фильтровать рекламные сайты.

Используйте команду host, чтобы выполнить поиск DNS на google.com, указав шлюз по умолчанию, 10.8.0.1, в качестве сервера имен. Такой запрос пройдет через фильтры Pi-hole.

host google.com 10.8.0.1

Поскольку в выводе содержится внешний IP-адрес домена, вы можете понять, что google.com не состоит в черном списке.

...
google.com has address 216.58.194.174
...

Снова запустите команду host, но теперь передайте ей рекламный домен pagead2.googlesyndication.com.

host pagead2.googlesyndication.com 10.8.0.1

Вместо внешнего IP-адреса вы увидите стандартный шлюз. Это значит, что Pi-hole удалось определить рекламный сайт и сбросить запрос.

...
pagead2.googlesyndication.com has address 10.8.0.1
...

Если вы не видите адрес шлюза по умолчанию на выходе, убедитесь, что вы включили 10.8.0.1 как сервер имен, а затем просмотрите в терминале сообщения об ошибках установки или запускома Pi-hole.

Теперь вы знаете, что Pi-hole фильтрует запросы. Пришло время настроить OpenVPN для взаимодействия с Pi-hole.

5: Настройка OpenVPN

На данный момент OpenVPN направляет весь DNS-трафик на DNS-сервер. Чтобы использовать Pi-hole в качестве блокировщика рекламы, нужно настроить OpenVPN для отправки DNS-трафика в Pi-hole.

Откройте главный конфигурационный файл OpenVPN:

sudo nano /etc/openvpn/server.conf

Найдите строки:

...
;push "dhcp-option DNS 208.67.222.222"
;push "dhcp-option DNS 208.67.220.220"
...

Эти параметры позволяют настраивать DHCP (включая настройки DNS) для клиентов, подключенных к VPN.

Поскольку параметры dhcp-option, включенные в server.conf, по умолчанию закомментированы, оставьте их в файле (на случай, если вам нужно будет снова обратиться к ним в будущем).

Теперь добавьте новый параметр, с помощью которого OpenVPN направит всех DNS-клиентов на Pi-hole по шлюзу 10.8.0.1.

...
;push "dhcp-option DNS 208.67.222.222"
;push "dhcp-option DNS 208.67.220.220"
push "dhcp-option DNS 10.8.0.1"
...

Сохраните и закройте файл.

Чтобы применить изменения, перезапустите OpenVPN.

sudo systemctl restart openvpn@server

Проверьте состояние OpenVPN:

sudo systemctl status openvpn@server

Если все работает правильно, в выводе о состоянии OpenVPN будет строка active (running).

...
Active: active (running) since Mon 2017-11-27 22:08:43 UTC; 1 day 23h ago
...

Если сервис не смог запуститься, повторите предыдущие действия, чтобы устранить проблему.

Теперь OpenVPN перенаправляет DNS-запросы на Pi-hole. Осталось настроить брандмауэр, чтобы все заработало.

6: Настройка брандмауэра

Итак, Pi-hole и OpenVPN взаимодействуют. Теперь нужно открыть порт 53, чтобы разблокировать DNS-запросы, которые прошли через фильтры Pi-hole.

sudo ufw allow 53

Чтобы веб-браузер работал правильно, откройте в брандмауэре порты для трафика HTTP и HTTPS.

sudo ufw allow http
sudo ufw allow https

Затем нужно разблокировать трансмиссии udp и tcp в диапазоне IP-адресов 10.8.0.0/24 до 10.8.0.1 по порту 53. Это позволит DNS-запросам из IP-диапазона VPN пройти в Pi-hole для фильтрации.

sudo ufw allow proto udp from 10.8.0.0/24 to 10.8.0.1 port 53
sudo ufw allow proto tcp from 10.8.0.0/24 to 10.8.0.1 port 53

Также нужно разрешить веб-трафику в диапазоне 10.8.0.0/24 проходить через VPN-сервер по адресу 10.8.0.1 и порту 80.

sudo ufw allow proto tcp from 10.8.0.0/24 to 10.8.0.1 port 80

Перезапустите UFW.

sudo ufw reload

Если брандмауэр перезапустился успешно, вы увидите:

Firewall reloaded

7: Фильтрация списка блокировки

Сервис Pi-hole поставляется с набором списков блокировки по умолчанию, которые поддерживаются командой разработчиков проекта; однако эти списки не всегда исчерпывающи. В идеале вы должны адаптировать списки в соответствии с вашими потребностями и приложениями, которые вы используете. Вы можете управлять списками блокировки и многими другими параметрами с помощью веб-интерфейса администратора Pi-hole.

Чтобы управлять Pi-hole через веб-интерфейс, сначала необходимо подключиться к сети OpenVPN. После того, как вы подключитесь, перейдите в веб-браузере на домашнюю страницу веб-интерфейса по адресу http://10.8.0.1/admin.

Вы увидите страницу, на которой представлены виджеты, сообщающие количество запросов, заблокированных в течение 24 часов (Queries Blocked Last 24 Hours), общее количество запросов за 24 часа (Queries Last 24 Hours), заблокированные запросы в процентах (Queries Blocked Last 24 Hours) и количество доменов в списке блокировки (Domains on Blocklists). Вы также увидите диаграмму запросов за последние 24 часа (Queries over last 24 hours), индикатор состояния Pi-hole и параметры навигации дашборда, форму входа и пожертвования на PayPal.

Нажмите Login, чтобы получить доступ к полному интерфейсу. При появлении запроса введите пароль, который вы получили в конце установки Pi-hole в разделе 3.

После входа общий макет интерфейса останется прежним, но теперь он будет содержать больше опций меню в левой части экрана и дополнительные виджеты Query Types over Time и Forward Destinations over Time.

Перед добавлением новых списков блокировки в Pi-hole вы должны сначала обновить данные официального списка блокировки – возможно, последнее обновление включает некоторые или все источники данных, которые вы собираетесь добавить вручную.

В левой части экрана нажмите Tools, чтобы развернуть меню навигации, а затем выберите Update Lists.

На следующем экране нажмите синюю кнопку Update Lists в центре экрана, чтобы получить последнюю версию официального списка блокировки.

Поскольку сервис Pi-hole обновится, он покажет вам источники, из которых он извлекает данные списка, независимо от того, изменились ли они с момента последнего обновления и были ли импортированы данные в вашу установку. В конце вы увидите «Success!» в верхней части экрана.

После обновления официальных данных списка блокировки можно добавить свои собственные списки.

Нажмите Settings в меню навигации в левой части экрана, чтобы просмотреть основные параметры конфигурации Pi-hole.

На следующем экране щелкните символ + в поле Pi-Hole’s Block Lists, чтобы просмотреть текущие данные списка блокировки.

По умолчанию Pi-hole использует следующие списки для фильтрации:

Чтобы добавить новый список, введите URL-адрес источника в поле ввода в нижней части панели, затем нажмите кнопку Save and Update, чтобы сохранить список, и повторно запустите функцию Update Lists. Это автоматически загрузит данные, связанные с новым списком.

Больше списков блокировки можно найти здесь (списки поделены на категории: подозрительные сайты, списки рекламных сайтов и т.п.).

8: Фильтрация по белому и черному списку

Вместе со списками блокировки, которые Pi-hole использует для фильтрации DNS-запросов, вы также можете настраивать индивидуальные черные списки. Черный список автоматически отбрасывает исходящие и входящие запросы от определенных доменов. Это может быть особенно полезно для предприятий и других организаций, которым необходимо блокировать домены, содержащие нерелевантный контент или известные распространением вирусов и других вредоносных программ.

Чтобы занести в черный список домен, нажмите Blacklist в основном меню навигации в левой части экрана.

На следующем экране вы можете либо добавить точный домен, либо его wildcard.

При точной блокировке сервис будет блокировать только те домены, которые идеально соответствуют введенным значениям в поле Add a domain. Другими словами, если вы введете example.com в поле ввода, все входящие и исходящие запросы для example.com будут заблокированы, но запросы, сделанные с сайта www.example.com, не будут блокироваться.

Блокировка по wildcard позволяет заблокировать домен и все связанные с ним поддомены (то есть, весь трафик для example.com и www.example.com).

Проверьте функциональность черного списка, введя pi-hole.net в поле Add a domain, затем нажмите кнопку Add (exact). pi-hole.net теперь отображается в разделе Exact blocking экрана Blacklist.

Все запросы, связанные с pi-hole.net, теперь будут заблокированы фильтром черного списка Pi-hole. Попробуйте перейти в веб-браузере на https://pi-hole.net. Вы увидите сообщение об ошибке (оно отличается в зависимости от браузера) и больше не сможете открыть этот адрес.

Чтобы удалить pi-hole.net из Exact blocking, нажмите красную кнопку с белым значком корзины справа от домена.

Белый список содержит домены, чей трафик всегда проходит через фильтры Pi-hole без блокировки. Белый список полезен в том случае, если безопасный для вас сайт попал в список блокировки или если вы хотите разрешить трафик для некоторых доменов, которые могут содержать немного рекламы.

Чтоб добавить домен в белый список, нажмите Whitelist в главном меню навигации.

На следующем экране вы можете добавить домен в белый список и просмотреть домены, которые уже в нем находятся.

По умолчанию сервис Pi-hole добавляет в белый список домены, которые он использует для обновления списков блокировки. Это позволяет избежать конфликтов списков блокировки.

Кроме того, обратите внимание на примечание (Note): в нем сообщается, что вы не можете добавить в белый список поддомены того домена, который находится в списке wildcard-блокировки. Это означает, что если домен example.com уже находится в списке wildcard-блокировки, добавление в белый список поддомена www.example.com все равно не откроет доступ. Чтобы поместить в черный список example.com, а www.example.com – в белый список, вам нужно добавить example.com в список точной блокировки.

Чтобы добавить домен в белый список, введите его в поле Add a domain и нажмите кнопку Add. Pi-hole покажет сообщение «Adding to the Whitelist…», после чего на экране появится еще одно сообщение, «Success! The list will refresh». Сообщения исчезнут, а в списке появится новый домен.

Чтобы удалить домен из белого списка, нужно нажать красную кнопку с символом белой корзины рядом с этим доменом.

Чтобы протестировать черный и белый список вашей установки, посетите эту страницу.

Заключение

Теперь у вас есть простое, но эффективное средство фильтрации DNS-запросов в сети. Имейте в виду: вам может понадобиться немного откорректировать списки блокировки в соответствии с вашими потребностями.

Чтобы узнать, как запустить Pi-hole в контейнере Docker, перейдите на эту страницу.

Чтобы еще больше повысить безопасность сети, узнайте, как включить DNSCrypt в текущей установке Pi-hole.

За дополнительной информацией можно обратиться к форуму Pi-hole.

Tags: , , ,