Configurer DNSSEC sur un serveur CentOS8 faisant authorité avec Bind 🇫🇷
Prérequis
Vérifier la version de Bind et (re)prendre connaissance des emplacements de fichier par défaut :
named -V
BIND 9.11.26-RedHat-9.11.26-6.el8 (Extended Support Version) <id:3ff8620>
running on Linux x86_64 4.18.0-305.17.1.el8_4.x86_64 #1 SMP Wed Sep 8 14:00:07 UTC 2021
built by make with […]
default paths:
named configuration: /etc/named.conf
rndc configuration: /etc/rndc.conf
DNSSEC root key: /etc/bind.keys
nsupdate session key: /var/run/named/session.key
named PID file: /var/run/named/named.pid
named lock file: /var/run/named/named.lock
geoip-directory: /usr/share/GeoIP
On voit ainsi que le fichier de configuration principal est /etc/named.conf
.
Les fichiers de zones sont dans le dossier /var/named
(normalement l'info est dans le dossier de configuration).
Fichier de configuration
Dans la déclaration des options du fichier de configuration, ajouter les options suivantes :
options {
[…]
recursion no;
dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;
};
Génération des clés
C'est rare que j'opère ainsi, mais pour le coup, jeJe me suis mis en root pour la suite des opérations…
sudo su
Se rendre dans le dossier de zone
cd /var/named
Créer la clés Zone Signing Key (ZSK)
D'après la doc.
dnssec-keygen -a ECDSAP256SHA256 -n ZONE <domain.name>
Ce qui produit la sortie suivante :
Generating key pair.
K<domain.name>.+xxx+xxxxx
⚠️ À noter la lettre K
.
La clés publique doit être insérée dans le fichier de zone :
vim /var/named/zone.<domain.name>
[…]
$INCLUDE K<domaine.name>.+xxx+xxxxx.key
Créer la clés Key Signing Key (KSK)
D'après les instructions trouvées sur le site www.digitalocean.com.
Problème
En continuant à suivre la documentation de bind9, à savoir :
dnssec-signzone -o <domain.name> zone.<domain.name>
Je me suis retrouvé avec une erreur :
dnssec-signzone: fatal: No self-signed KSK DNSKEY found. Supply an active
key with the KSK flag set, or use '-P'.
Solution
dnssec-keygen -f KSK -a ECDSAP256SHA256 -n ZONE <domain.name>
Generating key pair.
K<domain.name>.+xxx+xxxxx
La clés publique doit également être insérée dans le fichier de zone :
vim /var/named/zone.<domain.name>
[…]
[…]
$INCLUDE K<domaine.name>.+xxx+xxxxx.key
Signer la zone
D'après la doc.
Pour le coup, il devient possible de signer la zone :
dnssec-signzone -o <domain.name> zone.<domain.name>
Verifying the zone using the following algorithms: ECDSAP256SHA256.
Zone fully signed:
Algorithm: ECDSAP256SHA256: KSKs: 1 active, 0 stand-by, 0 revoked
ZSKs: 1 active, 0 stand-by, 0 revoked
zone.<domain.name>.signed
Ce qui crée un nouveau fichier qu'il faut renseigner dans le fichier de configuration local des zones :
vim /etc/named.conf.local
zone "<domain.name>" {
type master;
file "zone.<domain.name>.signed";
};
En fait, il suffit de rajouter le .signed
au nom de zone précédemment renseigné.
Récap des fichiers créés
Le dossier de zone contient donc 6 nouveaux fichiers :
-
K<domaine.name>.+xxx+xxxxx.key
pour la clés ZSK -
K<domaine.name>.+xxx+xxxxx.private
pour la clés ZSK -
K<domaine.name>.+xxx+xxxxx.key
pour la clés KSK -
K<domaine.name>.+xxx+xxxxx.private
pour la clés KSK -
zone.<domain.name>.signed
pour la signature de zone -
dsset-<domain.name>.
contenant des DS Record
Récupérer le DS Record
Deux façons de récupérer le DS Record
pour procéder à l'enregistrement auprès de son fournisseur de zone de nom de domaine supérieur (désolé, je ne sais pas mieux m'expliquer à l'instant) :
dnssec-dsfromkey
dnssec-dsfromkey -2 K<domain.name>.+xxx+xxxxx.key
Où la clés correspond à la dernière clés créée, c'est à dire KSK.
cat
cat dsset-<domain.name>.
Pour ma part, j'ai choisi la première méthode afin de ne pas avoir de tabulation dans ma sortie.
Enfin
Quitter l'utilisateur root
…
On peut vérifier avec le site https://dnssec-analyzer.verisignlabs.com.
Le fournisseur de zone de nom de domaine supérieur peut avoir un peu de délai avant de procéder à l'enregistrement.