--- categories: ['OpenBSD','Réseau','Serveur'] date: 2018-10-22T15:08:43+02:00 description: "Configurer le service unbound, sous OpenBSD, pour avoir les requêtes en mode DNSSEC, et DNS/TLS" draft: false tags: ['OpenBSD','unbound','DNSSEC','DNS','DoT','TLS'] title: "OpenBSD : Unbound en mode DNSSEC + DNS/TLS" translationKey: 'openbsd-unbound-dnssec-dot' --- ## 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 : **{{< inside "sys:openbsd: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 : ```cfg auto-trust-anchor-file: "/var/unbound/db/root.key" ``` Auquel, il faut ajouté le mode de validation DNSSEC :
```cfg module-config: "validator iterator" ``` {{< note tip >}} Même si sous OpenBSD, ce fichier de clé est généré automatiquement dès le premier démarrage, pour générer le fichier de clé : `# unbound-anchor -u _unbound -a "/var/unbound/db/root.key"` L'option `-u` utilise ici le nom utilisateur, par défaut lié au projet unbound, sous OpenBSD, à savoir `_unbound`. {{< /note >}} De même, il faut ajouter les variables suivantes à votre propre fichier de configuration : ```cfg 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 **{{< abbr DoT "DNS-over-TLS" >}}** ! {{< note info >}} Il est nécessaire de **bien comprendre l'impact de l'usage de ce mode de communication**. Du fait d'utiliser TLS, la communication semble "ralentie", donner la sensation de lenteur… *Cela est plus ou moins sensible selon la puissance de votre machine et des serveurs interrogés, de la qualité du réseau, etc.* {{< /note >}} Il faut configurer unbound ainsi, dans un premier temps : ```cfg 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 : ```cfg forward-zone: name: "." # use for ALL queries forward-ssl-upstream: yes # FDN DoT ## https://www.fdn.fr/ouverture-des-services-dot-doh/ forward-addr: 80.67.169.12@853 forward-addr: 80.67.169.40@853 forward-addr: 2001:910:800::12@853 forward-addr: 2001:910:800::40@853 # Others 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 !)* {{< note info >}} Les serveurs DNS indiqués le sont à titre d'exemples et fonctionnels… mais vous pouvez très bien en ajouter, supprimer d'autres, ne le faire que sur une des deux couches réseaux (soit pour IPv4, soit pour IPv6)… {{}} ## Tests DNSSEC ### Dig Un premier test à faire est l'usage de la commande `dig`, tel que : ```sh $ 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 : ```sh $ 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) ``` ### Navigateur internet Un moyen visuel est d'ouvrir votre navigateur internet favori, puis d'aller sur les sites suivants : * http://www.dnssec.cz : si, sur la partie droite, vous voyez une clé verte, c'est tout autant bon signe ! * https://en.internet.nl : cliquez sur le lien titré "Test my internet connection" ## Documentations Pour savoir comment : * {{< inside "sys:openbsd:unbound-control" "contrôler le service unbound" >}} ### Manpage * {{< man dig >}} * {{< man unbound 8 >}}, {{< man unbound.conf 5 >}}, {{< man unbound-checkconf 8 >}}, {{< man unbound-anchor 8 >}}, {{< man unbound-host >}} ---