dimanche 8 avril 2012

Passage d'une zone en DNSSEC avec BIND et Gentoo

DNSSEC c'est le bien. Il a le potentiel de protéger vos communications bien mieux que le fiasco anarchique et surévalué des autorités de certification actuelles.

Or jusqu'à il y a peu de temps, Gandi offre enfin la possibilité d'annoncer ses clefs en amont, et d'avoir ainsi "the real thing". Ce n'est pas trop compliqué a faire.

D'abord, vérifier que net-dns/bind et net-dns/bind-tools sont a jour. (9.7 était problématique chez moi)

Créer un répertoire pour les clefs, puis générer deux clefs pour chaque zone (une ZSK et une KSK):

mkdir /etc/bind/keys
dnssec-keygen -K /etc/bind/keys -a RSASHA256 -b 2048 -f KSK xolus.net
dnssec-keygen -K /etc/bind/keys -a RSASHA256 -b 2048 xolus.net

On se retrouve avec quatre nouveaux fichiers, les parties privées (.private) et publiques (.key) de la ZSK et de la KSK. Les fichiers .key sont au format standard RR de BIND. La KSK est celle ayant un enregistrement de type DNSKEY 257.

On ajoute les deux clefs à la zone:

cat /etc/bind/keys/Kxolus.net*.key >>/etc/bind/pri/xolus.net.zone

Par la suite, et a chaque modification de la zone, il faudra la resigner avec

cd /etc/bind
dnssec-signzone -K keys -o xolus.net pri/xolus.net.zone

Ceci crée un nouveau fichier de zone, xolus.net.zone.signed, qui inclut une signature pour chaque record de la zone. Reste a éditer /etc/bind/named.conf pour utiliser le fichier ".signed" à la place. On recharge ensuite BIND avec
rndc reload

puis on valide la signature d'une entrée au hasard, avec dig:

dig +sigchase +trusted-key=<(grep -v ';' /etc/bind/keys/Kxolus.net.+008+28711.key) -t aaaa xolus.net
Ici on a utilisé la KSK comme racine de confiance. dig est pénible et s'étrangle sur les commentaires placés par défaut dans les fichiers par dnssec-keygen. Si cela fonctionne, vous pouvez maintenant envoyer votre KSK à votre registrar qui se chargera d'ajouterles DS correspondants à la zone. Pour la vraie vérification, commençons par récupérer la clef racine:
dig -t DNSKEY . |grep " 257 " >>/etc/trusted-key.key
Cette récupération est insécure, mais vous pouvez vérifier que la clef correspond à
.                       IN      DNSKEY  257 3 8 AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF FVQUTf6v58fLjwBd0YI0Ez
rAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoX bfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaD X6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpz W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relS Qageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq QxA+Uk1ihz0=
Au demeurant, elle devrait déja être présente en dur dans /etc/bind/bind.keys, alors vérifiez que ça correspond. Une fois la clef racine dans /etc/trusted-key.key, un
dig +sigchase -t AAAA xolus.net
Devrait réussir si la validation en amont a fonctionné. La zone est maintenant DNSSEC-enabled. Reste maintenant a activer DNSSEC du côté du resolver local. Avec BIND on ajoute simplement
dnssec-validation auto;

dans named.conf.

Reste encore a couvrir les zones dynamiques, et le mécanisme d'auto-signature intégré a BIND.