Обеспечьте безопасность своей DNS-конфиденциальности на Ubuntu 20.04/18.04 с помощью DNS через TLS

В данном руководстве мы рассмотрим, как обеспечить защиту вашей DNS-конфиденциальности на Ubuntu 20.04/18.04 с помощью технологии DNS через TLS. Для этой цели мы воспользуемся утилитой под названием stubby. Прежде чем начать, давайте обсудим, почему использование DNS может представлять угрозу безопасности.

Уязвимость системы доменных имен (DNS)

DNS считается небезопасным, так как запросы по умолчанию не шифруются, что открывает возможности для вмешательства со стороны третьих лиц. Одним из популярных методов злоупотребления DNS является отравление кэша, которое применяется Великим китайским файрволом (GFW) для контроля доступа к Интернету в Китае. Этот файрвол анализирует каждый DNS-запрос, отправляемый на серверы за пределами страны. Из-за того, что протокол DNS работает на основе UDP и не требует установления соединения, GFW может изменять как IP-адреса клиентов, так и серверов. Когда GFW обнаруживает домен в своём списке блокировок, он подменяет ответ DNS. Например, если пользователь из Китая пытается зайти на google.com, файрвол предоставляет DNS-резолверу IP-адрес, находящийся в Китае, вместо фактического адреса Google, и этот поддельный адрес затем возвращается пользователю.

Что собой представляет DNS через TLS? Как это способствует защите вашей конфиденциальности?

DNS через TLS подразумевает, что запросы к DNS передаются по защищённому соединению, зашифрованному с использованием TLS, той же технологии, что и для шифрования HTTP-трафика. Это обеспечивает конфиденциальность ваших DNS-запросов от посторонних. В сочетании с HTTPS и зашифрованным SNI (индикацией имени сервера) ваша история браузера остаётся полностью защищённой от наблюдения со стороны интернет-провайдера.

Stubby — это открытый DNS-стаб резолвер, разработанный командой getdns. Он работает с библиотекой getdns и представляет собой компактный DNS-клиент, который получает запросы от приложений, таких как Firefox, и отправляет их на рекурсивные резолверы, например, 1.1.1.1 или 8.8.8.8. Уникальность Stubby заключается в поддержке DNS поверх TLS, что позволяет ему по умолчанию отправлять только зашифрованные запросы. Существуют и другие открытые резолверы, такие как cloudflared, который работает с DNS поверх HTTPS, но Stubby уже доступен в репозитории Ubuntu 20.04/18.04 и отличается простотой в использовании.

Инструкция по установке и настройке Stubby на Ubuntu 20.04 и 18.04.

Stubby доступен в репозиториях Ubuntu 20.04 и 18.04. Чтобы установить его, откройте терминал и выполните следующую команду.

sudo apt install stubby

После установки будут установлены Stubby и библиотека getdns. Stubby начинает функционировать в фоновом режиме. Для проверки его состояния воспользуйтесь следующей командой:

Читайте также:  Как выполнить установку MediaWiki на Ubuntu 16.04/17.04 с использованием Apache или Nginx

systemctl status stubby

Ubuntu Stubby — это инструмент, который обеспечивает безопасность и конфиденциальность DNS-запросов в системе Ubuntu.

Stubby отслеживает порты TCP и UDP 53 на локальном компьютере (127.0.0.1), что можно проверить с помощью следующей команды:

sudo netstat - lnptu | grep stubby

Stubby — это решение для работы с DNS через TLS.

Резольвер-заглушка, которую по умолчанию предоставляет systemd-resolved, работает на TCP и UDP порту 53 по адресу 127.0.0.53.

sudo netstat - lnptu | grep systemd-resolv

stub-решатель systemd-resolved

Обратите внимание: если dnsmasq принимает запросы на TCP порту 53 по адресу 127.0.0.1, то Stubby будет работать только с UDP портом 53 на этом же адресе.

Основной конфигурационный файл находится по пути /etc/stubby/stubby. yml. Обычно изменения в нем не требуются, если только вы не планируете использовать альтернативный или собственный рекурсивный резолвер. Позвольте мне рассказать о некоторых настройках, установленных по умолчанию. Вы можете открыть файл следующим образом:

sudo nano /etc/stubby/stubby. yml

Эта строка настраивает stubby для работы в качестве stub-резолвера, а не полноценного рекурсивного резолвера, что и объясняет его название.

resolution_type: GETDNS_RESOLUTION_STUB

Данная настройка позволяет stubby отправлять DNS-запросы в зашифрованном виде с использованием TLS. Запросы не будут отправляться в незащищённом формате.

dns_transport_list: - GETDNS_TRANSPORT_TLS

Данная строка предполагает наличие активного TLS-сертификата на удаленном рекурсивном резолвере.

tls_authentication: GETDNS_AUTHENTICATION_REQUIRED

В приведенных ниже строках задаются адреса, на которых демон stubby будет ожидать подключения. По умолчанию активированы как IPv4, так и IPv6.

listen_addresses: - 127.0.0.1 - 0::1

