вторник, 13 октября 2015 г.

DNSSEC: Unbound + DNSCrypt proxy

Большинство из тех, кто использует связку Unbound+dnscrypt, обычно отключает валидацию DNSSEC в Unbound, так как считают, что она не будет работать через dnscrypt.

Это не совсем так. Вообще говоря, это совсем не так.

Если внимательно посмотреть на список ресолверов dnscrypt, то можно увидеть, что некоторое количество из них поддерживает DNSSEC. 

Следовательно, никто не мешает нам использовать DNSSEC. Что, в сочетании с встроенными в Unbound возможностями харденинга, несколько повышает защищенность нашей DNS-системы и опять-таки уменьшает вероятность намеренного отравления нашего DNS.

Итак, как мы это сделаем?

Всегда правой!

Конфигурирование dnscrypt

В настройках dnscrypt нужно выбрать те ресолверы, которые, во-первых, чаще находятся в онлайне (иначе получите непредсказуемые отказы вашей системы DNS), во-вторых, находятся ближе к вам по пингу и быстрее отвечают, и, в-третьих, те, которые поддерживают DNSSEC.

Например, dnsmachine.net-decloudns-cancloudns-syd или 4armed. Чуть позже мы рассмотрим вопрос отказоустойчивой конфигурации dnssec-пиров.

Учтите при выборе один факт. Ваша инфраструктура должна пропускать 443/UDP наружу с сервера, на котором выполняется dnscrypt. По данному порту происходит периодический запрос публичных ключей DNSSEC, во всяком случае у большинства серверов dnscrypt.

После изменения ресолвера (ресолверов) перезапустите ваш dnscrypt-proxy.

Конфигурирование Unbound

Для активации поддержки DNSSEC в Unbound необходимо раскомментировать (или убедиться, что они раскомментированы) следующие параметры:

      # module configuration of the server. A string with identifiers  
      # separated by spaces. "iterator" or "validator iterator"  
      module-config: "validator iterator"  
      # module-config: "iterator"  
   
      # File with trusted keys, kept uptodate using RFC5011 probes,  
      # initial file like trust-anchor-file, then it stores metadata.  
      # Use several entries, one per domain name, to track multiple zones.  
      #  
      # If you want to perform DNSSEC validation, run unbound-anchor before  
      # you start unbound (i.e. in the system boot scripts). And enable:  
      # Please note usage of unbound-anchor root anchor is at your own risk  
      # and under the terms of our LICENSE (see that file in the source).  
      auto-trust-anchor-file: "/usr/local/etc/unbound/root.key"  
   

Учтите одну вещь: auth-trust-anchor-file будет обновляться автоматически. Для того, чтобы этот процесс мог вообще происходить, необходимо разрешить пользователю, от которого исполняется Unbound, запись в директорию конфигурации Unbound.

Для этого нужно, чтобы владельцем всей директории рекурсивно был этот пользователь (включая root.key):


Если вы этого не сделаете, ключ не сможет автоматически обновляться Unbound'ом и, более того, ваш Unbound не сможет работать в режиме DNSSEC validation. Он будет просто падать с первым же запросом.

После завершения конфигурирования перезапустите Unbound.

Для тестирования конфигурации выполните команду:


      dig com. SOA +dnssec  

Вы должны увидеть следующее:


Чтобы окончательно убедиться, что все в порядке, можно найти в Гугле онлайновые тестировщики клиентского ресолвера:

http://dnssec.vs.uni-due.de/

https://dnssectest.sidnlabs.nl/test.php
Если последний тест показывает вам "Permissive mode", задайте в конфигурационном файле Unbound явно значение:

 val-permissive-mode: no  

Должно быть вот так:


That's all, folks!