{{{#!wiki warning
'''Attention'''
Cette page est une ébauche de documentation, qui pour le moment '''N'EST PAS UN MODÈLE À SUIVRE à l'AuF'''.<
>
(avant-tout du fait du non respect des standards Debian) -- [[JeanChristopheAndré|JC]]
}}}
= Environnement de test utilisé =
Pour jouer avec DNSSEC, j'ai créer deux machines virtuelles (virtualbox) et mis en place le réseau suivant:
{{{
Internet
--------
|
|
Ma machine
/ \ 192.168.127.1
/ \
192.168.127.10 / \ 192.168.127.20
ns1.example.com ns1.example.net
}}}
* '''ns1.example.com''': serveur primaire pour le domaine example.com et cache pour le reste
* '''ns1.example.net''': serveur primaire pour le domaine example.net et cache pour le reste
Dans la première partie, on va sécuriser uniquement le domaine example.com. Voici l'histoire:
= Mise en place DNSSEC pour ns1.example.com =
J'installe bind9 et je crée le dossier /etc/bind/keys pour les clés qu'on va créer plus tard:
{{{
nacer@ns1.example.com:~$ sudo aptitude install bind9
nacer@ns1.example.com:~$ cd /etc/bind/
nacer@ns1.example.com:/etc/bind$ sudo mkdir keys
nacer@ns1.example.com:/etc/bind$ ls -l
total 56
-rw-r--r-- 1 root root 2544 16 nov. 20:43 bind.keys
-rw-r--r-- 1 root root 237 16 nov. 20:43 db.0
-rw-r--r-- 1 root root 271 16 nov. 20:43 db.127
-rw-r--r-- 1 root root 237 16 nov. 20:43 db.255
-rw-r--r-- 1 root root 353 16 nov. 20:43 db.empty
-rw-r--r-- 1 root root 270 16 nov. 20:43 db.local
-rw-r--r-- 1 root root 2994 16 nov. 20:43 db.root
drwxr-sr-x 2 root bind 4096 31 janv. 12:53 keys
-rw-r--r-- 1 root bind 463 16 nov. 20:43 named.conf
-rw-r--r-- 1 root bind 490 16 nov. 20:43 named.conf.default-zones
-rw-r--r-- 1 root bind 165 16 nov. 20:43 named.conf.local
-rw-r--r-- 1 root bind 572 16 nov. 20:43 named.conf.options
-rw-r----- 1 bind bind 77 31 janv. 12:39 rndc.key
-rw-r--r-- 1 root root 1317 16 nov. 20:43 zones.rfc1918
}}}
Je change le dossier de configuration et j'active dnssec dans les options et après édition, j'obtiens ceci sans les commentaires:
{{{
nacer@ns1.example.com:/etc/bind$ sudo cat named.conf.options
options {
directory "/etc/bind";
auth-nxdomain no; # conform to RFC1035
listen-on-v6 { any; };
dnssec-enable yes;
};
}}}
Je mets en place le fichier de zone de '''example.com''':
{{{
nacer@ns1.example.com:/etc/bind$ sudo cat master.example.com
$TTL 86400
$ORIGIN example.com.
@ IN SOA example.com. hostmaster.example.com. (
2012013100 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
86400 ) ; Negative Cache TTL
;
@ IN NS ns1.example.com.
IN NS ns1.example.net.
; glue record
ns1 IN A 192.168.127.10
; autre
nacer IN A 192.168.127.1
}}}
Un truc qui m'aide toujours:
{{{
nacer@ns1.example.com:/etc/bind$ sudo named-checkzone example.com master.example.com
zone example.com/IN: loaded serial 2012013100
OK
}}}
Bien sûr, ''named-checkzone'' a d'autres paramètres qui permettrai de checker de façon un peu plus pointue. La zone reverse, vu que j'utilise des IP privées et qu'une telle zone n'apporte rien de plus à l'objectif de ce document, je laisse le fichier zone.rfc1918 s'en occuper.
Je rajoute donc notre nouvelle zone à la configuration bind et je fais vérifier de nouveau:
{{{
nacer@ns1.example.com:/etc/bind$ sudo cat named.conf.local
zone "example.com" {
type master;
file "master.example.com";
allow-update { none; };
};
include "/etc/bind/zones.rfc1918";
nacer@ns1.example.com:/etc/bind$ sudo named-checkconf named.conf
}}}
La commande ''named-checkconf'' ne doit rien retourner, preuve qu'il y a des chances que tout aille bien.
Maintenant, on va générer une paire de clés (privée/public) pour signer l'ensemble des enregistrements (Resources Records) de la zone. Cette clé s'appelle "Zone Signing Key" (ZSK).
{{{
nacer@ns1.example.com:/etc/bind/keys$ sudo dnssec-keygen -a rsasha1 -b 512 -n zone example.com
Generating key pair......++++++++++++ .++++++++++++
Kexample.com.+005+12822
}}}
L'option ''-a'' introduit l'algorithme utilisé pour le chiffrement. Il y a plusieurs choix. Le mien signifie que la génération des clés se fait suivant l'algorithme RSA et SHA-1 est utilisé pour créer les empreintes (digest) associées. La taille (option ''-b'') de la clé peut aller de 512 à 4096 pour ''rsasha1''. La clé va servir à signer une zone (d'où l'option ''-n'' avec la valeur '''zone''') qui est la zone '''example.com'''. Pour plus de détails, voir les commandes '''man dnssec-keygen''' ou '''sudo dnssec-keygen -h'''.
Comme résultat de la commande '''dnssec-keygen''', on obtient deux fichiers:
{{{
nacer@ns1.example.com:/etc/bind$ ls -l keys/
-rw-r--r-- 1 root bind 294 2012-01-31 15:05 Kexample.com.+005+12822.key
-rw------- 1 root bind 622 2012-01-31 15:05 Kexample.com.+005+12822.private
}}}
c'est à dire:
* la partie à publier: Kexample.com.+005+12822.key
* la partie privée: Kexample.com.+005+12822.private
Le nom '''Kexample.com.+005+12822''' permet d'identifier de façon unique la paire de clés générée. Il (le nom) se présente toujours sous la forme: '''K + + (+alg) + (+tag)''' où alg=identifiant de l'algorithme (RSASHA1 = 005) et tag=identifiant unique de la clé. Voici à quoi ressemble la partie publique de la ZSK:
{{{
; This is a zone-signing key, keyid 12822, for example.com.
; Created: Tue Jan 31 15:02:41 2012
; Publish: Tue Jan 31 15:02:41 2012
; Activate: Tue Jan 31 15:02:41 2012
example.com. IN DNSKEY 256 3 5 AwEAAcBTpz1wbz2jTIBbRO7J+6xJsFLf646oSAX+tfFoSg+Onk+zbz35 DFlARIv4Gojd5LBORZX2SRkclX4imFqGpl0=
}}}
Ce fichier sera intégré tel quel dans le fichier de zone de '''example.com'''. Il est bon de retenir que le chiffre 256 qui suit DNSKEY ci-dessus identifie le type de la clé (ici ZSK).
Ensuite, c'est au tour de la Key Signing Keys (KSK) d'être créer:
{{{
nacer@ns1.example.com:/etc/bind/keys$ sudo dnssec-keygen -a rsasha1 -b 512 -f KSK -n zone example.com
Generating key pair.......................++++++++++++ ....++++++++++++
Kexample.com.+005+20677
}}}
Là encore, on obtient deux clés, une publique et une privée. Alors que la ZSK est utilisée pour signer tous les enregistrements du fichier de zone, la KSK sera utilisée pour signer uniquement les enregistrements de type DNSKEY (que la ZSK signe aussi).
{{{
nacer@ns1.example.com:/etc/bind$ cat keys/Kexample.com.+005+20677.key
; This is a key-signing key, keyid 20677, for example.com.
; Created: Tue Jan 31 15:17:50 2012
; Publish: Tue Jan 31 15:17:50 2012
; Activate: Tue Jan 31 15:17:50 2012
example.com. IN DNSKEY 257 3 5 AwEAAbeXOpYF9Wtf+5zmuWogLk7XaFL9ItpJlH/2SP1r4/nlI5pyxkGj HrdcX74a7aRE6LgXJJhh/5i6diprj7YH8vU=
}}}
La KSK est reconnu par le nombre 257 suivant DNSKEY. La seule différence avec la génération de la ZSK est l'utilisation de l'option ''-f'' à laquelle on précise le type (KSK) de la clé à créer. Le manpage associé donne plus de détails.
Maintenant que les deux clés KSK et ZSK sont créées, nous allons les associer au fichier de zone et puis signer celui-ci:
{{{
nacer@ns1.example.com:/etc/bind$ sudo cat master.example.com
$TTL 86400
$ORIGIN example.com.
@ IN SOA example.com. hostmaster.example.com. (
2012013100 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
86400 ) ; Negative Cache TTL
;
@ IN NS ns1.example.com.
IN NS ns1.example.net.
; glue record
ns1 IN A 192.168.127.10
; autre
nacer IN A 192.168.127.1
; KSK
$include "keys/Kexample.com.+005+20677.key";
; ZSK
$include "keys/Kexample.com.+005+12822.key";
; il ne nous reste plus qu'à signer ces deux fichiers et le tour est joué:
nacer@ns1.example.com:/etc/bind$ sudo dnssec-signzone -o example.com -t -k keys/Kexample.com.+005+20677 master.example.com keys/Kexample.com.+005+12822
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
master.example.com.signed
Signatures generated: 9
Signatures retained: 0
Signatures dropped: 0
Signatures successfully verified: 0
Signatures unsuccessfully verified: 0
Runtime in seconds: 0.185
Signatures per second: 48.613
}}}
On obtient le fichier de zone signé nommé '''master.example.com.signed''' dont voici le contenu:
{{{
nacer@ns1.example.com:/etc/bind$ cat master.example.com.signed
; File written on Tue Jan 31 15:30:48 2012
; dnssec_signzone version 9.7.0-P1
example.com. 86400 IN SOA example.com. hostmaster.example.com. (
2012013100 ; serial
604800 ; refresh (1 week)
86400 ; retry (1 day)
2419200 ; expire (4 weeks)
86400 ; minimum (1 day)
)
86400 RRSIG SOA 5 2 86400 20120301133048 (
20120131133048 12822 example.com.
VCP726L8/XF8j27MY6QMN0XtIUoFPmDoSb4W
ctotLii8+nXXV5C6fv82zfWVFchHx+woj6FS
tL7DIUZAisppOQ== )
86400 NS ns1.example.com.
86400 NS ns1.example.net.
86400 RRSIG NS 5 2 86400 20120301133048 (
20120131133048 12822 example.com.
TLUmtrSo0NSDcYKdGqhkyrtp9F2NdE/gsMyV
0PKYFG1xeLox6XyuVJAe4T8T0CX8rQkz9ss/
t7GaD8HlUKiYfg== )
86400 NSEC nacer.example.com. NS SOA RRSIG NSEC DNSKEY
86400 RRSIG NSEC 5 2 86400 20120301133048 (
20120131133048 12822 example.com.
IpgE4S3zWfqov0yNY6vVrMRijoKlzZvXgpm/
0y9q3AYdQbYUEyDH+Gr5Xe+qAdZRD5zAwR2l
IVpLA0H7UEWstw== )
86400 DNSKEY 256 3 5 (
AwEAAcBTpz1wbz2jTIBbRO7J+6xJsFLf646o
SAX+tfFoSg+Onk+zbz35DFlARIv4Gojd5LBO
RZX2SRkclX4imFqGpl0=
) ; key id = 12822
86400 DNSKEY 257 3 5 (
AwEAAbeXOpYF9Wtf+5zmuWogLk7XaFL9ItpJ
lH/2SP1r4/nlI5pyxkGjHrdcX74a7aRE6LgX
JJhh/5i6diprj7YH8vU=
) ; key id = 20677
86400 RRSIG DNSKEY 5 2 86400 20120301133048 (
20120131133048 12822 example.com.
Jq2hs8NKC+lzIx9kvBs8xJfRJhkVPaiICPNl
DihhHALhXI3CTuXq8A1pC510NfdN02jvKZka
4mR9jy8S+WEMvg== )
86400 RRSIG DNSKEY 5 2 86400 20120301133048 (
20120131133048 20677 example.com.
kMWLry2bDJgKqOGXVq/YlxJiwEJaZL52aeSt
HVUJTSBo9BZJIBj7Rtg1HXMtqv6+tnOFBhQr
pDODjVx+iHYXMw== )
nacer.example.com. 86400 IN A 192.168.127.1
86400 RRSIG A 5 3 86400 20120301133048 (
20120131133048 12822 example.com.
N40aFNKektUO7v8GXdpNS1nAu57nMHmwTsTw
I+1zse1e1BgwTtLO8V33HTGnXmZvABuPpZlM
N7i1Zs9QZJB8RQ== )
86400 NSEC ns1.example.com. A RRSIG NSEC
86400 RRSIG NSEC 5 3 86400 20120301133048 (
20120131133048 12822 example.com.
Iif5sXpJ3dDUlRRY1HUxVq2Lxv1PI90cvcql
VMs83/YVnAFnBLOqvtHlXwJNoMS/YjJ45Wd9
GhhkcppsYcqgDQ== )
ns1.example.com. 86400 IN A 192.168.127.10
86400 RRSIG A 5 3 86400 20120301133048 (
20120131133048 12822 example.com.
WcTOWZ+G0GQNB51o+iigMje0/f6yQxgp1fhd
P18qtly9CacYdGuyZBiXN8qWJTvZIOTln6RD
ZByLLTx6dS/tBg== )
86400 NSEC example.com. A RRSIG NSEC
86400 RRSIG NSEC 5 3 86400 20120301133048 (
20120131133048 12822 example.com.
lWobxSzCH/mDMVyRZMumrmC06YDUhXkUGEoj
gEwl9XdFGlCWO/qHTGInTPEKCFHM/Q5a5d4x
Un3bjXJyOL6UeQ== )
}}}
Lors de la signature du fichier de zone '''master.example.com''', j'ai activé l'affichage des statistiques associées avec l'option ''-t'', d'où la sortie de cette commande. L'option ''-o'' précise le nom de la zone dont on veut signer le fichier, ''-k'' permet de préciser la KSK (on peut en préciser plusieurs, notamment lors d'un renouvellement de KSK), ensuite le nom du fichier de zone et enfin la clé de zone (ZSK). Voir la manpage associée pour plus de détails.
La dernière étape consiste maintenant à corriger le fichier de configuration de bind et de relancer le serveur:
{{{
nacer@ns1.example.com:/etc/bind$ cat named.conf.local
zone "example.com" {
type master;
file "master.example.com.signed";
allow-update { none; };
};
include "/etc/bind/zones.rfc1918";
}}}
Un petit test rapide à partir de ma machine:
{{{
nacer@nacerix-lab:~$ dig +dnssec @192.168.127.10 example.com soa
; <<>> DiG 9.7.0-P1 <<>> +dnssec @192.168.127.10 example.com soa
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15487
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 3, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;example.com. IN SOA
;; ANSWER SECTION:
example.com. 86400 IN SOA example.com. hostmaster.example.com. 2012013100 604800 86400 2419200 86400
example.com. 86400 IN RRSIG SOA 5 2 86400 20120301133048 20120131133048 12822 example.com. VCP726L8/XF8j27MY6QMN0XtIUoFPmDoSb4WctotLii8+nXXV5C6fv82 zfWVFchHx+woj6FStL7DIUZAisppOQ==
;; AUTHORITY SECTION:
example.com. 86400 IN NS ns1.example.com.
example.com. 86400 IN NS ns1.example.net.
example.com. 86400 IN RRSIG NS 5 2 86400 20120301133048 20120131133048 12822 example.com. TLUmtrSo0NSDcYKdGqhkyrtp9F2NdE/gsMyV0PKYFG1xeLox6XyuVJAe 4T8T0CX8rQkz9ss/t7GaD8HlUKiYfg==
;; ADDITIONAL SECTION:
ns1.example.com. 86400 IN A 192.168.127.10
ns1.example.com. 86400 IN RRSIG A 5 3 86400 20120301133048 20120131133048 12822 example.com. WcTOWZ+G0GQNB51o+iigMje0/f6yQxgp1fhdP18qtly9CacYdGuyZBiX N8qWJTvZIOTln6RDZByLLTx6dS/tBg==
;; Query time: 1 msec
;; SERVER: 192.168.127.10#53(192.168.127.10)
;; WHEN: Tue Jan 31 15:47:01 2012
;; MSG SIZE rcvd: 471
}}}
et voilà!
== Semaine tech 2012 ==
Voici les slides servant de base à la discussion: [[attachment:dnssec || ici]]