Bind 9/DNSSEC

De bricosoft
(Redirigé depuis Bind9/DNSSEC)
Aller à la navigation Aller à la recherche

La mise en œuvre *artisanale* de DNSSEC avec le serveur de nom Bind en version 9 est décrite dans ce tutoriel.

<google uid="C06" position="right"></google>

Installation manuelle

L'installation manuelle, mais somme toute assez intellectuelle, se déroule comme suit :

  1. vérifier l'installation de Bind pour DNSSEC
  2. Générer les clés ZSK et KSK
  3. Ajouter ces clés dans le fichier de la zone
  4. Signer la zone
  5. Mise en production : modifier la configuration pour prendre en compte le fichier de zone signé
  6. Recharger la zone
  7. Clés au registre (via registrar)
  8. Vérifier le résultat
  9. Aller plus loin : roulement des clés

1. Bind et DNSSEC

Avant toute chose, prenez pleine conscience de ce qui vous attends : vous allez transformer votre zoli fichier de zone, de ça :


vers ça (et encore j'en ai enlevé) :

Ce format de fichier de zone est expliqué dans la RFC 1035 (Noms de domaines – mise en œuvre et spécification, ++ ou en anglais Domain names - Implementation and specification)

Erreur dans le widget Twitter Search: unable to write file /home/gbp4dt5/zones/bricosoft.com/www/extensions/Widgets/compiled_templates/wrt6938899a231e88_52366618

Vérifiez votre version de Bind :

$ named -v
BIND 9.8.0

$ sudo -s

Puis si chroot :

# cd /var/named/run-root/etc/bind/

ou en install de base :

# cd /etc/bind/ ou /etc/named/
# vim named.conf

ou

# vim named.conf.options

Dans la section options {...} rajoutez dnssec-enable yes; : options {

       directory "/var/cache/bind";
       pid-file "/var/run/named/named.pid";
       recursion no;
       auth-nxdomain no;    # conform to RFC1035
       // listen-on-v6 { any; };
//      version "quedalle";
       allow-transfer {"none";};
       check-names master warn;
       dnssec-enable yes;

};

N'oubliez pas vos outils (dnssec-signzone, drill, faire-le-café, etc) :

$ sudo apt-get install dnssec-tools ldnsutils

2. Les clés pour signer la zone et les enregistrements

Voici les types de clés :

  • Zone Signed Key (ZSK) pour signer la zone izz.se. par exemple
  • Key Signed Key (KSK) pour signer des enregistrements comme www.izz.se par exemple.

Ces clés n'ont pas de date d'expiration, et peuvent être utilisées ad nauseam. Comme tout jeu de clés publique/privée, la partie privée doit être sauvegardée et gardée secretement.

La Zone Signed Key, ZSK

# mkdir /var/named/run-root/var/named/zsk
# dnssec-keygen -r /dev/urandom -a RSASHA1 -b 1024 -n ZONE izz.se
Generating key pair..................++++++ .................++++++ 
Kizz.se.+005+36450

Avec explicitement :

  • -b 1024 : la taille de la clé en bits
  • -n ZONE izz.se : à quoi est destinée la clé, ici une zone. Cela peut-être aussi un HOST, un USER ou OTHER.

Et implicitement :

zsk# ls -1
Kizz.se.+005+36450.key
Kizz.se.+005+36450.private

La Key Signed Key, KSK

# mkdir /var/named/run-root/var/named/ksk

# dnssec-keygen -r /dev/urandom -a RSASHA1 -b 4096 -n ZONE -f KSK izz.se
Generating key pair.........................................................................................................................++ ..............................................................................................................................................................................................................++ 
Kizz.se.+005+13612

ksk# ls -1
Kizz.se.+005+13612.key
Kizz.se.+005+13612.private

Avec explicitement :

  • -b 4096 : la taille de la clé en bits
  • -f KSK : le type

La CSK

en cours de rédaction, mais si vous avez générer la KSK et ZSK vous avec assez de clés, passez à l'étape suivante : l'ajout dans la zone

La DSK

La DSK est une clé permettant de pénétrer dans tous les Sofitel.

3. Ajout dans la zone

Vous allez voir ça va être la zone dans votre fichier de zone :(

La ZSK :

# cd /var/named/run-root/var/named/zsk
# cat /var/named/run-root/var/named/zsk/Kizz.se.*.key >> /var/named/run-root/var/named/primary/db.izz.se 

La KSK :

# /var/named/run-root/var/named/ksk
# cat /var/named/run-root/var/named/ksk/Kizz.se.*.key >> /var/named/run-root/var/named/primary/db.izz.se 

Vérifions :

# cat /var/named/run-root/var/named/primary/db.izz.se
$TTL  	2D	
@       IN      SOA     a.izz.se. root.osef.be. (
                      	2010012901      ; Serial
                       24H		; Refresh
                       2H		; Retry
                      	1W		; Expire
                       2D	)       ; Negative Cache TTL
@       IN      NS      a.izz.se.
@       IN      NS      b.13h.be.
@       IN      MX      10      mail.izz.se.
izz.se.	IN      A       92.243.27.3
www             CNAME   izz.se.
a	IN	A	92.243.1.170
; This is a zone-signing key, keyid 36450, for izz.se.
; Created: Thu Feb 10 15:39:46 2011
; Publish: Thu Feb 10 15:39:46 2011
; Activate: Thu Feb 10 15:39:46 2011
izz.se. IN DNSKEY 256 3 5 AwEAAc....6ZsEx
; This is a key-signing key, keyid 13612, for izz.se.
; Created: Thu Feb 10 15:43:27 2011
; Publish: Thu Feb 10 15:43:27 2011
; Activate: Thu Feb 10 15:43:27 2011
izz.se. IN DNSKEY 257 3 5 AwEAAb...........KsUnz

Vous avez remarqué que la KSK est plus grosse (normal -b 4096 à la génération).

On relance le serveur... que Bind pas votre dédié ~~:(

# ps fauxwww | grep bind
bind     31337  0.0  2.5   9580  6564 ?        Ss    2010   0:07 /usr/local/sbin/named -u bind -t /var/named/run-root -c /etc/bind/named.conf
# kill -HUP 31337

ou plus concis :

# kill -HUP `cat /var/run/named/named.pid`

ou en chroot :

# kill -HUP `cat /var/named/run-root/var/run/named/named.pid`

ou encore :

# pidof named

Ou rechargez en douceur la zone sans avoir oublié d'incrémenter le serial.

check yourself before you wreck yourself

tu checkes si les clés sont déclarées Soit en local sur ton primaire :

$ dig DNSKEY izz.se @localhost

Soit ailleurs sur grosternet (ici ns1.ton-primaire.be est le FQDN de ton primaire) :

$ dig DNSKEY izz.se @ns1.ton-primaire.be
 ;; Truncated, retrying in TCP mode.

 ; <<>> DiG 9.5.1-P2.1 <<>> DNSKEY izz.se @a.izz.se
 ;; global options:  printcmd
 ;; Got answer:
 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64399
 ;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0
 ;; WARNING: recursion requested but not available

 ;; QUESTION SECTION:
 ;izz.se.				IN	DNSKEY

 ;; ANSWER SECTION:
 izz.se.			172800	IN	DNSKEY	257 3 5 AwEAAb......sUnz
 izz.se.			172800	IN	DNSKEY	256 3 5 AwEAAc...ZsEx
 (je vous ai épargné les clés pour vos beaux yeux).

 ;; Query time: 27 msec
 ;; SERVER: 92.243.1.170#53(92.243.1.170)
 ;; WHEN: Thu Feb 10 16:55:32 2011
 ;; MSG SIZE  rcvd: 704


Liste des algos utilisés

Pour info, voici la liste des algos utilisés, tu t'endormiras moins con ce soir, ma couille.

Numéro d' algorithme DNSSEC [1]
Num. Description Mnémonique Sign. zone Transaction Réf.
0 RFC4034
1 RSA/MD5 (déprécié) RSAMD5 N O RFC4034 RFC2537
2 Diffie-Hellman DH N O RFC2539
3 DSA/SHA1 DSA O O RFC3755RFC2536
4 Réservé crypto courbes elliptiques ECC
5 RSA/SHA-1 RSASHA1 O O RFC3755RFC3110
6 DSA-NSEC3-SHA1 DSA-NSEC3-SHA1 O O RFC5155
7 RSASHA1-NSEC3-SHA1 RSASHA1-NSEC3-SHA1 O O RFC5155
8 RSA/SHA-256 RSASHA256 O * RFC5702
9 non assigné
10 RSA/SHA-512 RSASHA512 O * RFC5702
11 non assigné
12 GOST R 34.10-2001 ECC-GOST O * RFC5933
13-122 non assigné
123-251 Réservé RFC6014
252 Réservé Indirect INDIRECT N N RFC4034
253 Algos particuliers - nom de domaine PRIVATEDNS O O RFC3755RFC2535
254 Algos particuliers OID PRIVATEOID O O RFC3755RFC2535
255 Réservé RFC4034

4. Signer la zone

<google uid="C08" position="right"></google>

Il nous faut un endroit pour créer nos fichiers de zone signé :

# mkdir /var/named/run-root/var/named/set

signature de izz.se :

Pour simplifier :

# dnssec-signzone -o lazone.tld -k la_KSK le_fichier_zone_bind la_ZSK

Pour moins-simplifier :

# dnssec-signzone -o lazone.tld -k /var/named/ksk/Klazone.tld.key /var/named/zones/db.lazone.tld /var/named/zsk/Klazone.tld.key

Pour complexifier :

# dnssec-signzone -o izz.se -k /var/named/run-root/var/named/ksk/Kizz.se.*.key /var/named/run-root/var/named/primary/db.izz.se /var/named/run-root/var/named/zsk/Kizz.se.*.key 
Verifying the zone using the following algorithms: RSASHA1.
Zone signing complete:
Algorithm: RSASHA1: KSKs: 1 active, 0 stand-by, 0 revoked
                    ZSKs: 1 active, 0 stand-by, 0 revoked
/var/named/run-root/var/named/primary/db.izz.se.signed

Avec explicitement :

  • -o : la zone d'origine
  • -k : la KSK
  • le fichier de zone comme premier paramètre
  • la ZSK comme deuxième paramètre

Et implicitement :

  • -e 2592000 : end-time est la date d'expiration de la RRSIG générée. Par défaut c'est 30 jours (2592000 secondes). Si vous n'êtes pas une banque augmentez cette valeur (cf Faut-il remplacer régulièrement les clés DNSSEC ?). Exemple : -e now+15768000 pour 6 mois à partir de maintenant.

Exemple avec bricosoft.com (signé pour 6 mois) :

# dnssec-signzone -o bricosoft.com -e now+15768000 -k /var/named/run-root/var/named/ksk/Kbricosoft.com.+005+28333.key /var/named/run-root/var/named/primary/db.bricosoft.com /var/named/run-root/var/named/zsk/Kbricosoft.com.+005+55365.key

Un fichier avec les enregistrements DS est créée. On va le consulter plus tard pour renseigner la zone parente (.se ici) :

# pwd

/var/named/run-root/var/named/set

# ls -1
dsset-izz.se.

Le fichier de zone signée (c'est la zone qui est signée) :

Fichier:Masterlockpadlock.jpg
# cat /var/named/run-root/var/named/primary/db.izz.se.signed; File written on Thu Feb 10 16:30:17 2011
 ; dnssec_signzone version 9.7.0
 izz.se.			172800	IN SOA	a.izz.se. root.izz.se. (
					2011021001 ; serial
					86400      ; refresh (1 day)
					7200       ; retry (2 hours)
					604800     ; expire (1 week)
					172800     ; minimum (2 days)
					)
			172800	RRSIG	SOA 5 2 172800 20110312153017 (
					20110210153017 36450 izz.se.
					BEnImgzNxLfW40pRoKMvipQpbs0me4EivCZp
                                        ...
					RcFVQQVz1ADX8mAApxecDg7GMT8= )
			172800	NS	a.izz.se.
			172800	NS	b.13h.be.
			172800	RRSIG	NS 5 2 172800 20110312153017 (
					20110210153017 36450 izz.se.
					FNTCU4+MNOpNAxiX9N9rWcOAFVLGkn6wqRDr
                                        ...
					3mjn6ipD+roSsXVM0uqT1ZeaP0g= )
			172800	A	92.243.27.3
			172800	RRSIG	A 5 2 172800 20110312153017 (
					20110210153017 36450 izz.se.
					cUBv7nkqG1BkwZhCqG5vVyDnC9lA7OirJP6s
                                        ...
					qDCHegwecZSr3/4ANuTjw50bwM4= )
			172800	NSEC	a.izz.se. A NS SOA RRSIG NSEC DNSKEY
			172800	RRSIG	NSEC 5 2 172800 20110312153017 (
					20110210153017 36450 izz.se.
					WVrveAUCIQgDWmuy873VZ8FNSOBMpVh/S2zC
                                        ...
					E9kliSTn/ZabdFhFziCtmF6o9pY= )
			172800	DNSKEY	256 3 5 (
					AwEAAcUvzMr7r8hmL9mJtPAQX61gI5Ld4XFS
                                        ...
					fDfpvfWhtHEhsSi+ATNDjsi87/M6ZsEx
					) ; key id = 36450
			172800	DNSKEY	257 3 5 (
					AwEAAb4hC8+Cm1EJdskDun6dPwKX3B5IZ+Lg
                                        ...
					sUnz
					) ; key id = 13612
			172800	RRSIG	DNSKEY 5 2 172800 20110312153017 (
					20110210153017 13612 izz.se.
					D3qNICYYTEc7V6nScOQuy/0KuiM6qfG3FVRq
                                        ...
					Q0KKtB3lHyr8U9VkO2PdYhysKHhKXqOB500= )
			172800	RRSIG	DNSKEY 5 2 172800 20110312153017 (
					20110210153017 36450 izz.se.
					bX1rLpB5TwCuDGN7lxG9RbG8pTT0R3fkpK5h
                                        ...
					6arMg2EgTdrIsm/JQi2eXUR8NOs= )
www.izz.se.		172800	IN CNAME izz.se.
			172800	RRSIG	CNAME 5 3 172800 20110312153017 (
					20110210153017 36450 izz.se.
					lmV/IO7gdu5zd/jqqw+T7pf21/efzRZhS2vj
                                        ...
					7qyyHsSwqQFAudDyP4dnI1LjGuo= )
			172800	NSEC	izz.se. CNAME RRSIG NSEC
			172800	RRSIG	NSEC 5 3 172800 20110312153017 (
					20110210153017 36450 izz.se.
					sHJ+Q5XDPDdqKZTPCFgrM0qG6Bii3UYv0GX/
                                        ...
					2wxtJUpxbXeafgLu07VVUDCoPQA= )

On vérifie l'expiration des enregistrement signés :

$ dig axfr +short @localhost bricosoft.com
...
DNSKEY 5 2 172800 20111017005511 20110417115511 55365 bricosoft.com. acTnfKc/7mk0NUQUzmk5OGPPHM9R3KAZgn6N02HeoAZw8m/2IsgNDn9R r68TpSdpKhlMPwOSI5C5uoZp+3573zJkIQsjpefvlPWriXhmrJyd1GQ9 ToYFCRcPWqjuHVR3uKtk50UkZaLgA32k6ihLrSN9zRkKoxVia+ulCVDo BZY=

Signé le 17 avril(2011 04 17), expire le 17 octobre(2011 10 17), RAS ça fait bien 6 mois.

troubleshootings / erreurs

no self signed KSK found

Ah ah, a priori vous avez mal généré votre KSK, avez bien mis le bon flag lors de la génération ? :

-f KSK 

Vérifiez le type de clé dans le fichier de zone, ce doit être différent :

$ cat named/primary/zones/db.bricosoft.com |grep "key"
; This is a zone-signing key, keyid 14760, for bricosoft.com.
; This is a key-signing key, keyid 36946, for bricosoft.com.

Ou en creusant :

$ dig +short -t DNSKEY @ns1.mondns.fr bricosoft.com
;; Truncated, retrying in TCP mode.
257 3 5 AwEAAdgOSN3Hb9/ebBiKWFpeO3V254OS8xxy4vmGxYTqL3opqnNMSKhQ 1by3gBBvJ19lK+x6rNLoJ4BX7OOw0iUu/71wcL9wl5k09P2oJxLcJtJD kGNUk/joiBGfhg4h3NLvu00cJX7VpqLIvdoojmq5N54hcGsvsJkf33th trx7LCGYsUi66zE5nC6PsNZhPnrORiYfGegWmjr8D3NooHkWz+wGbV/Bl wBcsap7tz0RjgsAH/AYxTiTpvEqV5i5L6SFq1FNtcRWNDqJABrNB2o9u Q3Y3/ui2sYmNlF1pLvsUi66zE5nC6PsNZhPnrORiYfGegWmjr8DJD4Wo cD8kE/rVsMfgX1Iu2vuhVWlstLXOQPVr20Luu+n89R5tL2g/5sfNayN0 GGfRjUCrBkSnoVr1GYgPYLnfydpzzcHi2wejaZX1mMTOMvnVoPJ623tJ ce8fRVrXgIExDBjAOkA6ykwSnYyPPoxv2aFFZ8Fldg2uKGDRx2mxUqVg Xl/j/cP3TKqRcLQH6k6XuCzzC/4RdhDtFEoRVsfdjzgAlw1mXQ0UPCeG oZR0i2zk2kf7WYi375At1KP94negBKosrE/LFzZzAWcR/bCiAHSdBLPW DMwx9qztlXShpGXDbgvCnO04/cLvZzjCbth+sqTE15bf+6oe0trDeZgk cfqZbgTnh+pDqjon
256 3 5 AwEAAbYLsUi66zE5nC6PsNZhPnrORiYfGegWmjr8Dgu8U0t3A47fgPA14dvGmIUw xw1acVfRUy+U7qcbklFMCCPG9vkfzFryw0/ca7ChJnpWrBHREXelR1Q7 im+7nikhI8ttKatGXn2Ig5jbD2k4Ppbq096R77kbMveGN4kpwXye+8cy 7EeWndhz

Ou alors le fichier n'est pas le bon ou au bon endroit.

5. mise en production

On va modifier named.conf pour qu'il prenne en compte le fichier de zone signé.

# cd /var/named/run-root/etc/bind
# vim primary.conf
 # ajout du 2011-02-10 14:00::00Z
 zone "izz.se" {
        type master;
        notify yes;
        allow-transfer { 2.2.2.2; };
 #        file "/var/named/primary/db.izz.se";
        file "/var/named/primary/db.izz.se.signed";
 };

Ici 2.2.2.2 est l'IP du secondaire.

6. Recharge la zone

Fichier:Vc1ko4.jpg
RELOAD!! RELOAD!!

On relance le serveur... que Bind pas votre dédié ~~:(

# kill -HUP 31337

Vef :

# dig +short izz.se +dnssec @localhost
92.243.27.3
A 5 2 172800 20110312153017 20110210153017 36450 izz.se. cUB...=

Une zone non signée renverrai :

# dig +short mondns.fr +dnssec @localhost
83.75.92.13

A cette étape, la chaîne de confiance n'est pas encore complète, le maillon zone vers zone parente n'est pas chainé (izz.se vers .se).

Manque les DS
$ drill -TD bricosoft.com
Warning: No trusted keys were given. Will not be able to verify authenticity!
;; Domain: .
;; Signature ok but no chain to a trusted key or ds record
[S] . 172800 IN DNSKEY 256 3 8 ;{id = 34525 (zsk), size = 1024b}
. 172800 IN DNSKEY 257 3 8 ;{id = 19036 (ksk), size = 2048b}
Checking if signing key is trusted:
New key: .	172800	IN	DNSKEY	256 3 8  AwEAAcaGQEA+...qlFrXDW3tjt ;{id = 34525 (zsk), size = 1024b}
[S] com. 86400 IN DS 30909 8 2 e2d3c916f6deeac73294e8268fb5885044a833fc5459588f4a9184cfc41a5766 
;; Domain: com.
;; Signature ok but no chain to a trusted key or ds record 
[S] com. 86400 IN DNSKEY 257 3 8 ;{id = 30909 (ksk), size = 2048b}
com. 86400 IN DNSKEY 256 3 8 ;{id = 1793 (zsk), size = 1024b}
com. 86400 IN DNSKEY 256 3 8 ;{id = 36713 (zsk), size = 1024b}
;; No DS for bricosoft.com.;; No ds record for delegation
;; Domain: bricosoft.com.
;; No DNSKEY record found for bricosoft.com.
[U] bricosoft.com.	172800	IN	A	92.243.27.3
;;[S] self sig OK; [B] bogus; [T] trusted

7. Clés au registre (via registrar)

Après avoir signé la zone, les choses se compliquent car il faut envoyer la clé publique au registre, pour qu'il ajoute les enregistrement DS à la zone parent.

Si le registre ne fournit pas ce service, vous pouvez utiliser un serveur tiers avec des enregistrements DLV.

Il est rare que le registre fournissent directement une interface ou API pour un registrant mais délègue plutôt(l'ami de Mickey) ça aux registrars.

La liste des TLD + registrars qui fournissent une interface sont sur cette page : DNSSEC#Liste_TLD_:_registrars_qui_gèrent_DNSSEC


# pwd
/var/named/run-root/var/named/set
set# cat dsset-bricosoft.org. 
bricosoft.org.		IN DS 26542 5 1 4538264EBA2E08A4E36620AA6758F514D35470C5
bricosoft.org.		IN DS 26542 5 2 9BBB061327A533A00AF42ADFE858722FF0249826CE18339CBC860904 82995A39

Ici :

  • 26542 est le key tag
  • 5 est l'algo de chiffrement (RSA)
  • 1 ou 2
  • le condensat


Pour vérifier :

# dig +short -t DS bricosoft.org
26542 5 1 4538264EBA2E08A4E36620AA6758F514D35470C5
26542 5 2 9BBB061327A533A00AF42ADFE858722FF0249826CE18339CBC860904 82995A39

8. vérifier tout le buzin

CLI

dig

Toute la chaîne avec dig :

$ dig bricosoft.org +dnssec +trace


drill

Avec symptômes grâce à drill :


Ou encore :


Avec la clé :


zonecheck

Avec zonecheck du .fr qui peut donner des conseils(suivant RFC) sur les erreurs :


Non CLI

Pareil mais concis(voire trop), avec des conseils(souvent les zonechecks des TLDs) et des zigouigouis(dnsviz.net) (attention certains outils ont tendances à cacher vos résultats, pensez à mettre-à-jour) :

9. pour aller plus loin : roulement des clés

Dépannage

Avant tout, avez-vous bien mis à jour le serial ?

Liens

Retourner à Bind9.

Erreur dans le widget DISQUS: Unable to load template 'wiki:DISQUS'