В следующей строке задается возможность для Stubby запрашивать рекурсивные резолверы в циклическом режиме. Если значение установлено на 0, Stubby будет поочередно использовать каждый вышестоящий сервер, пока один из них не станет недоступен, после чего переключится на следующий.

round_robin_upstreams: 1

В стандартной конфигурации stubby активированы три рекурсивных резолвера. Эти резолверы находятся под контролем разработчиков stubby и обеспечивают поддержку DNS через TLS. Полный перечень рекомендованных серверов доступен на ресурсе DNS Privacy.

dnsovertls. sinodun.com 145.100.185.15 dnsovertls1.sinodun.com 145.100.185.16 getdnsapi.net 185.49.141.37

В разделе «Дополнительные серверы» представлены другие DNS-серверы, которые изначально неактивны.

dns. quad9.net unicast. censurfridns. dk dnsovertls3.sinodun.com (поддерживающие TLS1.2 и TLS 1.3) dnsovertls2.sinodun.com dns. cmrg.net dns. larsdebruin.net .

Существуют и DNS-серверы, которые работают на порту 443. Если в вашей сети порт 853 недоступен, вы можете активировать их, убрав комментарии.

dnsovertls. sinodun.com dnsovertls1.sinodun.com dns. cmrg.net dns. neutopia. org

Теперь, чтобы закрыть текстовый редактор nano, нажмите сочетание клавиш Ctrl+X.

Переход на Stubby

Изменение DNS-сервера путем редактирования файла /etc/resolve.conf больше не является рекомендуемой практикой. Пожалуйста, выполните приведенные ниже шаги для настройки systemd-resolved, чтобы он перенаправлял DNS-запросы в stubby.

Рабочий экран GNOME

Кликните на иконку Network Manager, расположенную в верхнем правом углу экрана. После этого выберите параметры для проводного соединения. (Если у вас Wi-Fi, выберите настройки для Wi-Fi.)

шифрование DNS

Нажмите на иконку с изображением шестерёнки.

DNS через TLS от Cloudflare

Откройте вкладку IPv4 и в настройках DNS измените режим с Автоматически на ВЫКЛ, чтобы запретить системе Ubuntu получать адрес DNS-сервера от вашего маршрутизатора. Введите 127.0.0.1 в поле DNS. Затем нажмите на кнопку Применить, чтобы сохранить внесенные изменения.

Читайте также:  Как установить Google Chrome на Ubuntu с помощью PPA

DNS через TLS работает на порту 853.

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

sudo systemctl restart NetworkManager

После повторного подключения вы сможете заметить, что ваша система Ubuntu теперь использует 127.0.0.1 в качестве DNS-сервера на вкладке «Сведения».

stub-резолвер DNS через TLS

Стол рабочего пространства Unity

Щелкните по иконке сетевого диспетчера в правом верхнем углу экрана, после чего выберите «Изменить подключения».

изменение DNS в сетевом менеджере

Выберите название подключения и кликните на иконку с изображением шестеренки.

короткая версия systemd-resolved

Перейдите на вкладку настройки IPv4 и измените способ подключения с Автоматически (DHCP) на Автоматически (только DHCP-адреса). Это позволит вашей системе Ubuntu избежать получения DNS-адреса от роутера. Далее укажите DNS-сервер как 127.0.0.1, так как Stubby работает на этом адресе.

Ubuntu: DNS через TLS

Сохраните внесенные изменения, после чего перезапустите NetworkManager для их применения.

sudo systemctl restart NetworkManager

После повторного подключения к сети снова нажмите на значок Network Manager и выберите информацию о текущем подключении. Вы заметите, что ваша система Ubuntu теперь настроена на использование 127.0.0.1 в качестве DNS-сервера.

Ubuntu 18.04: DNS через TLS.

Смена DNS-сервера с помощью командной строки.

Метод, представленный ниже, поможет вам изменить DNS-сервер, если вы используете NetworkManager на своем настольном компьютере.

Запустите терминал и переместитесь в папку с профилями подключений Network Manager.

cd /etc/NetworkManager/system-connections/

После этого укажите имена подключений, которые доступны в вашей системе.

Изменение DNS-сервера в Network Manager через командную строку.

У меня на системе имеется несколько подключений, среди которых есть проводное соединение. Некоторые из них работают по беспроводной технологии, а одно — это VPN-соединение. Так как настольный компьютер подключен к маршрутизатору с помощью Ethernet-кабеля, я должен внести изменения в профиль проводного подключения, используя текстовый редактор командной строки nano.

sudo nano 'Проводное соединение 1'

Если ваш компьютер использует подключение Wi-Fi, вам необходимо внести изменения в профиль беспроводной сети. В этом документе найдите настройки [ipv4]. Обычно они должны выглядеть следующим образом:

[ipv4] dns-search= method=auto

Для того чтобы ваша система могла использовать Stubby, внесите следующие изменения в настройки конфигурации.

[ipv4] dns=127.0.0.1; dns-search= ignore-auto-dns=true method=auto

