Рассмотрим способ использования шифрования всего 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 заккоментируем строчки резолверов по умолчанию, перед строками добавим знак #.
Спускаемся чуть ниже и в строке OPTIONAL UPSTREAMS расскоментируем (убираем знак #) нужный нам резолвер.
А в случае Comss.one DNS добавляем следующие строки:
## Comss.one DNS 93.115.24.204 - address_data: 93.115.24.204 tls_auth_name: "dns.comss.one"
Сохраняем изменения комбинацией клавиш ctrl+o и ctrl+x.
Затем переходим в параметры сети и меняем DNS на следующее значение: 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 это имя пользователя.
Теперь можно скачать архив с файлом, который доступен по ссылке ниже.
Разархивируем архив, открываем терминал в папке с файлом и запускаем программу:
sudo ./termshark
В строке Filter вводим слово DNS и нажимаем на кнопку Apply.
Окно пустое, запросы не отображены, потому что зашифрованы.
Пример использования Cloudflare DNS без использования шифрования.
Как видим сетевые запросы отображены и не зашифрованы.
Аналогично можно проверить и с помощью программы Wireshark.