OpenBSD : Unbound en mode DNSSEC + DNS/TLS

Article publié, le
5 minute(s) de lecture

Cet article contient 949 mots.
Source brute de l'article : MD

Description

Cet article a pour but de montrer comment configurer le service unbound pour que celui fasse ses requêtes en tenant compte du protocole DNSSEC, protocol de chiffrement des données, et aussi pour qu’elles soient transmises en tenant compte du protocol de chiffrement TLS.

Configuration

Pour rappel :

  • le fichier de configuration est normalement : /var/unbound/etc/unbound.conf
  • la commande pour tester la configuration est : unbound-checkconf

Je ne rappellerai pas comment configurer pleinement Unbound, lisez cet article : OpenBSD : utiliser Unbound

DNSSEC

La gestion DNSSEC se fait par l’usage de l’outil unbound-anchor qui crée un fichier de clé nécessaire et l’ajout de la variable auto-trust-anchor-file qui pointe vers ledit fichier de clés, dans votre fichier de configuration, tel quel :
auto-trust-anchor-file: "/var/unbound/db/root.key"

Auquel, il peut être ajouté le mode de validation DNSSEC :
module-config: "validator iterator"

Astuce

De même, il faut ajouter les variables suivantes à votre propre fichier de configuration :
harden-below-nxdomain: yes
harden-dnssec-stripped: yes
harden-referral-path: yes

Explications

  • L’option harden-referral-path’ renforce la validation DNSSEC - c’est une option expérimentale, sans norme RFC, et peut poser des problèmes de performances !

Depuis la version 1.7.0, unbound a une nouvelle option : aggressive-nsec qui met en cache les enregistrements NSEC pour générer les réponses rapidement. Depuis OpenBSD 6.4, unbound est fourni en version 1.8.1, donc profitez-en :
aggressive-nsec: yes

DNS over TLS

Oui, unbound est capable de communiquer aussi avec les serveurs DNS, en mode protocolaire DoT !

Info

Il faut configurer unbound ainsi, dans un premier temps :
do-tcp: yes
ssl-upstream: yes

Explications :

  • do-tcp indique de communiquer sur le protocole TCP
  • ssl-upstream ou tls-upstream oblige à communiquer sur le protocole TLS.
    • Il est important que le(s) serveur(s) DNS interrogés sachent communiquer sur ce protocole, autrement les requêtes échoueront !
    • Si les deux options *-upstream sont indiquées, seule la dernière sera prise en compte.

Forward

Ensuite, il est nécessaire de décommenter - si ce n’est pas déjà fait - la partie forward-zone, pour indiquer le(s) serveur(s) à interroger sur le port adéquat - par défaut : 853 - tel(s) que :

Code : unbound

forward-zone:
        name: "."                               # use for ALL queries
        forward-ssl-upstream: yes
        forward-addr: 9.9.9.9@853               # Quad9
        forward-addr: 1.1.1.1@853               # Cloudflare
        forward-addr: 149.112.112.112@853       # Quad9 secondaire
        forward-addr: 1.0.0.1@853               # Cloudflare secondaire
        forward-addr: 2620:fe::fe@853           # Quad9 / IPv6
        forward-addr: 2606:4700:4700::1111@853  # Cloudflare / IPv6
        forward-addr: 2606:4700:4700::1001@853  # Cloudflare secondaire / IPv6

Explications :

  • forward-ssl-upstream ou son pendant forward-tls-upstream - (cette dernière semble n’être pas reconnue… sous OpenBSD) oblige toutes les requêtes name: "." à communiquer en mode DoT - normalement la documentation unbound informe qu’il faut aussi configurer l’option ssl-cert-bundle, ou son pendant tls-cert-bundle, voire l’option tls-win-cert pour authentifier les connexions.
    Cela ne semble pas nécessaire sous OpenBSD. (<= à confirmer !)
Info

Tests DNSSEC

Dig

Un premier test à faire est l’usage de la commande dig, tel que :

Code : shell

$ dig com. SOA +dnssec 

; <<>> DiG 9.10.3-P4-Debian <<>> com. SOA +dnssec 
;; global options: +cmd 
;; Got answer: 
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60764 
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 14, ADDITIONAL: 1 

()

Ce qu’il faut repérer dans la sortie complète de la commande dig est sur la ligne flags: : il faut la présence du drapeau ad - si celui-ci figure bien, c’est bon signe ! :D

$ dig com. SOA +dnssec | grep ";; flags"
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

Unbound-host

L’autre commande à utiliser est la commande unbound-host qui permet de s’assurer du même résultat, tel que :

Code : shell

$ unbound-host -v -f /var/unbound/db/root.key com.                                                                                         
com. has no address (secure)
com. has no IPv6 address (secure)
com. has no mail handler record (secure)

$ unbound-host -v -f /var/unbound/db/root.key www.ripe.net        
www.ripe.net has address 193.0.6.139 (secure)
www.ripe.net has IPv6 address 2001:67c:2e8:22::c100:68b (secure)
www.ripe.net has no mail handler record (secure)

$ unbound-host -v -f /var/unbound/db/root.key www.afnic.fr 
www.afnic.fr is an alias for lb01-1.nic.fr. (secure)
lb01-1.nic.fr has address 192.134.5.24 (secure)
lb01-1.nic.fr has IPv6 address 2001:67c:2218:30::24 (secure)
lb01-1.nic.fr has no mail handler record (secure)

$ unbound-host -v -f /var/unbound/db/root.key dnssec.cz
dnssec.cz has address 217.31.205.51 (secure)
dnssec.cz has IPv6 address 2001:1488:0:3::5 (secure)
dnssec.cz mail is handled by 10 mail.nic.cz. (secure)
dnssec.cz mail is handled by 15 mx.nic.cz. (secure)
dnssec.cz mail is handled by 20 bh.nic.cz. (secure)

# unbound-host -v -C /var/unbound/etc/unbound.conf dnssec.cz                                                                          
dnssec.cz has address 217.31.205.51 (secure)
dnssec.cz has IPv6 address 2001:1488:0:3::5 (secure)
dnssec.cz mail is handled by 10 mail.nic.cz. (secure)
dnssec.cz mail is handled by 15 mx.nic.cz. (secure)
dnssec.cz mail is handled by 20 bh.nic.cz. (secure)

Un moyen visuel est d’ouvrir votre navigateur internet favori, puis d’aller sur les sites suivants :

Documentations

Pour savoir comment :

Manpage