Vendredi 23 novembre 2018

Unbound

Utiliser Unbound avec DNSSEC
Cache et requêtes DNS chiffrées avec Unbound
Installer votre résolveur DNS avec unbound
Arrêtez (de conseiller) d’utiliser Google Public DNS
Unbound (doc ubuntu)
Installer votre serveur DNS sur Debian
Bloquer les publicités et traqueurs au niveau du DNS avec Unbound

Le service DNS (Domain Name Service) est un service UDP/IP (et parfois TCP/IP) permettant la correspondance entre un nom de domaine qualifié (FQDN : Fully Qualified Domain Name) et une adresse IP, par exemple www.ubuntu-fr.org = 88.191.119.240. Ainsi, grâce à DNS, il n’est pas nécessaire de se souvenir des adresses IP.

Un serveur qui héberge le service DNS est appelé “serveur de noms”.
Ubuntu propose de base Unbound, une alternative à bind9.
Unbound se veut plus simple a configurer que bind9 pour un LAN de petite taille.

Installer le résolveur DNS Unbound

DNS Unbound

Les serveurs DNS sont des machines discutant entre elles afin de se communiquer les correspondances entre nom de domaine et adresses IP.

Passage en mode super utilisateur

sudo -s # ou su

Désinstaller bind

apt remove --purge bind* -y
rm -r /var/cache/bind/

Installation des outils dns et du paquet Unbound :

apt install dnsutils unbound -y

Téléchargement de la liste des serveurs DNS racines :

cd /var/lib/unbound/ && wget ftp://ftp.internic.net/domain/named.cache

Mise en place de cette liste pour le serveur Unbound :

mv named.cache root.hints && chown unbound:unbound root.hints

Les fichiers de configuration sont situés sous /etc/unbound/unbound.conf.d/
root-auto-trust-anchor-file.conf qui est créé par défaut à l’installation

server:
    # The following line will configure unbound to perform cryptographic
    # DNSSEC validation using the root trust anchor.
    auto-trust-anchor-file: "/var/lib/unbound/root.key"

qname-minimisation.conf qui est créé par défaut à l’installation

server:
    # Send minimum amount of information to upstream servers to enhance
    # privacy. Only sends minimum required labels of the QNAME and sets
    # QTYPE to NS when possible.

    # See RFC 7816 "DNS Query Name Minimisation to Improve Privacy" for
    # details.

    qname-minimisation: yes

Ajout d’un fichier de configuration
dns-yan.conf

nano /etc/unbound/unbound.conf.d/dns-yan.conf
server:
 interface: 0.0.0.0
 interface: ::0
 access-control: 0.0.0.0/0 allow
 access-control: ::/0 allow
 root-hints: "/var/lib/unbound/root.hints"
 verbosity: 0
 #qname-minimisation: yes

 num-threads: 2
 msg-cache-slabs: 4
 rrset-cache-slabs: 4
 infra-cache-slabs: 4
 key-cache-slabs: 4
 rrset-cache-size: 100m
 msg-cache-size: 50m
 outgoing-range: 465
 so-rcvbuf: 4m
 so-sndbuf: 4m
 port: 53
 do-ip4: yes
 do-ip6: yes
 do-udp: yes
 do-tcp: yes
 do-daemonize: yes
 hide-identity: yes
 hide-version: yes
 harden-glue: yes
 harden-dnssec-stripped: yes
 harden-referral-path: yes
 use-caps-for-id: yes
 prefetch: yes

Redémarrer le service dnsunbound

systemctl restart unbound

Les commandes suivantes ne fonctionneront que si le paquet “dnsutils” est installé sur votre système Debian!

