Passer au contenu principal

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)

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

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 :

  1. K<domaine.name>.+xxx+xxxxx.key pour la clés ZSK
  2. K<domaine.name>.+xxx+xxxxx.private pour la clés ZSK
  3. K<domaine.name>.+xxx+xxxxx.key pour la clés KSK
  4. K<domaine.name>.+xxx+xxxxx.private pour la clés KSK
  5. zone.<domain.name>.signed pour la signature de zone
  6. 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.