réf : http://guides.ovh.com/dnssec http://ensiwiki.ensimag.fr/index.php/Introduction_%C3%A0_DNSSEC http://reseau.ciril.fr/wikidoc/Services/DNS https://2009.jres.org/planning_files/summary/html/5.htm Le but est de migrer, puis de maintenir, la zone univ.fr dans Bind sous DNSSec. DNSSec est largement documenté dans la littérature du web, on ne va donc pas reprendre les principes ici mais plutôt s'attacher à son déploiement avec Bind pour une zone existante, le tout avec des clés asymétriques. Quelques rappels de terminologie et pré-requisZSK (Zone Signing Key) : clés (publiques et privées) servant à signer les champs de la zone. Ces clés sont inconnues du registre.KSK (Key Signing Key) : clés utilisées pour signer les clés ZSK. Ces clés sont signées par un champ DS dans la zone mère, gérée par Renater pour nous. DNSKEY : champ contenant une clé publique DS : condensat (hash) d'une DNSKEY, transmis à la zone mère. Avant d'aller plus loin, on vérifie que nos équipements laisseront passer les paquets DNS d'une taille supérieure à 512 octets : # dig +short rs.dns-oarc.net txt rst.x3827.rs.dns-oarc.net. rst.x3837.x3827.rs.dns-oarc.net. rst.x3843.x3837.x3827.rs.dns-oarc.net. "193.54.203.3 DNS reply size limit is at least 3843" "193.54.203.3 sent EDNS buffer size 4096" "Tested at 2012-02-07 09:46:15 UTC" Création de la KSKOn utilise la commande dnssec-keygen livrée par Bind. Cette commande prend un certain temps de traitement, ne pas s'inquiéter.# cd /etc/bind # dnssec-keygen -f KSK -r /dev/urandom -a RSASHA1 -b4096 -n ZONE univ.fr Kuniv.fr.+003+28209 L'option -r /dev/urandom accélère considérablement le temps de génération de la clé sur une machine peu sollicitée (clé non encore générée après 50 minutes sur mon serveur sans urandom !)Pour simplifier les manipulations ultérieures, on renomme les deux fichiers générés : # mv Kuniv.fr.+003+28209.key Kuniv.fr.ksk.key # mv Kuniv.fr.+003+28209.private Kuniv.fr.ksk.private Création de la ZSKOn utilise simplement la même commande dnssec-keygen qui demande aussi un certain temps de traitement :# dnssec-keygen -r /dev/urandom -a RSASHA1 -b4096 -n ZONE univ.fr Kuniv.fr.+003+18973 Comme précédemment, on renomme les fichiers produits : # mv Kuniv.fr.+003+18973.key Kuniv.fr.zsk.key # mv Kuniv.fr.+003+18973.private Kuniv.fr.zsk.private Insertion des clés dans la zoneOn édite le fichier de zone db.univ.fr auquel on ajoute deux inclusions (les clés publiques ZSK et KSK) à la fin. On n'oublie pas au passage d'incrémenter le serial.$ORIGIN univ.fr. $TTL 2D @ IN SOA bind.univ.fr. hostmaster.univ.fr. ( 2012020701 ; Serial 8H ; Refresh every 3 hours 1H ; Retry every hour 1W ; Expire after a week 1D ); Minimum ttl of 1 day IN NS bind.univ.fr. IN NS nsa1.cict.fr. IN MX 10 ASPMX.L.GOOGLE.COM. IN MX 20 ALT1.ASPMX.L.GOOGLE.COM. IN MX 20 ALT2.ASPMX.L.GOOGLE.COM. IN MX 30 ASPMX2.GOOGLEMAIL.COM. IN MX 30 ASPMX3.GOOGLEMAIL.COM. IN MX 30 ASPMX4.GOOGLEMAIL.COM. IN MX 30 ASPMX5.GOOGLEMAIL.COM. sender IN MX 10 relay.univ.fr. sender IN TXT "v=spf1 ip4:193.54.203.130 ?all" IN A 193.54.203.131 truffade IN A 193.54.203.202 aioli IN A 193.54.203.204 name IN A 193.54.203.131 bastion IN A 193.54.203.132 relay IN A 193.54.203.130 frontal-http IN A 193.54.203.133 cache IN A 193.54.203.134 [...] _xmpp-client._tcp.univ.fr. IN SRV 5 0 5222 xmpp-server.l.google.com. _xmpp-client._tcp.univ.fr. IN SRV 20 0 5222 xmpp-server1.l.google.com. _xmpp-client._tcp.univ.fr. IN SRV 20 0 5222 xmpp-server2.l.google.com. _xmpp-client._tcp.univ.fr. IN SRV 20 0 5222 xmpp-server3.l.google.com. _xmpp-client._tcp.univ.fr. IN SRV 20 0 5222 xmpp-server4.l.google.com. $include /etc/bind/Kuniv.fr.zsk.key $include /etc/bind/Kuniv.fr.ksk.key Et on vérifie la cohérence du fichier de zone : # named-checkzone univ.fr db.univ.fr zone univ.fr/IN: loaded serial 2012020701 OK Signature de la zoneMaintenant que nous disposons des clés, nous pouvons signer la zone. Cette opération va produire le fichier de zone signée à partir du fichier de zone standard.La zone devra être resignée à chaque changement (ajout/modification/suppression d'un enregistrement par exemple) Pour ceci, on utilise la commande dnssec-signzone de la forme : dnssec-signzone -z -e YYYYMMDDHHmmss -p -t -g -k fichier_KSK_publique -o nom_zone fichier_zone fichier_ZSK_publique YYYYMMDDHHmmss est la date d'expiration de la signature année, mois, jour, heure, minutes, secondes. -z : impératif au moins une fois pour générer les RRSIG de tous les enregistrements. Le fichier fichier_zone.signed sera alors produit. # dnssec-signzone -z -e 20130101000000 -p -t -g -k Kuniv.fr.ksk.key -o univ.fr db.univ.fr Kuniv.fr.zsk.key db.univ.fr.signed Signatures generated: 176 Signatures retained: 0 Signatures dropped: 0 Signatures successfully verified: 0 Signatures unsuccessfully verified: 0 Runtime in seconds: 0.122 Signatures per second: 1433.645 Configuration de BindOn active dnssec dans Bind par l'option dnssec-enable :# nano named.conf.options options { directory "/var/cache/bind"; auth-nxdomain no; # conform to RFC1035 // allow-query { interne; }; // allow-recursion { interne; }; recursion no; allow-transfer { serveurs_esclave; }; also-notify { 195.220.53.228; }; recursive-clients 4000; version "Tu aurais jamais du essayer de savoir, rascal. Je t'envoie une equipe de tueurs..."; dnssec-enable yes; }; # named-checkconf named.conf.options On déclare enfin la zone signée à la place de la zone standard dans named.conf.local ... type master; allow-query {any;}; notify yes; file "/etc/bind/ db.univ.fr.signed "; }; ... named-checkconf named.conf.local On redémarre bind /etc/init.d/bind9 restart On peut ensuite tester : # dig +cd +multi univ.fr dnskey ;; Truncated, retrying in TCP mode. ; <<>> DiG 9.7.0-P1 <<>> +cd +multi univ.fr dnskey ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19786 ;; flags: qr rd ra cd; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 3 ;; QUESTION SECTION: ;univ.fr. IN DNSKEY ;; ANSWER SECTION: univ.fr. 172800 IN DNSKEY 257 3 3 ( CLM4L1dUW8n6ebezLeg7mRYFU8WP/k3PsoKiaLTmNGZG pNGRIXj4SlXW1//bsihvLUViFR4P7MOGVgctQ1Z/wWAA a+IJd+zGSLNXEcvZc4GVf5v0FncOKd6tiDfboIxUMcQR QQnD2guqTANwQ+Nn06nFfoplRDGS9Uebw43Fbw/trT8n C4hWQFt4Ij5EHD3MZ7vTsRHj2ohgLG/uz1pxJV9FvOIB mbaOU70aXVSgHn0pKxXCb+QaAlVjVhoHHOfzAE3vIAkK xSWOL2cVg3Kh6Wr9I6aj9dV5pEK56K8DkdE2Og3r7QAj qKcQ6Z+xU2KLpbFNJfKOZpIBNJtdF9qxvDt8qXPd7fSO 02BayUQX7pUQBilzRB9wYXx21Igmjhn5PjMFhGP2zGnA DCeZasDr3O1Eg3w3DPLE8owKXKrpG9v3TLC+Z9+foFY+ lYFTeMafpH32AcRJGc9JhPRwNd7PBJf8YlehHD0r8llG NmxptilMhcd74WGYyEzbtUJo1s5nIZGvkzm3jzWHgwxd 9W1OGrjgozML ) ; key id = 28209 univ.fr. 172800 IN DNSKEY 256 3 3 ( CMKrllfULw20EZf3AKWN+PI++/HjmE5SMMKezal75Tqq FmVvcs5BeIXUxHgMaOyvqCS8jB7V92bi6sEYJfFul8pp hbXWvjwSYGjc2lgbg7x/8nUSFGIiWoZAoVA0ij651Kp/ +MlUNiBHElThQDOa+pkpUgBAu03ZM29YbflzQVx1TH4R tWFGTCJtZsYs3xHWc0eebgNzI6US3Fw25Y84XL7FOWQP GILnRPHcls8yBRdjfws6truPCiwlx6GOqrTJlbyL+8Ab fdDA7ZRcQYwOJ2gaZ9e2kfrW0mVMtb7JJBzsAkNajnBr SB/SB+oPN4AINLi7sUmTULsZbO/MNaTLQx32LF5Kwjli 1yjTIjEp1x21hzhXplKz/VM4gCnMCRPK3GaMW2iGl9sW tBEsKqTm42ULMWxbY4x/4iLHDzhUxMhixkYnpd85d8Ky r46RVlJkEP4TejmCRroGkpiLS8jdFmDqKxrVTiFdfCd3 kNvzFXXvlkspEGoyRwL+H8np+FLEM0k6Ac3pIENJJt+H 0omBtFBBw+jU ) ; key id = 18973 ;; AUTHORITY SECTION: univ.fr. 126908 IN NS nsa1.cict.fr. univ.fr. 126908 IN NS bind.univ.fr. ;; ADDITIONAL SECTION: bind.univ.fr. 126908 IN A 193.54.203.131 bind.univ.fr. 126908 IN AAAA 2001:660:6606:2::12 nsa1.cict.fr. 40512 IN A 195.220.53.228 ;; Query time: 1 msec ;; SERVER: 192.168.100.50#53(192.168.100.50) ;; WHEN: Tue Feb 7 14:41:03 2012 ;; MSG SIZE rcvd: 975 Déclaration à la zone mèreUne fois que tout fonctionne, on fait remonter à la zone mère le condensat de la clé KSK afin d'assurer la chaîne de certification depuis .frLe pré-requis, si c'est Renater qui se charge de l'enregistrement (http://www.renater.fr/spip.php?article574), est que notre zone soit validée par le test ZoneCheck de l'AFNIC : http://www.afnic.fr/fr/produits-et-services/services/zonecheck/formulaire-complet/ Attention : si on annonce des adresses IPv6 dans le DNS, l'AFNIC effectuera les tests en IPv6 (s'assurer des routes IPv6 dans ce cas). On récupère les informations de la KSK : cat Kuniv.fr.ksk.key univ.fr. IN DNSKEY 257 3 5 AwEAActk+J9gDHhmYdgWAGAvT4kkYIAKuT75uVThH+UJ9cTTDp+4udaJ
MUDhBglhF8V5ohFgWwv8PPCkkytUewAuttJ2jjtyDEu6EKECVO8fC/ke
IUWp39apk5DIYpZu6X3i4CPpRykq6ne95lS6kQ6/LEqQAZGuN+FoB7LJ
+30D6hst4YDRoAAZdFt3duo8QuMm5DVeQtb1effzfRRfLLz1AtVkIyfJ
wg3FfaBHxQITYYV6Kw2G7AKb4lfR4ftswuu1zRi61nFD4d1BtmLXAkDP
tFbR+p3jCqQp/G5G2WxFBdItg/eWRL5+xNCsPqXyMauwInG1CmVxHvlP
fujENmCzTdfxDoYG5jIHu+qB0gvi8IWpViC18m6aH/IJBiTg+qLBJTCd
t7R0nRrEKD0CiHNXES0MwD5X2K2NQ8GHj4r0W+HnXp0GceLNpv0nsxg6
DsGxe6499IiUHPFx15bCmKpswqGFKnkt23HjdIPzf3AxWHzAxO8FyULf
j38E5y0me/CMv0Y9cK0/Bw3GFRKlNrVvy5IU7fbToZsYBDwYEj9Cece7
tyfIECM1HzM0n7eXds1UPPofzEGP/i1jFkzbAGWXOTGVklhS1tVIdH7i
+JQQu1O6MzXbX0Yr0s8O5GJVGpfsP220OevJas553glfLSinKK0vQfkj
DUF1PazgYaUdHl/J Les informations dont le bureau d'enregistrement aura besoin sont celles-ci :
Cette valeur est complexe à calculer manuellement vue la RFC : http://tools.ietf.org/html/rfc4509 Donc si on dispose d'une version de bind supérieure ou égale 9.6, on utilise simplement la commande dnssec-dsfromkey : # dnssec-dsfromkey -2 Kuniv.fr.ksk.key # apt-get install ldnsutils Kuniv.fr.+005+54703 La valeur du condensat à transmettre est alors : 68acfebcc48c8bc6b6c3cdde29b83e10b84bfcb6c10347c464963a9158308486 |