Опубликовано 24th Jul 2018 12:50:00 в категории Linux
Здравствуй, дорогой друг. Наверняка ты слышал про такие слова, как чистый DNS, защищенный DNS и так далее. Казалось бы, зачем нужен какой-то там "чистый" DNS? Я тебе расскажу. Чистым DNS называют такой DNS сервер, трафик до которого прозрачным образом перехватить нельзя. Все вы, наверное, сталкивались с тем, что при подключении к провайдеру вам дают его DNS, якобы лучше работающий. Здесь очень все сложно. Дело в том, что используя свой Интернет через такой DNS сервер, вы автоматом снимаете штаны и подставляете свою задницу прямо провайдеру и "большому дядьке", к их удочкам. Все DNS запросы будут логированы. Абсолютно, от слова абсолютно. Но если использовать альтернативный DNS, к примеру от Яндекс или Гугл, то это вовсе не означает, что штанишки вы не снимаете и повторно не подставляете задницу к удочке провайдера или "большого дяди". DNS запросы точно так же будут логироваться, что многим очень не нравится. Я не говорю, что мне, или соседу дяде Пете есть, что скрывать. Нет. Но есть такая вещь, как личная жизнь, и есть тайна личной жизни. Если тебе, дружище, как и мне не насрать на такие вещи, то необходимо прекращать использовать "рекомендуемые" DNS серверы, и поднять у себя сервис "DNSCrypt".
Основная задача DNSCrypt - это полное шифрование всего канала связи между клиентом и DNS-сервером. Шифрование DNS-трафика позволит защитить клиента от атак "человек посередине" (MitM), при которых злоумышленник вклинивается в канал связи и притворяется DNS-сервером. Кроме того, шифрование предотвращает наблюдение за трафиком и блокирует активность злоумышленников, связанную с подбором идентификаторов пакетов или отправкой фиктивных DNS-ответов. А коли хочется еще и быстрого DNS, то необходимо установить еще и такую вещь, как unbound.
Unbound - валидирующий, рекурсивный, кэширующий DNS-резолвер. Он спроектирован так, чтобы молниеносно обрабатывать запросы с минимальными требованиями. К тому же, он многопоточный. Конфигурабельный и легкой в понимании. Его мы будем состыковывать с DNSCrypt.
Итак, что нам нужно:
Будем считать, что ОС у тебя уже стоит. Далее следуют примеры на основе Debian 9, но оно будет справедливо для всех дистрибутивов, могут лишь отличаться пути к конфигам.
Итак, сперва установим DNSCrypt. Его нам предоставляет пакет dnscrypt-proxy. Установим его, а также плагины к нему:
apt install dnscrypt-proxy dnscrypt-proxy-plugins
Далее нам необходимо настроить сам DNSCrypt. Но прежде чем это сделать, нужно выбрать безопасный резолвер. Полный список резолверов располагается в /usr/share/dnscrypt-proxy/dnscrypt-resolvers.csv. Погугли в Интернете, какой тебе сможет подойти лучше всего. Я выбрал dnscrypt.eu-dk. Далее уже идем в конфиг DNSCrypt
cat /etc/dnscrypt-proxy/dnscrypt-proxy.conf
# Пример конфига также можно найти тут
# /usr/share/doc/dnscrypt-proxy/examples/dnscrypt-proxy.conf
#Выбираем резолвер
ResolverName dnscrypt.eu-dk
#Список резолверов
ResolversList /usr/share/dnscrypt-proxy/dnscrypt-resolvers.csv
#Укажем, где крутиться нашему DNSCrypt
LocalAddress 127.0.2.1:53
#Запретим запускаться как демон. Это нужно, чтобы выполнять сервис как службу systemd
Daemonize no
#Блокируем ipv6
BlockIPv6 yes
#Блокируем запросы АААА
Plugin libdcplugin_example_ldns_aaaa_blocking.la
По конфигу все довольно понятно и просто. Если ipv6 у тебя используется, то блокировку убери, иначе - обязательно убери ipv6 отовсюду. Также прочитай вот эту мою статейку, в которой я написал про блокирование АААА запросов. В конфиге уже это включено в последней строке.
Итак, включаем и запускаем сервис dnscrypt-proxy
● dnscrypt-proxy.service - DNSCrypt client proxy
Loaded: loaded (/lib/systemd/system/dnscrypt-proxy.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2018-06-27 11:00:10 +05; 3 weeks 6 days ago
Docs: man:dnscrypt-proxy(8)
Main PID: 5169 (dnscrypt-proxy)
Tasks: 1 (limit: 4915)
CGroup: /system.slice/dnscrypt-proxy.service
└─5169 /usr/sbin/dnscrypt-proxy /etc/dnscrypt-proxy/dnscrypt-proxy.conf
июл 24 12:46:20 dns dnscrypt-proxy[5169]: Tue Jul 24 12:46:20 2018 [INFO] This certificate is valid
июл 24 12:46:20 dns dnscrypt-proxy[5169]: Tue Jul 24 12:46:20 2018 [INFO] Chosen certificate #808464433 is valid from [2017-09-11]
Работает! Далее установим unbound
apt install unbound
Идём в его конфиг, и настраиваем:
#Начинаем конфиг с этой строки
server:
#Указываем интерфейсы, на которых следует крутиться сервису
interface: ip_адрес_твоего_сервера@53
interface: 127.0.0.1@53
#Укажем, чтобы валидатор не отмечал ложные сообщения как неопределенные.
val-permissive-mode: no
#Отключить высирание сообщений в Syslog
use-syslog: no
#Указываем собственный лог-файл
logfile: "/etc/unbound/unbound.log"
#Уровень разговорчивости, бывает нужен для отладки, на продакшене ставим 0
verbosity: 0
#Если включено, идёт расширенная статистика из unbound-control
extended-statistics: yes
#Число потоков. Выставляем в зависимости от кол-ва ядер, если не скряга, конечно
num-threads: 2
###############################################
### Значения получены опытным путём
###############################################
# Число дескрипторов, которое может быть открыто на один поток.
outgoing-range: 206
#Количество исходящих буферов TCP для размещения в потоке
outgoing-num-tcp: 128
#Количество входящих буферов TCP для размещения в потоке
incoming-num-tcp: 128
#Буферное пространство входящих запросов
so-rcvbuf: 4m
#Буферное пространство исходящих запросов
so-sndbuf: 4m
#Количество байтов в кеше сообщений
msg-cache-size: 16m
#Количество 'плит' в кеше сообщений. Плиты снижают конфликт блокировок по потокам
msg-cache-slabs: 16
#Количество байтов в кеше RRset
rrset-cache-size: 16m
#Кол-во 'плит' в кеше RRset, для уменьшения риска конфликта блокировок по потокам
rrset-cache-slabs: 16
#Время жизни RRsets и сообщений в кеше
cache-min-ttl: 86400
#Наши любимые 'плитки'
infra-cache-slabs: 16
###############################################
#Контроль доступа. Здесь перечисляем наши подсети, которым разрешен доступ к DNS
#Действие allow_snoop дает нерекурсивный доступ.
access-control: 127.0.0.0/8 allow_snoop
access-control: 192.168.0.0/24 allow_snoop
access-control: 192.168.1.0/24 allow_snoop
#Имя юзера, от которого запускается сервис
username: "unbound"
#Не разрешаем localhost добавляться в do-not-query-address
do-not-query-localhost: no
#Элементы кэша сообщений предварительно заполняются,
#прежде чем они истекут, чтобы обновить кеш-память
prefetch: yes
#Unbound ротирует запрос RRSet в ответе
#(случайное число берется из идентификатора запроса,
#для скорости и безопасности потока)
rrset-roundrobin: yes
#Unbound не вставляет дополнительные разделы в ответные
#сообщения, когда эти разделы не требуются
minimal-responses: yes
#Отключаем ipv6
do-ip6: no
#Добавляем форвардеры. Можно добавить несколько форвардеров. В нашем случае
#только один - наш DNSCrypt
forward-zone:
name: "."
forward-addr: 127.0.2.1@53
#forward-addr: 1.1.1.1@53
#forward-addr: 1.0.0.1@53
Сохраняемся. Также приведем файл /etc/resolv.conf к следующему виду:
nameserver 127.0.0.1
Запускаем unbound, глядим:
● unbound.service - Unbound DNS server
Loaded: loaded (/lib/systemd/system/unbound.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2018-07-24 14:37:46 +05; 8min ago
Docs: man:unbound(8)
Process: 21269 ExecStartPre=/usr/lib/unbound/package-helper root_trust_anchor_update (code=exited, status=0/SUCCESS)
Process: 21265 ExecStartPre=/usr/lib/unbound/package-helper chroot_setup (code=exited, status=0/SUCCESS)
Main PID: 21275 (unbound)
Tasks: 2 (limit: 4915)
CGroup: /system.slice/unbound.service
└─21275 /usr/sbin/unbound -d
июл 24 14:37:46 dns systemd[1]: Starting Unbound DNS server...
июл 24 14:37:46 dns package-helper[21269]: /var/lib/unbound/root.key has content
июл 24 14:37:46 dns package-helper[21269]: success: the anchor is ok
июл 24 14:37:46 dns systemd[1]: Started Unbound DNS server.
Также на ресурсе dnsleaktest можно проверить работу DNSCrypt.
Всё! Можно указывать наш DNS сервер на всех пк в локалке, убрать лишние DNS и получать удовольствие от сёрфинга на чистом, быстром и кеширующем DNS
Поддержите блог!