Улучшаем приватность – шифруем DNS трафик в системах GNU/Linux

2020-10-13 31279 комментарии
Рассмотрим способ использования шифрования всего DNS трафика с помощью метода DNS поверх TLS в операционных системах GNU/Linux

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

Для решения данной проблемы стоит использовать шифрование. На данный момент активно применяется шифрование DNS с помощью следующих методов: DNS поверх TLS (DoT), DNS поверх HTTPS (DoH) и DNSCrypt-proxy.

Методы шифрования DNS трафика используются как для шифрования всего DNS трафика, так и отдельно только для определенных браузеров, например: DNS over HTTPS в Firefox и DNS-over-HTTPS в Google Chrome. В этой статье мы рассмотрим достаточно легкий способ использования шифрования всего DNS трафика с помощью метода DNS поверх TLS в операционных системах GNU/Linux.

Для шифрования DNS трафика установим программу Stubby. Stubby - программа с открытым исходным кодом, которая работает в качестве локального приватного DNS резолвера. Для шифрования трафика использует метод DNS поверх TLS.

Перейдем к установке программы.

Для Ubuntu и подобных дистрибутивов:

sudo apt install stubby

Для ArchLinux и подобных дистрибутивов

sudo pacman -S stubby

По умолчанию используется шифрование через резолверы Sinodun и другие. Если мы хотим поменять резолверы например на Cloudflare или Comss.one DNS, то нам нужно будет отредактировать конфигурационный файл.

Перейдем к редактированию конфигурационного файла программы:

sudo nano /etc/stubby/stubby.yml

В строке upstream_recursive_servers заккоментируем строчки резолверов по умолчанию, перед строками добавим знак #.

upstream_recursive_servers

Спускаемся чуть ниже и в строке OPTIONAL UPSTREAMS расскоментируем (убираем знак #) нужный нам резолвер.

А в случае Comss.one DNS добавляем следующие строки:

## Comss.one DNS 195.133.25.16
    - address_data: 195.133.25.16
       tls_auth_name: "dns.comss.one"

В строке round_robin_upstreams меняем значение на 0.

Comss.one DNS

Сохраняем изменения комбинацией клавиш ctrl+o и ctrl+x.

Затем переходим в параметры сети и меняем DNS на следующее значение: 127.0.0.1

127.0.0.1

Если вы не используете systemd-resolved, и отключили его, например из-за утечки DNS в OpenVPN, то тогда вам нужно внести изменения в файл resolv.conf:

sudo nano /etc/resolv.conf

Заменяем строку nameserver на следующие две строки:

nameserver ::1
nameserver 127.0.0.1
Сохраняем изменения комбинацией клавиш ctrl+o и ctrl+x. А так же сохраняем файл от дальнейшей перезаписи:

sudo chattr +i /etc/resolv.conf

Запускаем приложение Stubby и включаем его службу:

sudo systemctl start stubby
sudo systemctl enable stubby

Как проверить шифрование DNS трафика в GNU/Linux

Проверить шифрования DNS трафика в GNU/Linux можно с помощью следующих утилит Wireshark и Termshark. Мы воспользуемся Termshark.

Для работы Termshark необходимо установить следующий пакет:

для Ubuntu и подобных дистрибутивов:

sudo apt install tshark

для ArchLinux и подобных дистрибутивов:

sudo pacman -S wireshark-cli

Добавляем себя в группу wireshark:

sudo usermod -a -G wireshark username

Где username это имя пользователя.

Теперь можно скачать архив с файлом, который доступен по ссылке ниже.

https://github.com/gcla/termshark/releases

Разархивируем архив, открываем терминал в папке с файлом и запускаем программу:

sudo ./termshark

В строке Filter вводим слово DNS и нажимаем на кнопку Apply.

Termshark

Окно пустое, запросы не отображены, потому что зашифрованы.

Пример использования Cloudflare DNS без использования шифрования.

DNS от Cloudflare без использования шифрования

Как видим сетевые запросы отображены и не зашифрованы.

Аналогично можно проверить и с помощью программы Wireshark.

© . Анатолий Гусляков
Комментарии и отзывы

Нашли ошибку?

Новое на сайте