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
(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
Je 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)
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
D'après les instructions trouvées sur le site www.digitalocean.com.
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.