Для сохранения файла в текстовом редакторе Nano, используйте комбинацию Ctrl+O, затем нажмите Enter для подтверждения. Чтобы выйти, нажмите Ctrl+X. После этого перезапустите Network Manager, чтобы изменения начали действовать.

sudo systemctl restart NetworkManager

Теперь у вас есть возможность проверить актуальный DNS-сервер, введя следующую команду:

systemd-resolve --status

Link 2 (enp5s0) Текущие области: DNS LLMNR настройка: да MulticastDNS настройка: нет DNSSEC настройка: нет DNSSEC поддерживается: нет Серверы DNS: 127.0.0.1

Если в качестве DNS-сервера указан 127.0.0.1, это означает, что ваша система функционирует с использованием Stubby.

Игнорировать параметры DNS, которые предоставляет DHCP-сервер.

Если вы работаете с версиями сервера Ubuntu, у вас есть возможность настроить systemd таким образом, чтобы он не учитывал DNS-настройки, получаемые от DHCP-сервера. Это позволит избежать ситуации, когда ваша система может случайно начать использовать неверный DNS-сервер.

Читайте также:  Редактирование и управление образами в Linux для работы с ISO и Docker

Сначала убедитесь в состоянии вашего сетевого интерфейса.

networkctl status enp5s0

Это откроет для вас файл сети, связанный с данным интерфейсом. Внесите изменения в этот файл сети.

sudo nano /run/systemd/network/10-netplan-enp5s0.network

Перейдите в раздел [DHCP] и внесите следующую строку.

UseDNS=false

[DHCP] RouteMetric=100 UseMTU=true UseDNS=false

Сохраните файл и закройте его. После этого перезапустите службу systemd-netweorkd.service, чтобы изменения начали действовать.

sudo systemctl restart systemd-networkd

Используйте следующую команду для проверки DNS-серверов всех сетевых интерфейсов. Если всё настроено правильно, вы не получите отображение DNS-сервера.

Выйдите из учетной записи и снова войдите, чтобы изменения начали действовать. Затем запустите WireShark через меню приложений и выберите свой сетевой интерфейс. Например, мой Ethernet-интерфейс называется enp5s0. После этого укажите порт 853 в качестве фильтра для захвата, чтобы WireShark фиксировал только трафик на этом порту, который используется для DNS через TLS.

Ubuntu 18.04 с использованием Stubby.

Кликните на кнопку в верхнем левом углу, чтобы инициировать захват. Затем в терминале введите команду для запроса доменного имени с использованием утилиты dig. К примеру, я могу получить A запись своего доменного имени.

dig A linux16.ru

Теперь вы можете наблюдать захваченный DNS-трафик в WireShark. Как видно, мой DNS-запрос был отправлен на 185.49.141.37, 145.100.185.15 и 145.100.185.16, которые представляют собой три стандартных DNS-резольвера, указанных в конфигурационном файле stubby. Соединения были установлены по протоколу TCP и зашифрованы с помощью TLS, что является необходимым.

защищённый dns

Когда DNS-запросы передаются без шифрования, компьютер обращается к DNS-серверу через порт 53. Вы можете попробовать перехватить пакеты с фильтром по этому порту, но в WireShark не отобразится ни одного пакета, что свидетельствует о том, что stubby защищает ваши DNS-запросы с помощью шифрования.

Как интегрировать DNS CloudFlare в Stubby?

Я обнаружил, что между моим компьютером и тремя обычными DNS-серверами наблюдается значительная задержка (более 200 мс), в то время как DNS-серверы CloudFlare (1.1.1.1 и 1.0.0.1) предлагают крайне низкую задержку (менее 20 мс). Кроме того, CloudFlare поддерживает DNS через TLS. Для подключения DNS-сервера CloudFlare необходимо изменить файл конфигурации stubby.

sudo nano /etc/stubby/stubby. yml

Прокрутите вниз к разделу upstream_recursive_servers и вставьте следующий текст перед остальными DNS-серверами.

#Серверы CloudFlare - address_data: 1.1.1.1 tls_auth_name: "cloudflare-dns.com" - address_data: 1.0.0.1 tls_auth_name: "cloudflare-dns.com"

После этого отыщите следующую строку:

round_robin_upstreams: 1

Измените значение 1 на 0. Это приведет к тому, что stubby всегда будет обращаться к DNS-серверу CloudFlare. В случае недоступности CloudFlare, stubby переключится на другие DNS-серверы. Не забудьте сохранить файл и перезапустить stubby для применения изменений.

sudo systemctl restart stubby

Поддержка DNS с использованием HTTPS.

Stubby начнет поддерживать DNS через HTTPS в версии 0.3. В Ubuntu 20.10 установлена версия 0.2.6. Для проверки версии Stubby выполните команду.

stubby - V

Заключение

Надеюсь, данный гайд оказался для вас полезным в обеспечении безопасности вашей конфиденциальности DNS на Ubuntu 20.04/18.04 с использованием DNS через TLS. Если вам понравилась эта статья, не забудьте подписаться на нашу бесплатную рассылку, чтобы получать больше советов и рекомендаций. Берегите себя.