Hacking
May 10, 2022

Как защититься от спуфинга и утечки DNS

Рассмотрим DnsCrypt, который делает невозможным атаку со спуфингом DNS ответов и контроль за тем, какие сайты ты открывал.

Всем салют, дорогие друзья!
DNS через HTTPS — это протокол, благодаря которому DNS запросы шифруются, что делает невозможным атаку со спуфингом DNS ответов и контроль за тем, какие сайты открывал пользователь.

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

Данная инструкция написана для Kali Linux, но с минимальными поправками должна также работать и в Linux Mint, Ubuntu и аналогичных.


Установка

Установите пакет dnscrypt-proxy:

sudo apt install dnscrypt-proxy

Проверьте, чтобы порт 53 не был занят:

ss -lp 'sport = :domain'

В выводе должна быть всего одна строка, а именно шапка:

Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process

Если вывод содержит более чем одну первую строку с названием столбцов, нужно отключить сервис, который использует порт 53. Одним из частых виновников является systemd-resolved.service (NetworkManager), но другие сетевые менеджеры могут иметь аналогичные компоненты. В общем, какая бы там ни была служба (возможно, вы уже устанавливали другой кэширующий DNS сервер), её нужно остановить и убрать из автозагрузки. Если нет процессов, прослушивающих порт 53, то можно продолжать.

Выполните проверку, чтобы убедиться, что dnscrypt-proxy работает:

/usr/sbin/dnscrypt-proxy -resolve example.com 

Запустите службу dnscrypt-proxy и проверьте её статус:

sudo systemctl start dnscrypt-proxy.service
systemctl status dnscrypt-proxy.service 

Если всё в порядке, добавьте службу в автозагрузку:

sudo systemctl enable dnscrypt-proxy.service 

Откройте файл /etc/NetworkManager/NetworkManager.conf:

sudo gedit /etc/NetworkManager/NetworkManager.conf 

и в раздел

[main] 

добавьте

dns=none

Перезапустите NetworkManager:

sudo systemctl restart NetworkManager 

Сделайте резервную копию файла /etc/resolv.conf:

sudo cp /etc/resolv.conf /etc/resolv.conf.backup 

А затем удалите /etc/resolv.conf (это важно, поскольку это может быть ссылка на файл, а не настоящий файл):

sudo rm -f /etc/resolv.conf 

И создайте файл /etc/resolv.conf

sudo gedit /etc/resolv.conf 

со следующим содержимым:

nameserver 127.0.2.1
# nameserver ::1 # для IPv6
options edns0 single-request-reopen
EDNSPayloadSize 4096

Теперь проверьте систему — откройте сайты, выполните обычные сетевые задачи, чтобы убедиться, что всё работает нормально.

Чтобы посмотреть, какой DNS сервер используется, выполните дважды команду dig:

dig zalinux.ru

Как видно на скриншоте, IP адрес DNS сервера 127.0.2.1. Первый запрос занял 160 msec, а второй запрос занял 0 msec, поскольку данные получены из кэша.

На сегодня это все. Благодарим за внимание. Берегите себя и свою приватность.


👉Да, хочу!ᅠ