Использование DNSCrypt для защиты DNS-трафика

()

Созданный ещё в восьмидесятые протокол DNS является одним из столпов современного интернета. К сожалению несмотря на фундаментальную значимость протокол имеет ряд недостатков: трафик между клиентом и сервером никак не шифруется и не подписывается, что позволяет организовывать MITM-атаки: подменять ответы от DNS-серверов и направлять трафик клиентов на поддельные сайты.

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

Штатной поддержки DNSCrypt пока нет ни в одной операционной системе, потому придётся идти на небольшую хитрость. Этой хитростью является сервис DNSCrypt-Proxy: он выступает в роли локального DNS-резолвера, проксируя все запросы с использованием DNSCrypt ко внешнему резолверу.

В Ubuntu 16.04 DNSCrypt-Proxy можно установить командой:

apt-get install dnscrypt-proxy

Далее нужно открыть файл "/usr/share/dnscrypt-proxy/dnscrypt-resolvers.csv" и выбрать из списка резолвер, который вам больше по душе. В таблице указаны как IP-адреса резолвера, так и географическое расположение, компания-владелец и ряд других параметров.

Выбрав публичный резолвер открываем файл "/etc/default/dnscrypt-proxy" и приводим его к виду:

# IP-адрес и порт, на котором будет слушать сервис
DNSCRYPT_PROXY_LOCAL_ADDRESS=127.0.2.1:53

# Имя DNSCrypt-резолвера из списка (первый столбец в файле
# /usr/share/dnscrypt-proxy/dnscrypt-resolvers.csv)
DNSCRYPT_PROXY_RESOLVER_NAME=soltysiak

# Дополнительные опции
DNSCRYPT_PROXY_OPTIONS=""

После этого необходимо перезапустить сервис:

service dnscrypt-proxy restart

По умолчанию сервис "висит" на "127.0.0.1:53". Если это надо изменить то кроме редактирования файла "/etc/default/dnscrypt-proxy" необходимо ещё внести изменения в конфигурацию systemd. Для этого необходимо скопировать файл "/lib/systemd/system/dnscrypt-proxy.socket" в "/etc/init/dnscrypt-proxy.socket", отредактировать последний и далее последовательно выполнить:

systemctl reenable dnscrypt-proxy.socket
service dnscrypt-proxy stop
service dnscrypt-proxy start

После этого в настройках сетевого соединения в качестве DNS-сервера надо указать адрес "127.0.2.1" и на этом настройка заканчивается. Убедиться что всё хорошо можно командой:

nslookup -type=txt debug.opendns.com.

Тестирование работы DNSCrypt-Proxy с помощью OpenDNS

Важное замечание: не все публичные сервера из списка доступны из любой страны. Кроме того некоторые сервера с момента попадания в список могли перестать существовать. Потому возможно придётся перебрать несколько вариантов не найдётся рабочий резолвер.

На этом всё. Приятной работы!

Ключевые слова: dnscrypt, dnscrypt-proxy, systemd, socket.

Комментарии:

Новый комментарий



© 2006-2018 Вадим Калинников aka MooSE