dig @127.0.0.1 afnic.fr +short +dnssec
192.134.5.25
A 8 2 600 20180406223409 20180307194345 64860 afnic.fr. lhw7AmNSkeZOtNN/9rJuGYxTdUcXSR3xlbsKz2xjNbFxQT5FwKILTW+E WWawrrbjo79uaG7kAvfMWrah4ijWtz9qGyd76qTr3XVdXB3+pbIsRr6X /I/ryQAy9w8tP3FvXHHU7IxihP+Ei2M5licCYitt1YZUyXuNFdNpdhq7 FRT+tq78yn1PEm121f32IRQ2Fjy9qZz9O0LU7roYZ6XFoPU9x3PU590J mpkywT9t6LpyeW5GK5zSL+Zb5eiFhfp33abkMf7b6Pc7xixcGN8h8SDQ Ry98Ne0EIqHKnyh/zzRszc1kBfP5kJXmcY/X3+4xLvKmvKNnBLT0dsn1 q1Hl1A==

Si la commande dig-command a fonctionné, vous pouvez maintenant définir Unbound comme premier résolveur DNS pour votre système de messagerie:

apt install resolvconf -y
echo "nameserver 127.0.0.1" >> /etc/resolvconf/resolv.conf.d/head

Le résultat de la commande

nslookup afnic.fr | grep Server

devrait ressembler à ceci:

Server:     127.0.0.1

Vérifier la résolution de nom à partir du serveur :

dig @127.0.0.1 afnic.fr
; <<>> DiG 9.10.3-P4-Debian <<>> @127.0.0.1 afnic.fr
; (1 server found)
...
;; SERVER: 127.0.0.1#53(127.0.0.1)
...

La résolution fonctionne

Pour tester si le DNSSEC fonctionne

dig sigok.verteiltesysteme.net

Vérifier dans la réponse la présence de status: NOERROR

dig sigfail.verteiltesysteme.net

Vérifier dans la réponse la présence de status: SERVFAIL

Maintenant, vous disposez de votre propre résolveur DNS.

Mise à jour automatique des serveurs DNS de la racine ,créer un bash

nano /etc/unbound/dnsunbound-update-root-dns.sh
#!/bin/sh

TmpName=$(mktemp)
TmpDiff=$(mktemp)
TmpErr=$(mktemp)
REPORT_EMAIL="admin"
URL="https://www.internic.net/domain/named.cache"

wget -nv $URL -O $TmpName 2> $TmpErr

# On intercepte toute erreur
# et on stoppe le script dans ce cas
# On continue sinon

if [ "$?" -ne 0 ];then
        printf "\nScript was stopped at this point. A manual action may be required.\n" >> $TmpErr
        mail -s "[DNS - $(uname -n)] Root hints file download failed" $REPORT_EMAIL < $TmpErr
        rm $TmpErr
        rm $TmpDiff
        rm $TmpName
        exit 0
else
        rm $TmpErr
        shaTMP=$(sha512sum $TmpName | awk '{print $1}')
        shaHINTS=$(sha512sum /var/lib/unbound/root.hints | awk '{print $1}')

        if [ $shaTMP = $shaHINTS ]; then
        # Si le fichier récupéré est identique à celui
        # utilisé par Unbound, on fait... rien
                rm $TmpName
                exit 0
        else
                printf "A new root hints file was spotted on InterNIC server.\nFile downloaded and old root.hints file replaced.\nHere is the diff:\n\n" > $Tmp$
                diff $TmpName /var/lib/unbound/root.hints >> $TmpDiff
                printf "\n\n" >> $TmpDiff
                mv -f $TmpName /var/lib/unbound/root.hints
                chown unbound: /var/lib/unbound/root.hints
                chmod 644 /var/lib/unbound/root.hints
                sleep 5
                service unbound restart
                printf "Unbound status is $(service unbound status | grep Active | awk '{print $2 " " $3}')\n" >> $TmpDiff
                mail -s "[DNS - $(uname -n)] Update in Root Hints" $REPORT_EMAIL < $TmpDiff
        rm $TmpDiff
        fi
fi
exit 0

Droits en exécution

chmod +x /etc/unbound/dnsunbound-update-root-dns.sh

Planification journalière

crontab -e

Ajouter en fin de fichier

# Mise à jour automatique des serveurs DNS de la racine
50 02 * * * /etc/unbound/dnsunbound-update-root-dns.sh