Security
Difficulte: Advanced
4 min de lecture

DNSSEC : Sécuriser les requêtes DNS avec BIND

Tutoriel pour installer et configurer DNSSEC avec BIND sur Linux pour sécuriser votre infrastructure DNS contre les attaques de type cache poisoning.

Retour aux tutoriels
Qu'est-ce que DNSSEC ?
DNSSEC (Domain Name System Security Extensions) est une technologie qui renforce l'authentification dans le DNS en utilisant des signatures numériques. Il permet à un client DNS de vérifier que les réponses qu'il reçoit d'un serveur DNS sont authentiques et n'ont pas été altérées. Il ne chiffre pas les requêtes, mais garantit leur intégrité.

Pourquoi utiliser DNSSEC ?

Le DNS a été conçu sans sécurité. Un attaquant peut intercepter une requête DNS et renvoyer une fausse adresse IP, redirigeant un utilisateur vers un site malveillant. C'est ce qu'on appelle l'empoisonnement de cache DNS (cache poisoning). DNSSEC empêche ce type d'attaque.

Prérequis

  • Un serveur DNS BIND9 fonctionnel, maître pour une zone (ex: `example.com`).
  • Accès root ou privilèges sudo.
  • Votre registrar de nom de domaine doit supporter DNSSEC pour pouvoir publier vos clés.

Le fonctionnement en bref

DNSSEC repose sur une chaîne de confiance basée sur la cryptographie asymétrique.

  1. ZSK (Zone Signing Key) : Une clé qui signe tous les enregistrements de votre zone (A, MX, CNAME, etc.).
  2. KSK (Key Signing Key) : Une clé plus robuste qui signe uniquement la ZSK.
  3. Enregistrement DS (Delegation Signer) : Une empreinte (hash) de votre KSK que vous publiez chez votre registrar. C'est ce qui permet de lier votre zone à la chaîne de confiance globale du DNS.

Configuration avec BIND9

Étape 1 : Activer DNSSEC dans BIND

Modifiez votre fichier de configuration named.conf.options :

sudo nano /etc/bind/named.conf.options

Assurez-vous que les options suivantes sont présentes :

options {
    // ... autres options
    dnssec-validation auto;
    listen-on-v6 { any; };
};

Activez la signature en ligne pour votre zone dans named.conf.local :

sudo nano /etc/bind/named.conf.local
zone "example.com" {
    type master;
    file "/etc/bind/db.example.com";
    // Activer la maintenance automatique de la signature
    inline-signing yes;
    auto-dnssec maintain;
    key-directory "/etc/bind/keys"; // Spécifier un répertoire pour les clés
};
# Créez le répertoire pour les clés
sudo mkdir /etc/bind/keys
sudo chown bind:bind /etc/bind/keys
sudo systemctl restart bind9

Étape 2 : Générer les clés

Grâce à la configuration `auto-dnssec maintain`, BIND va générer les clés automatiquement ! Après le redémarrage, vérifiez le répertoire des clés :

sudo ls -l /etc/bind/keys

Vous devriez y trouver plusieurs fichiers `Kexample.com.+...key` et `Kexample.com.+...private`.

Étape 3 : Récupérer l'enregistrement DS

Les clés ont été générées et la zone est maintenant signée en mémoire. Nous devons récupérer l'enregistrement DS à fournir à notre registrar.

# Chercher les enregistrements DS pour la KSK (Key Signing Key)
grep -r "KSK" /var/log/syslog | grep "DNSKEY"
# Ou utilisez un outil comme dnssec-dsfromkey
sudo dnssec-dsfromkey -2 /etc/bind/keys/Kexample.com.+...key

Vous obtiendrez une sortie comme :

example.com. IN DS 31825 8 2 ABCDEFGHIJKLMNOP1234567890

Les informations importantes sont : `31825` (Key Tag), `8` (Algorithme), `2` (Digest Type) et le long hash.

Étape 4 : Publier l'enregistrement DS chez le registrar

Connectez-vous à l'interface de gestion de votre nom de domaine chez votre registrar (OVH, Gandi, GoDaddy, etc.). Cherchez la section "DNSSEC" et copiez-y les 4 valeurs de l'enregistrement DS. La propagation peut prendre de quelques minutes à 24 heures.

Chaîne de confiance établie !
Une fois l'enregistrement DS propagé, votre zone est entièrement sécurisée par DNSSEC.

Vérification

Vous pouvez utiliser des outils en ligne comme `dnssec-analyzer.verisignlabs.com` ou `dnsviz.net` en entrant votre nom de domaine. Ils vous montreront un graphique de la chaîne de confiance.

En ligne de commande, utilisez `dig` :

# +dnssec demande les enregistrements de signature (RRSIG)
dig +dnssec www.example.com @localhost

# Le flag "ad" (Authenticated Data) dans la réponse indique que la validation a réussi
dig +dnssec www.example.com @8.8.8.8

Si vous voyez le flag `ad` dans les en-têtes de la réponse, cela signifie que le résolveur a pu valider votre signature DNSSEC avec succès.

Maintenance des clés
Avec la configuration `auto-dnssec maintain`, BIND gérera automatiquement la rotation des clés ZSK. Cependant, vous devrez intervenir manuellement pour la rotation des clés KSK, car cela implique une nouvelle publication de l'enregistrement DS chez votre registrar. Cette opération se fait généralement tous les 1 à 2 ans.

Conclusion

DNSSEC est une technologie complexe mais essentielle pour sécuriser le DNS. Grâce aux fonctionnalités modernes de BIND9 comme la signature en ligne et la maintenance automatique, sa mise en place est devenue beaucoup plus accessible. En sécurisant votre zone, vous protégez vos utilisateurs contre les attaques de type "man-in-the-middle" et renforcez la confiance dans votre nom de domaine.