Защитите свой DNS с помощью dnsmasq, dnscrypt-proxy и Cloudflare

DNS — это протокол открытого текста, и многие страны применяют цензуру в отношении своих граждан, просто захватывая стандартный порт DNS 53 и проверяя его, одновременно запрещая большую часть того, к чему осуществляется доступ.

Cloudflare предоставляет безопасную систему DNS через несколько протоколов. В этом руководстве мы берем нашу предыдущую статью о кэшировании DNS для вашего компьютера с Linux и итеративно улучшаем эту настройку, переключаясь с простого небезопасного DNS на безопасный DNS.

Это руководство полезно как для рабочих станций, так и для серверных систем на базе RHEL.

Интернет-цензура через DNS. Пример Индонезии

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

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

Давайте рассмотрим, как работает эта система, на примере записи s****ools.co.uk. Что это означает на практике?

  • Домен sools.co.uk вроде не заблокирован и не существует.
  • Домен scools.co.uk не заблокирован, но srools.co.uk заблокирован
  • И sccools.co.uk, scccools.co.uk и даже sccccools.co.uk, и даже scccccools.co.uk все заблокированы.

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

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

И это независимо от того, используют ли эти веб-сайты шифрование TLS или нет.

Обеспечиваем безопасность вашего DNS

Лучшим решением с точки зрения производительности и конфиденциальности является настройка шифрования DNS-запросов. В настоящее время существует несколько протоколов и сервисов, позволяющих это сделать.

В этой статье мы рассмотрим, как настроить существующую систему RHEL dnsmasq с помощью NetworkManager и использовать безопасную связь DNS.

Вот наша текущая настройка: <your browser> -> <dnsmasq> -> <Cloudflare DNS servers>.
В случае мест с жесткой цензурой, подобных приведенным выше, это фактически работает как <your browser> -> <dnsmasq> -> <ISP nameservers>, поскольку интернет-провайдеры захватывают порт DNS на сетевом уровне.

И вот как будет выглядеть наша новая установка:

<your browser> -> <dnsmasq> -> <dnscrypt-proxy> -> <Cloudflare secure DNS servers>.

Установить и настроитьdnscrypt-proxy

Это dnscrypt-proxy программное обеспечение, которое действует как стандартный сервер имен DNS, но способно взаимодействовать с вышестоящими DNS-серверами, которые поддерживают безопасные протоколы, такие как «DNS через HTTPS» или «DNS через TLS». Это то, что мы устанавливаем на свою машину, чтобы потом настроить на разрешение через него всех доменов.

Для его установки вы можете использовать репозиторий GetPageSpeed ​​по подписке или EPEL:

В CentOS/RHEL 7:

yum -y install dnscrypt-proxy2

На CentOS/RHEL 8+

dnf -y install dnscrypt-proxy

Затем отредактируйте файл конфигурации /etc/dnscrypt-proxy/dnscrypt-proxy.toml, внеся следующие изменения.

Заменять

listen_addresses = ['127.0.0.1:53']

с

listen_addresses = ['127.0.0.53:53']

Это верно. NetworkManager не имеет возможности указать порт 53, поэтому мы фактически прослушиваем dnscrypt-proxyотдельный адрес обратной связи 127.0.0.53.

Затем убедитесь, что эти настройки:

server_names = ['cloudflare', 'cloudflare-ipv6']

При этом мы используем безопасный DNS Cloudflare.

Теперь вы можете запустить службу, выполнив:

systemctl enable --now dnscrypt-proxy.service

Убедитесь, что ваша конфигурация действительна, выполнив запрос к DNS:

dnscrypt-proxy -resolve cloudflare-dns.com -config /etc/dnscrypt-proxy/dnscrypt-proxy.toml

Примерные результаты будут следующими:

Resolving [cloudflare-dns.com] using 127.0.0.53 port 53

Resolver      : 162.158.161.89

Canonical name: cloudflare-dns.com.

IPv4 addresses: 104.16.249.249, 104.16.248.249
IPv6 addresses: 2606:4700::6810:f9f9, 2606:4700::6810:f8f9

Name servers  : ns1.cloudflare-dns.com., ns2.cloudflare-dns.com., ns3.cloudflare-dns.com.
DNSSEC signed : yes
Mail servers  : no mail servers found

HTTPS alias   : -
HTTPS info    : [alpn]=[h3,h3-29,h2], [ipv4hint]=[104.16.248.249,104.16.249.249], [ipv6hint]=[2606:4700::6810:f8f9,2606:4700::6810:f9f9]

Host info     : -
TXT records   : xys2vzh7bp5r11pxl363wl8skcv8k2ss

Измените конфигурацию NetworkManager и dnsmasq.

Теперь к самому интересному. У нас уже есть безопасный DNS по адресу 127.0.0.53.
Теперь нам нужно, dnsmasq чтобы сервер, которым управляет NetworkManager, перенаправлял DNS-запросы на наш безопасный DNS-прокси.

Для этого мы можем использовать nmcli, например:

nmcli connection modify eth0 ipv4.dns 127.0.0.53
nmcli connection modify eth0 ipv4.ignore-auto-dns yes

Это указывает NetworkManager установить для восходящего DNS-сервера значение 127.0.0.53.
Мы также заставляем NetworkManager игнорировать DNS-серверы имен, полученные через DHCP, поскольку в этом случае мы хотим явно использовать dnscrypt-proxy.
Сервер dnsmasq, управляемый NetworkManager, будет соответствующим образом перенаправлять запросы в dnscrypt-proxy.

Кроме того, вы должны явно сообщить Networkmanager dnsmasq о вышестоящем DNS-сервере. Без этого все пошло бы не так, как ожидалось.

Откройте файл /etc/NetworkManager/dnsmasq.d/custom.conf и добавьте:

server=127.0.0.53

Наконец, вы можете применить все изменения, перезапустив NetworkManager:

service NetworkManager restart

Теперь NetworkManager перезапускает dnsmasq экземпляр, которым он управляет, и этот экземпляр будет кэшировать ваши DNS-запросы, безопасно маршрутизируя их через файлы dnscrypt-proxy.
Это гарантирует, что ваши DNS-запросы никогда не оставят ваш компьютер незащищенным. Отныне они всегда зашифрованы. Цензурированные веб-сайты работают, и ваша конфиденциальность улучшена.