Wiki CgX

Parce que j'ai un cerveau, mais pas trop.

Outils pour utilisateurs

Outils du site


it:linux-selfhosting:bind:dnssec

DNSSEC

DNSSEC utilise deux types de clé :

  • La clé de signature des clés (Key Signing Keys - KSK - 257) : A renouveler tous les ans (recommandation officielle)
  • La clé de signature de la zone (Zone Signing Key - ZSK - 256) : A renouveler tous les 3 mois (recommandation officielle)

Perso, il m'arrive d'attendre 2 ou 3 ans pour renouveler la KSK :-x

Vérifier des clés sur un domaine déjà configuré

dig +short DNSKEY domaine.org

Les enregistrements commençant par 256 indiquent une clé ZSK.
Les enregistrements commençant par 257 indiquent une clé KSK,

L'enregistrement DS contenu dans la zone parent correspond au fingerprint de la clé publique.

Mettre en place le DNSSEC

1 - Générer la clé ZSK (256)

On créé un répertoire “keys” : Par exemple dans /var/cache/bind/keys/ et on y génère la clé :

mkdir /var/cache/bind/keys
cd /var/cache/bind/keys
dnssec-keygen -a ECDSAP256SHA256 -n ZONE domaine.org
  • Pour l'instant (en 2022), l'algorithme ECDSA P-256 avec SHA-256 dans cet exemple est correct et utilisé par la plupart des résolveurs.
  • RSA avec SHA256 est encore très largement utilisé
  • Éviter d'utiliser RSA avec MD5 !

Selon l'algorithme utilisé, ça peut prendre énormément de temps à générer, car le système a besoin d'entropie pour pouvoir générer des nombres quasi-aléatoires.
On peut utiliser des paquets comme haveged ou rng-tools pour accroître l'entropie sur le serveur, si besoin.

Cela va générer deux fichiers (les clés), avec un nombre à 5 chiffres (le key tag) :

  • Kdomaine.org.+013+08810.key
  • Kdomaine.org.+013+08810.private

2 - Générer la clé KSK (257)

C'est presque la même commande :

mkdir /var/cache/bind/keys
dnssec-keygen -f KSK -a ECDSAP256SHA256 -n ZONE domaine.org

Vérifier le user/group (bind:bind) et vérifier les permissions sur les fichiers créés : 644 -rw-r–r– sur la clé publique, 600 -rw——- sur la clé privée

3 - Configurer bind

Dans le fichier de conf général /etc/bind/named.conf.options rajouter dans la section options {} :

key-directory "/var/cache/bind/keys";

Dans le fichier de conf de la zone :

zone "domaine.org" in {
        type master;
        file "domaine.org.named";

        // Rajouter ça :
        auto-dnssec maintain;
        dnssec-loadkeys-interval 720;
        inline-signing yes;

        };
  • auto-dnssec maintain : Permet a bind de s'occuper des enregistrements DS à votre place
  • dnssec-loadkeys-interval : Fréquence de rafraîchissement (en minutes) des signatures
  • inline-signing : Signer les zones non signées

4 - Informer votre registrar de votre KSK

Il faut aller coller la clé publique dans l'interface de votre registrar, afin que la chaîne soit OK sur le domaine parent (.org dans ce tuto)

Ici avec Gandi par exemple :

Ensuite, il vaut mieux attendre que cette clé soit prise en compte chez le registrar, ça peut prendre 12h à 48h. Sinon, le domaine tout entier serait inaccessible faute de validation complète…

A priori, il n'est pas obligatoire ni nécessaire d'informer le registrar de la ZSK, vu qu'elle change souvent… J'ai pas encore bien compris pourquoi

5 - Redémarrer bind

systemctl reload named.service

Et vérifier que les 2 clés sont présentes, en local, et depuis l'extérieur :

dig +short DNSKEY domaine.org
dig +short DNSKEY domaine.org @8.8.8.8

Faire tourner les clés DNSSEC

Changer la clé KSK

1 - Générer la nouvelle clé au même endroit sans effacer l'ancienne

dnssec-keygen -a ECDSAP256SHA256 -n ZONE domaine.org

2 - Informer le registrar de la nouvelle clé, la aussi sans effacer l'ancienne !

3 - Redémarrer bind

Ca ne devrait pas casser le domaine, car l'ancienne clé est déjà valide.

Vérifier que vous avez bien la ZSK (256) + les 2 KSK (257) dans votre domaine en local :

dig +short DNSKEY domaine.org

257 3 13 HshZ2omhpt8xW+nsLtybcdnlrfdYSHAR/xGpA3+yFyt/fWA8/p7c5gXw fgEsyiTblSH4jddEu8mch2osTsOT4Q==
257 3 13 quL7deWtZvN9wvRSkpwRRiqquCAaG3viBTIHr1lZnK43FUO8FFmwr1ur EN/zj2IOSsYfmjfNM287/VNlSYNA2g==
256 3 13 gB6NZI6jveNDBqA+jXCvitAT7eu45ftV4Y6cJLDjTNsg4Wcd8vOrHJQ+ NfvkF3kkuLIhA3lvp2TtLSGtGuE81A==

4 - Laisser mariner pour la propagation, durant 48h au moins

Je conseille l'excellent : https://dnsviz.net/
mais aussi : https://dnssec-analyzer.verisignlabs.com

et vérifier que tout aille bien dans le monde :

dig +short DNSKEY domaine.org @8.8.8.8

5 - Retirer les fichiers de l'ancienne clé de votre répertoire...

Ca ne devrait pas casser le domaine, car la nouvelle clé devrait maintenant être valide et propagée au(x) serveur(s) secondaire(s).

…et redémarrer bind une dernière fois ===

6 - Laisser encore mariner pour 24 à 48h

7 - Retirer l'ancienne clé chez votre registrar

it/linux-selfhosting/bind/dnssec.txt · Dernière modification : 29 Mar 2023 :: 13:25 de CgX