DNSSEC avec Bind9

Bonjour à tous,

Aujourd'hui, un billet sur la mise en place de DNSSEC avec Bind sous Debian/
DNSSEC permet de chiffrer les données envoyées, pas uniquement un canal entre serveurs DNS, cela permet d'éviter des attaques du style MiM si un serveur DNS intermédiaire est corrompu.

En premier lieu, il est nécessaire d’éditer /etc/bind/named.conf.options pour activer la prise en compte de DNSSEC. Il faut ajouter:

dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;

La première ligne active tout simplement le support de DNSSEC pour Bind.
La seconde indique que le résolveur doit en premier lieu essayer d'utiliser DNSSEC.
Enfin la dernière est une option permettant de faciliter l'adoption de DNSSEC en facilitant sa configuration sur les serveurs récursifs. Attention cependant, si vous utilisez une version de Bind trop ancienne, elle ne sera pas compatible avec DNSSEC.

Une fois cet ajout fait, il faut générer les couples de clés, si vous utilisez des dossiers par zone (comme moi), il faut vous situer dedans pour la génération:

cd /etc/bind/boris-tassou.fr/
dnssec-keygen -a NSEC3RSASHA1 -b 4096 -n ZONE boris-tassou.fr
dnssec-keygen -f KSK -a NSEC3RSASHA1 -b 8192 -n ZONE boris-tassou.fr

ATTENTION! au choix de l’algorithme de chiffrement, en fonction du provider certains ne sont pas supportés.

Nous allons maintenant renommer les clés générées afin de mieux s’y retrouver et de mieux les gérer. Le meilleur moyen est de le faire au faire et à mesure (cela évite des confusions):

mv Kboris-tassou...+0..key Kboris-tassou.fr.zsk.key
mv Kboris-tassou...+0..key Kboris-tassou.fr.zsk.private
mv Kboris-tassou...+0..key Kboris-tassou.fr.ksk.key
mv Kboris-tassou...+0..key Kboris-tassou.fr.ksk.private

Une fois la génération des couples (étapes qui peut-être très longue suivant la machine), il faut ajouter deux lignes dans le fichier de zone afin d'avoir la prise en compte des clés générées au préalable:

$INCLUDE Kboris-tassou.fr.zsk.key
$INCLUDE Kboris-tassou.fr.ksk.key

Une fois cette étape faite, il faut signer le fichier afin de pouvoir l’utiliser (étape à refaire à chaque modification du fichier de zone):

dnssec-signzone -e20160101 -t -g -A -3 $(head -c 1000 /dev/random | sha1sum | cut -b 1-16) -N INCREMENT -k Kboris-tassou.fr.ksk.key -o boris-tassou.fr -t db.boris-tassou.fr Kboris-tassou.fr.zsk.key

La partie entre parenthèses permet de générer une chaîne de 16 caractères nécessaires pour la signature du fichier.

L’option -e permet d’ajouter une date d’expiration des clés, chose obligatoire sinon la durée est fixée automatiquement à 30 jours.
L’option -t permet d’avoir des informations à la fin de la signature.
L’option -g permet de générer les enregistrements DS (Delegation Signer).

Dans le fichier /etc/bind/named.conf.local il faut modifier la ligne file pour pointer vers le fichier signé (extension .signed).

Une fois cela fait, un reload est obligatoire:

service bind9 reload

Il est possible de contrôler si le dnssec est bien actif (opération à faire depuis le serveur DNS pour ne pas avoir à attendre la propagation):

dig DNSKEY borits-tassou.fr. @localhost +multiline

Cela doit renvoyer un résultat dig classique mais avec les key affichées complètement.

La dernière étape est d’activer le dnssec au niveau de votre registar (étape longue +24H possible).

Il faut également ajouter la clé de la zone chez le provider, pour cela il faut la récupérer:

tail -n 1 Kboris-tassou.fr.ksk.key

Cela renvoie une résultat de ce style:

domain.tld. IN DNSKEY 257 3 8 AwEAAbulFobmhae+iYuGQJ7h0RZcVOZE/FL2IcDo6P2cAD0HZaUFPl0k[.........]ba5IEC9gnok=

Ce retour va vous fournir les informations nécessaires pour la configuration de DNSSEC auprès du registar. Il y a 3 informations importantes:

  • 257 : le numéro du flag utilisé
  • 8 : numéro de l'algorithme utilisé
  • AwEAAbulFo[...] : la clé

Ces éléments la sont obligatoires pour activer le DNSSEC auprès du registar.

Il est possible d'utiliser un gestionnaire pour gérer DNSSEC comme OpenDNSSEC qui permet l'automatisation du renouvellement des clés, la resignature du fichier de zone lors de modifications, etc. Cela permet d'éviter certaines erreurs de manipulation.

Have a nice day.