Bind 9/DNSSEC

De Bricosoft.

(Redirigé depuis Bind9/DNSSEC)

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

Sommaire

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)

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

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

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

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) :

# 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=

88.191.136.86

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

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

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 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.

blog comments powered by Disqus

Outils personnels
Plus