DNSSEC : Mise en place facile pour un concept compliqué

Depuis plusieurs mois/années, j’étais tenté par la mise en place de DNSSEC mais à mainte fois stoppé par de multiples publications indiquant une forte complexité à mettre en place ce mécanisme.

Après avoir mis en place une nouvelle paire de serveurs DNS il y a quelques mois, je me suis cette fois attaqué à DNSSEC et finalement, ce n’est pas si compliqué (bien au contraire)

DNSSEC : Qu’est-ce que c’est ?

DNSSEC est un standard permettant une validation cryptographique de l’ensemble de la chaîne DNS allant de la racine au serveur DNS final. De ce fait, si n’importe quel intermédiaire est défaillant (en raison de cache poisoning par exemple), il est possible de le détecter et de se protéger d’une éventuelle attaque de type Man in the middle.

Mise en place : l’environnement

L’environnement de mise en place consiste en une paire de serveurs dns Powerdns-server (3.4) utilisant un backend mysql. La synchronisation des 2 serveurs s’effectuant directement au niveau de mysql (master-master). L’exemple de mise en place est fait sur le domaine cholletk.me. La zone racine (.me) est importante : le tld doit supporter DNSSEC afin que la chaîne de validation soit complète.

Concrètement ?

Concrètement, la mise en place se fait de manière relativement simple :

Prérequis :

Sur votre setup standard pdns-server / mysql (article sur ce setup à venir) , vous devez disposer de la table cryptokeys disponible dans le « Default Schema » fourni par pdns : https://doc.powerdns.com/md/authoritative/backend-generic-mysql/.

Si vous utilisez votre base mysql en master-slave ou master-master, votre binlog_format doit être défini à mixed ou row.

Modification de la configuration pdns :

Éditez le fichier /etc/pdns/pdns.conf et ajoutez la ligne suivante :

gmysql-dnssec=yes

Ceci permet d’activer le backend dnssec mysql au niveau de powerdns.

Votre instance pdns est maintenant prête et compatible DNSSEC. Simple non ?

Activation sur le premier domaine :

L’activation de DNSSEC sur un domaine se faite de la manière suivante :

pdnssec secure-zone domain.tld

Une fois fait, vous pouvez afficher les différentes informations du domaine de la manière suivante :

pdnssec show-zone domain.tld

Le résultat sera quelque chose de similaire à cela :

Zone is not presigned
Zone has NSEC semantics
keys: 
ID = 1 (KSK), tag = 65371, algo = 8, bits = 2048 Active: 1 ( RSASHA256 ) 
KSK DNSKEY = domain.tld IN DNSKEY 257 3 8 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ; ( RSASHA256 )
DS = domain.tld IN DS 65371 8 1 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ; ( SHA1 digest )
DS = domain.tld IN DS 65371 8 2 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ; ( SHA256 digest )
DS = domain.tld IN DS 65371 8 4 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ; ( SHA-384 digest )

ID = 2 (ZSK), tag = 27855, algo = 8, bits = 1024 Active: 1 ( RSASHA256 )

Vous allez avoir besoin de ces informations afin d’activer DNSSEC chez votre registrar. Ce dernier doit très certainement vous mettre à disposition une interface permettant de mettre en place dnssec. Ceci nécessite d’interpréter quelque peut le résultat de la commande show-zone et de comprendre un vocabulaire peu familier. A savoir :

  • Les DS records sont les lignes commençant par « DS » (il peut y en avoir plus ou moins que dans notre exemple). Chaque DS record possède 3 éléments :
    • La clé : 65371 dans notre exemple
    • Le type : chiffre venant juste avant les x de notre exemple
    • Le « digest » : Ce que j’ai remplacé par des x
  • Le champ « flags » : Sur la ligne « KSK », il s’agit du premier chiffre après « IN DNSKEY »
  • Le champ « protocol »: Sur la ligne « KSK », il s’agit du second chiffre après « IN DNSKEY »
  • Le champ « algo »: Sur la ligne « KSK », il s’agit du troisième chiffre après « IN DNSKEY »
  • Le champ « pubKey »: Sur la ligne « KSK », il s’agit du de la chaîne remplacée ici par des x.

Validation

Plusieurs méthode de validation sont possibles : personnellement j’utilise le plugin https://www.dnssec-validator.cz/ . Par ailleurs, pour du debug, l’outil fournit par verisign est très pratique : http://dnssec-debugger.verisignlabs.com/

Pour aller plus loin, je peux vous recommander l’utilisation de TLSA. Je reviendrai sur ce sujet dans un prochain article.

One Reply to “DNSSEC : Mise en place facile pour un concept compliqué”

  1. […] Le DNSSEC est un mécanisme permettant de valider que la résolution dns soit effectuée de manière légitime. Un article précédent explique le concept et sa mise en place dans certains contextes. […]

Répondre à E-voting : Une tempête dans un verre d’eau – Kevin Chollet's blog Annuler la réponse