10.02.2016

DNS Leak

Кто твой первый советник, тёмный лорд?    >>>    DNS Leak Test

Злоумышленник может не просто вычислить тебя по айпишнику и набить морду, но и подменить IP-адрес сайта при твоём запросе к DNS серверу. Поэтому лучше, на всякий случай, спрячем наши запросы.

Для шифрования DNS-трафика будем использовать dnscrypt-proxy. Когда я обращаюсь к более далёким товарищам с вопросом, да ещё и шифрую этот диалог, то чётко понимаю, что скорость снижается. Поэтому очень хочется кэшировать. А dnscrypt-proxy этого, естественно, не делает. Для кэширования DNS-запросов есть выбор: Dnsmasq и Unbound (и ещё плюс всякого, конечно). Первый - комбайн. Берём второй. Unbound ещё и быстр! А кэш у него хранится целиком в памяти. Вот и получается прослойка:

Сейчас нарисую топорно так схемку:
FireFox -> System ->
/etc/resolv.conf = 127.0.0.1(:53) ->
Unbound -> cache ->
dnscrypt-proxy = 127.0.0.1:40 -> CRYPT ->
4ARMED = 51.254.115.48:443

Applications / System

/etc/resolv.conf
domain DEAD.NET
nameserver 127.0.0.1 # подразумевается порт 53

Этого может быть не достаточно в Armbian Legacy Ubuntu Trusty, так, как при автоматической настройке поменяется. Тогда редактируем файл:
   /etc/resolvconf/resolv.conf.d/original

Сразу поставим пакеты с утилитами для проверки работы устанавливаемого нами софта:
apt-get install tcpdump dnsutils ldnsutils elinks

 

Установка и конфигурация UNBOUND

Установка и конфигурация DNSCRYPT-PROXY

 

Проверки 


Двумя терминалами. В одном забиваем мониторинг порта 40:
tcpdump -A -ni lo port 40
На этот порт придёт запрос от Unbound. Он будет читабельным. А во втором терминале делаем запрос, например:
elinks habrahabr.ru
Далее сбрасываем кэш перезапуском:
unbound-control reload
И делаем мониторинг порта 443 на внешнем интерфейсе
tcpdump -A -ni eth0 port 443
На этот порт dnscrypt-proxy будет отправлять зашифрованный запрос резолверу. Конечно, если именно этот порт используется выбранным нами резолвером, а это можно подсмотреть в файле dnscrypt-resolvers.csv. И тут уже мы увидим зашифрованный трафик. Готово!

Финальная проверка - DNS Leak Test

И здесь мы увидим адрес резолвера, забитый на старте dnscrypt-proxy

Косяк/особенность.

Дело в том, что Unbound форвардов с одинаковыми адресами, но с разным портом не различает. Он будет использовать одного из них. В этом можно убедиться, выполнив команду:
unbound-control forward
127.0.0.1
Поэтому правим конфиги таким образом, чтобы форварды отличались не портами, а адресами:
/etc/unbound/unbound.conf
forward-zone: 
name: "." 
 forward-addr: 127.0.0.2@5353
 forward-addr: 127.0.0.3@5353
И автозапуск dnscrypt-proxy
/etc/rc.local
/usr/local/sbin/dnscrypt-proxy -R 4armed    --local-address=127.0.0.2:5353 --daemonize --pidfile=/run/dnscrypt-proxy2.pid
/usr/local/sbin/dnscrypt-proxy -R soltysiak --local-address=127.0.0.3:5353 --daemonize --pidfile=/run/dnscrypt-proxy3.pid

exit 0
Убеждаемся в портах после ребута
netstat -anp | grep dnscrypt-proxy
netstat -anp | grep unbound
И проверка DNS Leak Test уже покажет два DNS сервера, а запрос на форвардов два локальных адреса:
unbound-control forward
127.0.0.2 127.0.0.3

1 комментарий:

Анонимный комментирует...

Привет .
А pdnsd даже сохраняет кеш DNS на диске.