Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
elearning:workbooks:debian:11:sec:l106 [2025/12/04 09:29] adminelearning:workbooks:debian:11:sec:l106 [2025/12/07 14:09] (Version actuelle) admin
Ligne 5: Ligne 5:
 Dernière mise-à-jour : ~~LASTMOD~~ Dernière mise-à-jour : ~~LASTMOD~~
  
-======LDF408 - Sécurité Applicative======+======LDF406 - Sécurité Applicative======
  
 =====Contenu du Module===== =====Contenu du Module=====
  
-  * **LDF408 - Sécurité Applicative**+  * **LDF406 - Sécurité Applicative**
     * Contenu du Module     * Contenu du Module
     * Le Problématique     * Le Problématique
Ligne 25: Ligne 25:
         * 2.5 - Utilisation         * 2.5 - Utilisation
         * 2.6 - Analyse des Résultats         * 2.6 - Analyse des Résultats
-    * Les Contres-Mesures +      LAB #3 - Sécuriser le Serveur DNS 
-      LAB #3 - La commande chroot+        * 3.1 - Le Serveur DNS 
 +        * 3.2 - Préparation à l'Installation 
 +        * 3.3 - Installation 
 +        * 3.4 - Les fichiers de configuration 
 +        * 3.5 Utilisation 
 +        * 3.6 - Créer les Pairs de Clefs 
 +        * 3.7 - Modifier la Configuration de Bind 
 +        * 3.8 - Signer la Zone 
 +        * 3.9 - La chaîne de confiance DNS
  
 =====Le Problématique===== =====Le Problématique=====
Ligne 2518: Ligne 2526:
 Retournez à l'accueil de Guacamole. Connectez-vous à la VM **Gateway_10.0.2.40_VNC** avec le compte **trainee** et le mot de passe **a39dae707d**. Retournez à l'accueil de Guacamole. Connectez-vous à la VM **Gateway_10.0.2.40_VNC** avec le compte **trainee** et le mot de passe **a39dae707d**.
  
-Ouvrez un navigateur web dans la VM et saississez l'adresse %%https:>//10.0.2.51:9443%%. Vous obtiendrez une fenêtre similaire à celle-ci :+Ouvrez un navigateur web dans la VM et saisissez l'adresse %%https:>//10.0.2.51:9443%%. Vous obtiendrez une fenêtre similaire à celle-ci :
  
 {{ :elearning:workbooks:centos:6:avance:openvas01.png?600 |}}  {{ :elearning:workbooks:centos:6:avance:openvas01.png?600 |}} 
Ligne 2553: Ligne 2561:
 {{ :elearning:workbooks:centos:6:avance:openvas08.png?600 |}} {{ :elearning:workbooks:centos:6:avance:openvas08.png?600 |}}
  
-=====Les Contres-Mesures===== 
  
-Les contre-mesures consistent en la mise en place de chroot pour certains serveurs ainsi que le durcissement de la configuration de serveurs d'application.+=====LAB #3 Sécuriser le Serveur DNS=====
  
-====LAB #3 - La commande chroot====+====3.1 Le serveur DNS====
  
-Le chrootage permet de séparer un utilisateur ou un utilisateur système ( et donc un serveur ) du système+Le principe du DNS est basé sur l'équivalence entre un **FQDN** Fully Qualified Domain Name ) et une adresse IP. Les humains retiennent plus facilement des noms tels que www.ittraining.team, tandis que les ordinateurs utilisent des chiffres
  
-Sous Debian 12 le binaire chroot est installé par défaut :+Le **DNS** ( Domain Name Service ) est né peut après l'introduction des FQDN en 1981.  
 + 
 +Lorsqu'un ordinateur souhaite communiquer avec un autre par le biais de son nom, par exemple avec www.fenestros.com, il envoie une requête à un serveur DNS. Si le serveur DNS a connaissance de la correspondance entre le nom demandé et le numéro IP, il répond directement. Si ce n'est pas le cas, il démarre un processus de **Recursive Lookup**.  
 + 
 +Ce processus tente d'identifier le serveur de domaine responsable pour le **SLD** ( Second Level Domain ) afin de lui passer la requête. Dans notre exemple, il tenterait d'identifier le serveur de domaine responsable de **ittraining.com**. 
 + 
 +Si cette tentative échoue, le serveur DNS cherche le serveur de domaine pour le **TLD** ( Top Level Domain ) dans son cache afin de lui demander l'adresse du serveur responsable du SLD. Dans notre cas il tenterait trouver l'enregistrement pour le serveur de domaine responsable de **.com** 
 + 
 +Si cette recherche échoue, le serveur s'adresse à un **Root Name Server** dont il y en a peu. Si le Root Name Server ne peut pas répondre, le serveur DNS renvoie une erreur à la machine ayant formulé la demande.  
 + 
 +Le serveur DNS sert à faire la résolution de noms. Autrement dit de traduire une adresse Internet telle que **www.ittraining.com **en **numéro IP**. 
 + 
 +====3.2 - Préparation à l'Installation==== 
 + 
 +Le serveur DNS nécessite que la machine sur laquelle il est installé possède un nom FQDN et une adresse IP fixe. Il est également important de noter que le service de bind ne démarrera **pas** dans le cas où le fichier **/etc/hosts** comporte une anomalie. Trois étapes préparatoires sont donc nécessaires : 
 + 
 +  * Modification de l'adresse IP de la machine en adresse IP fixe 
 +  * Définition d'un nom FQDN (Fully Qualified Domain Name) 
 +  * Vérification du fichier /etc/hosts 
 + 
 +Afin d'étudier ce dernier cas, nous prenons en tant qu'exemple la machine suivante : 
 + 
 +  * **FQDN** - debian12.ittraining.loc 
 +  * **Adresse IP** - 10.0.2.46 
 + 
 +Vérifiez la configuration de la VM :
  
 <code> <code>
-root@debian12:~# which chroot +root@debian12:~# hostname 
-/usr/sbin/chroot+debian12 
 + 
 +root@debian12:~# hostnamectl set-hostname debian12.ittraining.loc 
 + 
 +root@debian12:~# hostname 
 +debian12.ittraining.loc 
 + 
 +root@debian12:~# nmcli c show 
 +NAME                UUID                                  TYPE      DEVICE  
 +ip_fixe             33c26470-0968-4646-a88a-a22f10fab6da  ethernet  ens18   
 +lo                  c4172990-a224-464f-a1de-9820ca5e83c8  loopback  lo      
 +Wired connection 1  77c569e6-3176-4c10-8008-40d7634d2504  ethernet  --    
 + 
 +root@debian12:~# ip a 
 +1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 
 +    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 
 +    inet 127.0.0.1/8 scope host lo 
 +       valid_lft forever preferred_lft forever 
 +    inet6 ::1/128 scope host noprefixroute  
 +       valid_lft forever preferred_lft forever 
 +2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 
 +    link/ether 56:a3:fd:18:02:6d brd ff:ff:ff:ff:ff:ff 
 +    altname enp0s18 
 +    inet 10.0.2.46/24 brd 10.0.2.255 scope global noprefixroute ens18 
 +       valid_lft forever preferred_lft forever 
 +    inet6 fe80::4b88:5cd8:60c9:6e2c/64 scope link noprefixroute  
 +       valid_lft forever preferred_lft forever 
 +  
 +root@debian12:~# cat /etc/hosts 
 +127.0.0.1       localhost 
 +10.0.2.46       debian12.ittraining.loc debian12 
 + 
 +# The following lines are desirable for IPv6 capable hosts 
 +::1     localhost ip6-localhost ip6-loopback 
 +ff02::1 ip6-allnodes 
 +ff02::2 ip6-allrouters
 </code> </code>
  
-Commencez par créer un répertoire pour l'utilisateur qui sera emprisonné :+<WRAP center round important 50%> 
 +**Important** - La configuration du serveur DNS dépend du nom de votre machine. Dans le cas où vous changeriez ce nom, vous devez reconfigurer votre serveur DNS en éditant les fichiers de configuration directement. 
 +</WRAP> 
 + 
 +====3.3 - Installation==== 
 + 
 +Pour installer le serveur DNS, utilisez la commande **APT**
  
 <code> <code>
-root@debian12:~# mkdir /home/prison+root@debian12:~# apt install bind9 -y 
 + 
 +root@debian12:~# systemctl status named 
 +● named.service - BIND Domain Name Server 
 +     Loaded: loaded (/lib/systemd/system/named.service; enabled; preset: enabled) 
 +     Active: active (running) since Sun 2025-12-07 11:19:19 CET; 44s ago 
 +       Docs: man:named(8) 
 +   Main PID: 32581 (named) 
 +     Status: "running" 
 +      Tasks: 26 (limit: 19123) 
 +     Memory: 116.9M 
 +        CPU: 215ms 
 +     CGroup: /system.slice/named.service 
 +             └─32581 /usr/sbin/named -f -u bind 
 + 
 +Dec 07 11:19:19 debian12.ittraining.loc named[32581]: network unreachable resolving '> 
 +Dec 07 11:19:19 debian12.ittraining.loc named[32581]: network unreachable resolving '> 
 +Dec 07 11:19:19 debian12.ittraining.loc named[32581]: network unreachable resolving '> 
 +Dec 07 11:19:19 debian12.ittraining.loc named[32581]: network unreachable resolving '> 
 +Dec 07 11:19:19 debian12.ittraining.loc named[32581]: network unreachable resolving '> 
 +Dec 07 11:19:19 debian12.ittraining.loc named[32581]: network unreachable resolving '> 
 +Dec 07 11:19:19 debian12.ittraining.loc named[32581]: network unreachable resolving '> 
 +Dec 07 11:19:19 debian12.ittraining.loc named[32581]: network unreachable resolving '> 
 +Dec 07 11:19:19 debian12.ittraining.loc named[32581]: managed-keys-zone: Initializing> 
 +Dec 07 11:19:19 debian12.ittraining.loc named[32581]: managed-keys-zone: Initializing>
 </code> </code>
  
-Le binaire **/usr/sbin/chroot** doit prendre le SUID bit :+===Options de la commande named=== 
 + 
 +Les options de cette commande sont :
  
 <code> <code>
-root@debian12:~# mkdir /home/prison+root@debian12:~# named help 
 +usage: named [-4|-6] [-c conffile] [-d debuglevel] [-D comment] [-E engine] 
 +             [-f|-g] [-L logfile] [-n number_of_cpus] [-p port] [-s] 
 +             [-S sockets] [-t chrootdir] [-u username] [-U listeners] 
 +             [-X lockfile] [-m {usage|trace|record}] 
 +             [-M fill|nofill] 
 +usage: named [-v|-V|-C] 
 +named: extra command line arguments 
 +</code>
  
-root@debian12:~# ls -l /usr/sbin/chroot +====3.4 Les fichiers de configuration====
--rwxr-xr-x. 1 root root 48112 Sep 20  2022 /usr/sbin/chroot+
  
-root@debian12:~# chmod +s /usr/sbin/chroot+Sous Debian12, les fichiers de configuration de **bind9** se trouvent dans **/etc/bind** :
  
-root@debian12:~# ls -l /usr/sbin/chroot +<code> 
--rwsr-sr-x. 1 root root 48112 Sep 20  2022 /usr/sbin/chroot+root@debian12:~# ls -l /etc/bind 
 +total 48 
 +-rw-r--r-- 1 root root 2928 Oct 22 17:38 bind.keys 
 +-rw-r--r-- 1 root root  255 Oct 22 17:38 db.0 
 +-rw-r--r-- 1 root root  271 Oct 22 17:38 db.127 
 +-rw-r--r-- 1 root root  237 Oct 22 17:38 db.255 
 +-rw-r--r-- 1 root root  353 Oct 22 17:38 db.empty 
 +-rw-r--r-- 1 root root  270 Oct 22 17:38 db.local 
 +-rw-r--r-- 1 root bind  458 Oct 22 17:38 named.conf 
 +-rw-r--r-- 1 root bind  498 Oct 22 17:38 named.conf.default-zones 
 +-rw-r--r-- 1 root bind  165 Oct 22 17:38 named.conf.local 
 +-rw-r--r-- 1 root bind  846 Oct 22 17:38 named.conf.options 
 +-rw-r----- 1 bind bind  100 Dec  7 11:19 rndc.key 
 +-rw-r--r-- 1 root root 1317 Oct 22 17:38 zones.rfc1918
 </code> </code>
  
-Créez maintenant un script de connexion générique pour que l'utilisateur **prison** puisse se connecter :+===named.conf=== 
 + 
 +Le fichier de configuration principal du serveur DNS Bind est **/etc/bind/named.conf** 
 + 
 +<code>  
 +root@debian12:~# cat /etc/bind/named.conf 
 +// This is the primary configuration file for the BIND DNS server named. 
 +// 
 +// Please read /usr/share/doc/bind9/README.Debian for information on the 
 +// structure of BIND configuration files in Debian, *BEFORE* you customize 
 +// this configuration file. 
 +// 
 +// If you are just adding zones, please do that in /etc/bind/named.conf.local 
 + 
 +include "/etc/bind/named.conf.options"; 
 +include "/etc/bind/named.conf.local"; 
 +include "/etc/bind/named.conf.default-zones"; 
 +</code> 
 + 
 +Les directives **include**, incluent les fichiers suivants dans la configuration :
  
 <code> <code>
-root@debian12:~# vi /bin/chroot+root@debian12:~# cat /etc/bind/named.conf.options 
 +options { 
 +        directory "/var/cache/bind";
  
-root@debian12:~# cat /bin/chroot +        // If there is a firewall between you and nameservers you want 
-#!/bin/bash +        // to talk to, you may need to fix the firewall to allow multiple 
-exec -/usr/sbin/chroot /home/$USER /bin/bash+        // ports to talk.  See http://www.kb.cert.org/vuls/id/800113 
 + 
 +        // If your ISP provided one or more IP addresses for stable  
 +        // nameservers, you probably want to use them as forwarders.   
 +        // Uncomment the following block, and insert the addresses replacing  
 +        // the all-0's placeholder. 
 + 
 +        // forwarders { 
 +        //      0.0.0.0; 
 +        // }; 
 + 
 +        //======================================================================== 
 +        // If BIND logs error messages about the root key being expired, 
 +        // you will need to update your keys.  See https://www.isc.org/bind-keys 
 +        //======================================================================== 
 +        dnssec-validation auto; 
 + 
 +        listen-on-v6 { any; }; 
 +};
 </code> </code>
  
-Rendez ce script exécutable :+<code> 
 +root@debian12:~# cat /etc/bind/named.conf.local 
 +// 
 +// Do any local configuration here 
 +// 
 + 
 +// Consider adding the 1918 zones here, if they are not used in your 
 +// organization 
 +//include "/etc/bind/zones.rfc1918"; 
 +</code>
  
 <code> <code>
-root@debian12:~# chmod +x /bin/chroot +root@debian12:~# cat /etc/bind/named.conf.default-zones 
 +// prime the server with knowledge of the root servers 
 +zone "."
 +        type hint; 
 +        file "/usr/share/dns/root.hints"; 
 +}; 
 + 
 +// be authoritative for the localhost forward and reverse zones, and for 
 +// broadcast zones as per RFC 1912 
 + 
 +zone "localhost"
 +        type master; 
 +        file "/etc/bind/db.local"; 
 +}; 
 + 
 +zone "127.in-addr.arpa"
 +        type master; 
 +        file "/etc/bind/db.127"; 
 +}; 
 + 
 +zone "0.in-addr.arpa"
 +        type master; 
 +        file "/etc/bind/db.0"; 
 +}; 
 + 
 +zone "255.in-addr.arpa"
 +        type master; 
 +        file "/etc/bind/db.255"; 
 +};
 </code> </code>
  
-Il est maintenant nécessaire de copier toutes les commandes dont l'utilisateur **prison** aura besoinDans cet exemple, nous allons nous contenter de copier **/bin/bash** et **/bin/ls** ainsi que les bibliothèques associées :+===Les Sections de Zone=== 
 + 
 +**La Valeur Type** 
 + 
 +Maintenant, étudions les sections de zones. La valeur "type" peut prendre plusieurs valeurs: 
 + 
 +  * **master** 
 +    * Ce type définit le serveur DNS comme serveur maître ayant **autorité** sur la zone concernée. 
 +  * **slave** 
 +    * Ce type définit le serveur DNS comme serveur esclave pour la zone concernée. Ceci implique que la zone est une réplication d'une zone maîtresse. Un type de zone esclave contiendra aussi une directive **masters** indiquant les adresses IP des serveurs DNS maîtres. 
 +  * **stub** 
 +    * Ce type définit le serveur DNS comme serveur esclave pour la zone concernée mais uniquement pour les **enregistrements** de type **NS**. 
 +  *  **forward** 
 +    * Ce type définit le serveur DNS comme serveur de transit pour la zone concernée. Ceci implique que toute requête est retransmise vers un autre serveur. 
 +  * **hint**  
 +    * Ce type définit la zone concernée comme une zone racine. Ceci implique que lors du démarrage du serveur, cette zone est utilisée pour récupérer les adresses des serveurs DNS racine. 
 + 
 +La valeur "notify" est utilisée pour indiquer si non ( no ) ou oui ( yes ) les autres serveurs DNS sont informés de changements dans la zone. 
 + 
 +**La Valeur File** 
 + 
 +La deuxième directive dans une section de zone comporte la valeur **file**. Il indique l'emplacement du fichier de zone. 
 + 
 +===Exemples de Sections de Zone=== 
 + 
 +Chaque section de zone, à l'exception de la zone "." est associée avec une section de zone inversée. 
 + 
 +La zone "." est configurée dans le fichier **/usr/share/dns/root.hints** 
 + 
 +<file> 
 +... 
 +zone "."
 +        type hint; 
 +        file "/usr/share/dns/root.hints"; 
 +}; 
 +... 
 +</file> 
 + 
 +La section de zone fait correspondre un nom avec une adresse IP tandis que la section de zone inversée fait l'inverse. La section inversée a un nom d'un syntaxe spécifique : 
 + 
 +<file> 
 +adresse_réseau_inversée.in-addr.arpa. 
 +</file> 
 + 
 +Par exemple dans le fichier ci-dessus nous trouvons les quatre sections suivantes : 
 + 
 +<file> 
 +... 
 +zone "localhost"
 +        type master; 
 +        file "/etc/bind/db.local"; 
 +}; 
 + 
 +zone "127.in-addr.arpa"
 +        type master; 
 +        file "/etc/bind/db.127"; 
 +}; 
 + 
 +zone "0.in-addr.arpa"
 +        type master; 
 +        file "/etc/bind/db.0"; 
 +}; 
 + 
 +zone "255.in-addr.arpa"
 +        type master; 
 +        file "/etc/bind/db.255"; 
 +}; 
 +... 
 +</file> 
 + 
 +===Sections de Zones de votre Machine=== 
 + 
 +Afin de configurer notre serveur correctement, il est necéssaire d'ajouter à ce fichier deux sections supplémentaires : 
 + 
 +  La zone correspondante à notre domaine, ici appelée "ittraining.loc". Celle-ci fait correspondre le nom de la machine avec son adresse IP: 
 + 
 +<file> 
 +... 
 +zone "ittraining.loc"
 +    type master; 
 +    file "/etc/bind/zones/ittraining.loc"; 
 +    forwarders { }; 
 +}; 
 +... 
 +</file> 
 + 
 +  La zone à notre domaine mais dans le sens inverse. A savoir le fichier **db.2.0.10.hosts** qui fait correspondre notre adresse IP avec le nom de la machine. 
 + 
 +<file> 
 +... 
 +zone "2.0.10.in-addr.arpa"
 +    type master; 
 +    file "/etc/bind/zones/db.2.0.10.hosts"; 
 +    forwarders { }; 
 +}; 
 +... 
 +</file> 
 + 
 +Ajoutez donc ces deux sections au fichier **/etc/bind/named.conf.default-zones** :
  
 <code> <code>
-root@debian12:~# mkdir /home/prison/bin+root@debian12:~# vi /etc/bind/named.conf.default-zones
  
-root@debian12:~# cp /bin/bash /home/prison/bin/+root@debian12:~# cat /etc/bind/named.conf.default-zones 
 +// prime the server with knowledge of the root servers 
 +zone "."
 +        type hint; 
 +        file "/usr/share/dns/root.hints"; 
 +};
  
-root@debian12:~# ldd /bin/bash +// be authoritative for the localhost forward and reverse zones, and for 
-        linux-vdso.so.1 (0x00007ffd39fcf000) +// broadcast zones as per RFC 1912
-        libtinfo.so.6 => /lib/x86_64-linux-gnu/libtinfo.so.6 (0x00007fef082e8000) +
-        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fef08106000) +
-        /lib64/ld-linux-x86-64.so.2 (0x00007fef08471000) +
-    +
-root@debian12:~# mkdir /home/prison/lib64+
  
-root@debian12:~# mkdir -p /home/prison/lib/x86_64-linux-gnu/+zone "localhost"
 +        type master; 
 +        file "/etc/bind/db.local"; 
 +};
  
-root@debian12:~# cp /lib/x86_64-linux-gnu/libtinfo.so.6 /home/prison/lib/x86_64-linux-gnu/+zone "127.in-addr.arpa" { 
 +        type master; 
 +        file "/etc/bind/db.127"; 
 +};
  
-root@debian12:~# cp /lib/x86_64-linux-gnu/libc.so.6 /home/prison/lib/x86_64-linux-gnu/+zone "0.in-addr.arpa" { 
 +        type master; 
 +        file "/etc/bind/db.0"; 
 +};
  
-root@debian12:~# cp /lib64/ld-linux-x86-64.so.2 /home/prison/lib64+zone "255.in-addr.arpa" { 
 +        type master; 
 +        file "/etc/bind/db.255"; 
 +};
  
-root@debian12:~# cp /bin/ls /home/prison/bin/+zone "ittraining.loc"
 +    type master; 
 +    file "/etc/bind/zones/ittraining.loc"; 
 +    forwarders { }; 
 +};
  
-root@debian12:~# ldd /bin/ls +zone "2.0.10.in-addr.arpa"
-        linux-vdso.so.1 (0x00007fff3db26000) +    type master; 
-        libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f8afb9a0000) +    file "/etc/bind/zones/db.2.0.10.hosts"; 
-        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8afb7be000) +    forwarders { }; 
-        libpcre2-8.so.0 =/lib/x86_64-linux-gnu/libpcre2-8.so.0 (0x00007f8afb724000) +}; 
-        /lib64/ld-linux-x86-64.so.2 (0x00007f8afba0a000)+</code> 
 + 
 +===Les fichiers de zone=== 
 + 
 +La fichiers de zone sont composées de lignes d'une forme: 
 + 
 +|  nom  |  TTL  |  classe  |  type  |  donnée 
 + 
 +où 
 + 
 +  * **nom** 
 +    * Le nom DNS. 
 +  * **TTL** 
 +    * La durée de vie en cache de cet enregistrement
 +  * **classe** 
 +    * Le réseau de transport utiliséDans notre cas, le réseau est du TCPLa valeur est donc IN. 
 +  * **type** 
 +    * Le type d'enregistrement: 
 +      * SOA Start of Authority se trouve au début du fichier et contient des informations générales 
 +      * NS - Name Server  - le nom du serveur de nom 
 +      * A - Address - indique une résolution de nom vers une adresse IPNe se trouve que dans les fichiers **.hosts** 
 +      * PTR - %%PoinTeR%% - indique une résolution d'une adresse IP vers un nomNe se trouve que dans les fichiers inversés. 
 +      * MX Mail eXchange le nom d'un serveur de mail. 
 +      * CNAME - Canonical Name - un alias d'une machine
 +      * HINFO Hardware Info - fournit des informations sur le matériel de la machine      
 +  * **donnée** 
 +    * La donnée de la ressource: 
 +      * Une adresse IP pour un enregistrement de type A 
 +      * Un nom de machine pour un eregistrement de type PTR 
 + 
 +==ittraining.loc=
 + 
 +Ce fichier se trouve dans /etc/bind/zonesC'est le fichier qui définit la correspondance du nom de la machine **debian12.ittraining.loc** avec son numéro IP, à savoir le **10.0.2.46**. On définit dans ce fichier les machines qui doivent être appelées par leur nom : 
 + 
 +<code> 
 +root@debian12:~# mkdir /etc/bind/zones 
 + 
 +root@debian12:~# vi /etc/bind/zones/ittraining.loc
  
-root@debian12:~# cp /lib/x86_64-linux-gnu/libselinux.so.1 /home/prison/lib/x86_64-linux-gnu/+root@debian12:~# cat /etc/bind/zones/ittraining.loc 
 +$TTL 3D 
 +@       IN     SOA     debian12.ittraining.loc. root.debian12.ittraining.loc. ( 
 +               2025120701       ; Serial 
 +               8H   ; Refresh 
 +               2H   ; Retry 
 +               4W  ; Expire 
 +               1D)  ; Minimum TTL 
 +               IN      NS      debian12.ittraining.loc. 
 +localhost                                127.0.0.1 
 +dnsmaster                   IN      CNAME  debian12.ittraining.loc. 
 +debian12.ittraining.loc.    IN      A      10.0.2.46
  
-root@debian12:~# cp /lib/x86_64-linux-gnu/libpcre2-8.so.0 /home/prison/lib/x86_64-linux-gnu/+ftp IN CNAME debian12.ittraining.loc. 
 +www IN CNAME debian12.ittraining.loc. 
 +mail IN CNAME debian12.ittraining.loc. 
 +news IN CNAME debian12.ittraining.loc.
 </code> </code>
  
-Créez maintenant le groupe chroot :+<WRAP center round important 50%> 
 +**Important** - Notez le point à la fin de chaque nom de domaine. Notez bien le remplacement du caractère @ dans l'adresse email de l'administrateur de mail par le caractère "." 
 +</WRAP> 
 + 
 +La première ligne de ce fichier commence par une ligne semblable à celle-ci: 
 + 
 +<file> 
 +$TTL 3D 
 +</file> 
 + 
 +Cette ligne indique aux autres serveurs DNS pendant combien de temps ils doivent garder en cache les enregistrements de cette zone. La durée peut s'exprimer en jours (**D**), en heures (**H**) ou en secondes (**S**). 
 + 
 +La deuxième ligne définit une **classe** **IN**ternet, un **SOA** (Start Of Authority), le nom du serveur primaire et l'adresse de l'administrateur de mail : 
 + 
 +<file> 
 +@       IN     SOA     debian12.ittraining.loc. root.debian12.ittraining.loc. ( 
 +</file> 
 + 
 +Le caractère **@** correspond au nom de la zone et est une abréviation pour le nom de la zone décrit par le fichier de la zone, soit dans ce cas db.**ittraining.loc**.hosts, et présent dans le fichier /etc/bind/named.conf.default-zones : 
 + 
 +<file> 
 +zone "ittraining.loc"
 +    type master; 
 +    file "/etc/bind/zones/ittraining.loc"; 
 +    forwarders { }; 
 +}; 
 +</file> 
 + 
 +Le **numéro de série** doit être modifié chaque fois que le fichier est changé. Il faut noter que dans le cas de plusieurs changements dans la même journée il est nécessaire d'incrémenter les deux derniers chiffres du numéro de série. Par exemple, dans le cas de deux changements en date du 07/12/2025, le premier fichier comportera une ligne Serial avec la valeur 2025120701 tandis que le deuxième changement comportera le numéro de série 2025120702 : 
 + 
 +<file> 
 +2025120701       ; Serial 
 +</file> 
 + 
 +La ligne suivante indique le temps de rafraîchissement, soit 8 heures. Ce temps correspond à la durée entre les mises à jour d'un autre serveur : 
 + 
 +<file> 
 +       8H ; Refresh 
 +</file> 
 + 
 +La ligne suivante indique le temps entre de nouveaux essaies de mise à jour d'un autre serveur dans le cas où la durée du Refresh a été dépassée : 
 + 
 +<file> 
 +       2H ; Retry  
 +</file> 
 + 
 +La ligne suivante indique le temps d'expiration, c'est-à-dire la durée d'autorité de l'enregistrement. Cette directive est utilisée seulement par un serveur esclave : 
 + 
 +<file> 
 +       4W ; Expire  
 +</file> 
 + 
 +La ligne suivante indique le temps minimum pour la valeur TTL, soit un jour: 
 + 
 +<file> 
 +       1D) ; Minimum TTL  
 +</file> 
 + 
 +Cette ligne identifie notre serveur de noms : 
 + 
 +<file> 
 +IN NS debian12.ittraining.loc. 
 +</file> 
 + 
 +Dans le cas où notre serveur était également un serveur mail. Nous trouverions aussi une entrée du type SMTP (MX) : 
 +<file> 
 +IN MX 10 mail.ittraining.loc. 
 +</file> 
 + 
 +Ci-dessous on définit avec une entrée du type A, les machines que l'on souhaite appeler par leur nom, à savoir **debian12.ittraining.loc** et **localhost** : 
 + 
 +<file> 
 +localhost                                127.0.0.1 
 +... 
 +debian12.ittraining.loc.    IN      A      10.0.2.46 
 +</file> 
 + 
 +Ci-dessous on définit des **Alias** avec des entrées du type CNAME. Les alias servent à identifier une machine.  
 + 
 +<file> 
 +dnsmaster                   IN      CNAME  debian12.ittraining.loc. 
 +</file> 
 + 
 +Nous pourrions aussi trouver ici des entrées telles: 
 + 
 +<file> 
 +ftp IN CNAME debian12.ittraining.loc. 
 +www IN CNAME debian12.ittraining.loc. 
 +mail IN CNAME debian12.ittraining.loc. 
 +news IN CNAME debian12.ittraining.loc. 
 +</file> 
 + 
 +==db.2.0.10.hosts== 
 + 
 +Ce fichier se trouve dans /etc/bind/zones/. C'est le fichier qui définit la correspondance de l'adresse IP de la machine, à savoir le **10.0.2.46** avec le nom **debian12.ittraining.loc**. Le chiffre **46** dans la dernière ligne correspond au 10.0.2.**46**:
  
 <code> <code>
-root@debian12:~# groupadd chroot+root@debian12:~# vi /etc/bind/zones/db.2.0.10.hosts
  
-root@debian12:~# cat /etc/group | grep chroot +root@debian12:~# cat /etc/bind/zones/db.2.0.10.hosts 
-chroot:x:1001:+$TTL 3D 
 +@       IN      SOA     debian12.ittraining.loc.        debian12.ittraining.loc. ( 
 +                2025120701 ; Serial 
 +                10800   ; Refresh 
 +                3600    ; Retry 
 +                604800  ; Expire 
 +                86400) ; Minimum TTL 
 +                NS      debian12.ittraining.loc. 
 +46       IN      PTR     debian12.ittraining.loc.
 </code> </code>
  
-Créez maintenant l'utilisateur **prison** :+Modifiez maintenant les permissions sur les fichiers de configuration :
  
 <code> <code>
-root@debian12:~# useradd prison -c chroot_user -/home/prison -g chroot -/bin/chroot+root@debian12:~# ls -l /etc/bind/zones/
 +-rw-r--r-- 1 root bind 362 Dec  7 12:16 /etc/bind/zones/db.2.0.10.hosts 
 +-rw-r--r-- 1 root bind 634 Dec  7 12:06 /etc/bind/zones/ittraining.loc 
 + 
 +root@debian12:~# chmod g+w /etc/bind/zones/
 + 
 +root@debian12:~# ls -l /etc/bind/zones/
 +-rw-rw-r-- 1 root bind 362 Dec  7 12:16 /etc/bind/zones/db.2.0.10.hosts 
 +-rw-rw-r-- 1 root bind 634 Dec  7 12:06 /etc/bind/zones/ittraining.loc
 </code> </code>
  
-Dernièrement, modifiez le propriétaire et le groupe du répertoire **/home/prison** :+====3.5 - Utilisation==== 
 + 
 +Modifiez maintenant le fichier **/etc/resolv.conf** afin d'utiliser votre propre serveur DNS :
  
 <code> <code>
-root@debian12:~# chown -R prison:chroot /home/prison+root@debian12:~# vi /etc/resolv.conf 
 + 
 +root@debian12:~# cat /etc/resolv.conf 
 +# Generated by NetworkManager 
 +search ittraining.loc 
 +nameserver 127.0.0.1 
 +nameserver 8.8.8.8
 </code> </code>
  
-Essayez maintenant de vous connecter en tant que l'utilisateur prison :+Dernièrement, redémarrez le service named :
  
 <code> <code>
-root@debian12:~# su - prison+root@debian12:~# systemctl restart named
  
-bash-5.2$ pwd +root@debian12:~# systemctl status named 
-/+● named.service BIND Domain Name Server 
 +     Loaded: loaded (/lib/systemd/system/named.service; enabled; preset: enabled) 
 +     Active: active (running) since Sun 2025-12-07 12:19:11 CET; 7s ago 
 +       Docs: man:named(8) 
 +   Main PID: 32731 (named) 
 +     Status: "running" 
 +      Tasks: 18 (limit: 19123) 
 +     Memory: 109.1M 
 +        CPU: 86ms 
 +     CGroup: /system.slice/named.service 
 +             └─32731 /usr/sbin/named -f -u bind
  
-bash-5.2$ ls +Dec 07 12:19:11 debian12.ittraining.loc named[32731]: network unreachable resolving './DNSKEY/IN': 2801:1b8:10::b#53 
-bin  lib  lib64+Dec 07 12:19:11 debian12.ittraining.loc named[32731]: network unreachable resolving './NS/IN': 2801:1b8:10::b#53 
 +Dec 07 12:19:11 debian12.ittraining.loc named[32731]: network unreachable resolving './DNSKEY/IN': 2001:500:1::53#53 
 +Dec 07 12:19:11 debian12.ittraining.loc named[32731]: network unreachable resolving './NS/IN': 2001:500:1::53#53 
 +Dec 07 12:19:11 debian12.ittraining.loc named[32731]: network unreachable resolving './DNSKEY/IN': 2001:500:2f::f#53 
 +Dec 07 12:19:11 debian12.ittraining.loc named[32731]: network unreachable resolving './NS/IN': 2001:500:2f::f#53 
 +Dec 07 12:19:11 debian12.ittraining.loc named[32731]: network unreachable resolving './DNSKEY/IN': 2001:503:c27::2:30#53 
 +Dec 07 12:19:11 debian12.ittraining.loc named[32731]: network unreachable resolving './NS/IN': 2001:503:c27::2:30#53 
 +Dec 07 12:19:12 debian12.ittraining.loc named[32731]: managed-keys-zone: Key 20326 for zone . is now trusted (acceptance timer complete) 
 +Dec 07 12:19:12 debian12.ittraining.loc named[32731]: managed-keys-zone: Key 38696 for zone . is now trusted (acceptance timer complete) 
 +</code>
  
-bash-5.2$ ls -la +Testez maintenant votre serveur :
-total 20 +
-drwxr-xr-x. 5 1001 1001 4096 Dec  1 13:59 . +
-drwxr-xr-x. 5 1001 1001 4096 Dec  1 13:59 .. +
-drwxr-xr-x. 2 1001 1001 4096 Dec  1 13:56 bin +
-drwxr-xr-x. 3 1001 1001 4096 Dec  1 13:59 lib +
-drwxr-xr-x. 2 1001 1001 4096 Dec  1 13:56 lib64+
  
-bash-5.2$ exit +<code> 
-exit+root@debian12:/etc/bind/zones# nslookup debian12.ittraining.loc 
 +Server:         127.0.0.1 
 +Address:        127.0.0.1#53
  
-root@debian12:~# +Name:   debian12.ittraining.loc 
 +Address: 10.0.2.46 
 + 
 +root@debian12:~# dig ittraining.loc 
 + 
 +; <<>> DiG 9.18.41-1~deb12u1-Debian <<>> ittraining.loc 
 +;; global options: +cmd 
 +;; Got answer: 
 +;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51890 
 +;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1 
 + 
 +;; OPT PSEUDOSECTION: 
 +; EDNS: version: 0, flags:; udp: 1232 
 +; COOKIE: 74a7e4078e44bf490100000069356348f4e348254883e231 (good) 
 +;; QUESTION SECTION: 
 +;ittraining.loc.                        IN      A 
 + 
 +;; AUTHORITY SECTION: 
 +ittraining.loc.         86400   IN      SOA     debian12.ittraining.loc. root.debian12.ittraining.loc. 2025120701 28800 7200 2419200 86400 
 + 
 +;; Query time: 0 msec 
 +;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP) 
 +;; WHEN: Sun Dec 07 12:21:44 CET 2025 
 +;; MSG SIZE  rcvd: 121 
 + 
 +root@debian12:~# dig -x 10.0.2.46 
 + 
 +; <<>> DiG 9.18.41-1~deb12u1-Debian <<>> -x 10.0.2.46 
 +;; global options: +cmd 
 +;; Got answer: 
 +;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5254 
 +;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 
 + 
 +;; OPT PSEUDOSECTION: 
 +; EDNS: version: 0, flags:; udp: 1232 
 +; COOKIE: b019ecafc27e897601000000693563584aff28c151c1bd67 (good) 
 +;; QUESTION SECTION: 
 +;46.2.0.10.in-addr.arpa.                IN      PTR 
 + 
 +;; ANSWER SECTION: 
 +46.2.0.10.in-addr.arpa. 259200  IN      PTR     debian12.ittraining.loc. 
 + 
 +;; Query time: 0 msec 
 +;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP) 
 +;; WHEN: Sun Dec 07 12:22:00 CET 2025 
 +;; MSG SIZE  rcvd: 116
 </code> </code>
  
-Notez que l'utilisateur **prison** est //chrooté//.+<WRAP center round important 50%> 
 +**Important** - Notez l'utilisation de l'option **-x** de la commande **dig** pour tester la zone à l'envers. 
 +</WRAP> 
 + 
 +====3.6 - Créer les Pairs de Clefs==== 
 + 
 +Utilisez la commande **dnssec-keygen** pour créer la ZSK : 
 + 
 +<code> 
 +root@debian12:~# cd /etc/bind/zones/ 
 + 
 +root@debian12:/etc/bind/zones# dnssec-keygen -b 2048 -a RSASHA256 ittraining.loc 
 +Generating key pair............+.....+...+....+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.....+........+...+...+....+...+........+.......+.....+...+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*........+.........+..............+....+..+...+.+......+...+..+...+..........+...+.....+...+......+.+........+.+.........+..+.........+......+...+......+.........+..........+......+.....+...+.+.........+...+.....+....+...+............+........+.+...........+...+...+...+........................+...+.......+......+.....+.+....................+....+.....+......................+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ..+......+........+.......+.....+......+...+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.......+......+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*................+.+............+.....+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  
 +Kittraining.loc.+008+18528 
 +</code> 
 + 
 +<WRAP center round important 50%> 
 +**Important** - L'option **-a RSASHA256** force l'utilisation de l'algorithme SHA2 au lieu de SHA1. 
 +</WRAP> 
 + 
 +<code> 
 +root@debian12:/etc/bind/zones# ls -l 
 +total 24 
 +-rw-rw-r-- 1 root bind  362 Dec  7 12:16 db.2.0.10.hosts 
 +-rw-rw-r-- 1 root bind  747 Dec  7 13:13 ittraining.loc 
 +-rw-r--r-- 1 root bind  612 Dec  7 13:28 Kittraining.loc.+008+18528.key 
 +-rw------- 1 root bind 1776 Dec  7 13:28 Kittraining.loc.+008+18528.private 
 +</code> 
 + 
 +<WRAP center round important 50%> 
 +**Important** - Dans le nom de chaque fichier, **008** indique l'utilisation de SHA2. Dans le cas de l'utilisation de SHA1, la valeur serait **005**. La valeur **18528** est l'identifiant du pair de clefs. 
 +</WRAP> 
 + 
 +Utilisez la commande **dnssec-keygen** pour créer la KSK : 
 + 
 +<code> 
 +root@debian12:/etc/bind/zones# dnssec-keygen -b 4096 -f KSK -a RSASHA256 ittraining.loc 
 +Generating key pair..+.....+....+......+......+.....+....+...+.....+......+......................+........+....+...+...+.........+..+...+.+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*...+.....+.+...........+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.........+.......+......+..+......+.......+.........+..............+.........+.+..+....+.....+....+..+.......+...+..+......+..........+...........+.+....................+...+......+.........+.........+.+......+........+...+............+..........+...+...+....................+....+........+...+....+..................+..............+.........+.......+...+..+.......+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ..+..+....+..+.......+..+......+.........+....+..+..........+.....+.......+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*..+.......+........+.+.....+.......+........+.......+..+.+......+..............+.+......+.........+...+......+.........+...+.................+................+......+.....+....+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*...........+....+...+............+..............+..........+.................+.............+.........+..+...+.+..+.........+...+.............+...+.....+....+..+...+......+.......+...+.........+...+.....+.........+....+...........+......+.......+...........+.+.........+.....+.+.....+..................+.+..+.........+.........+.......+........+...................+.....+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  
 +Kittraining.loc.+008+63515 
 +</code> 
 + 
 +<WRAP center round important 50%> 
 +**Important** - L'option **-f** indique le type de pair de clefs, soit KSK. 
 +</WRAP> 
 + 
 +Constatez la présence des pairs de clefs : 
 + 
 +<code> 
 +root@debian12:/etc/bind/zones# ls -l 
 +total 24 
 +-rw-rw-r-- 1 root bind  362 Dec  7 12:16 db.2.0.10.hosts 
 +-rw-rw-r-- 1 root bind  747 Dec  7 13:13 ittraining.loc 
 +-rw-r--r-- 1 root bind  612 Dec  7 13:28 Kittraining.loc.+008+18528.key 
 +-rw------- 1 root bind 1776 Dec  7 13:28 Kittraining.loc.+008+18528.private 
 +-rw-r--r-- 1 root bind  957 Dec  7 13:28 Kittraining.loc.+008+63515.key 
 +-rw------- 1 root bind 3316 Dec  7 13:28 Kittraining.loc.+008+63515.private 
 +</code> 
 + 
 +====3.7 - Modifier la Configuration de Bind==== 
 + 
 +Ajoutez les deux clefs publiques dans la configuration du fichier de zone **/etc/bind/zones/ittraining.loc** : 
 + 
 +<code> 
 +root@debian12:/etc/bind/zones# vi ittraining.loc  
 + 
 +root@debian12:/etc/bind/zones# cat ittraining.loc 
 +$TTL 3D 
 +@       IN     SOA     debian12.ittraining.loc. root.debian12.ittraining.loc. ( 
 +               2025120702       ; Serial 
 +               8H   ; Refresh 
 +               2H   ; Retry 
 +               4W  ; Expire 
 +               1D)  ; Minimum TTL 
 +               IN      NS      debian12.ittraining.loc. 
 +localhost                                127.0.0.1 
 +dnsmaster                   IN      CNAME  debian12.ittraining.loc. 
 +debian12.ittraining.loc.    IN      A      10.0.2.46 
 + 
 +ftp IN CNAME debian12.ittraining.loc. 
 +www IN CNAME debian12.ittraining.loc. 
 +mail IN CNAME debian12.ittraining.loc. 
 +news IN CNAME debian12.ittraining.loc. 
 + 
 +$include /etc/bind/zones/Kittraining.loc.+008+18528.key 
 +$include /etc/bind/zones/Kittraining.loc.+008+63515.key 
 +</code> 
 + 
 +<WRAP center round important 50%> 
 +**Important** - N'oubliez pas de changer la valeur **serial**. 
 +</WRAP> 
 + 
 +Redémarrez le service **named** : 
 + 
 +<code> 
 +root@debian12:/etc/bind/zones# systemctl restart named 
 + 
 +root@debian12:/etc/bind/zones# systemctl status  named 
 +● named.service - BIND Domain Name Server 
 +     Loaded: loaded (/lib/systemd/system/named.service; enabled; preset: enabled) 
 +     Active: active (running) since Sun 2025-12-07 13:32:03 CET; 7s ago 
 +       Docs: man:named(8) 
 +   Main PID: 32952 (named) 
 +     Status: "running" 
 +      Tasks: 18 (limit: 19123) 
 +     Memory: 113.1M 
 +        CPU: 83ms 
 +     CGroup: /system.slice/named.service 
 +             └─32952 /usr/sbin/named -f -u bind 
 + 
 +Dec 07 13:32:03 debian12.ittraining.loc named[32952]: network unreachable resolving './DNSKEY/IN': 2001:503:ba3e::2:30#53 
 +Dec 07 13:32:03 debian12.ittraining.loc named[32952]: network unreachable resolving './NS/IN': 2001:503:ba3e::2:30#53 
 +Dec 07 13:32:03 debian12.ittraining.loc named[32952]: network unreachable resolving './DNSKEY/IN': 2001:7fe::53#53 
 +Dec 07 13:32:03 debian12.ittraining.loc named[32952]: network unreachable resolving './NS/IN': 2001:7fe::53#53 
 +Dec 07 13:32:03 debian12.ittraining.loc named[32952]: network unreachable resolving './DNSKEY/IN': 2001:500:9f::42#53 
 +Dec 07 13:32:03 debian12.ittraining.loc named[32952]: network unreachable resolving './NS/IN': 2001:500:9f::42#53 
 +Dec 07 13:32:03 debian12.ittraining.loc named[32952]: network unreachable resolving './DNSKEY/IN': 2001:503:c27::2:30#53 
 +Dec 07 13:32:03 debian12.ittraining.loc named[32952]: network unreachable resolving './NS/IN': 2001:503:c27::2:30#53 
 +Dec 07 13:32:03 debian12.ittraining.loc named[32952]: managed-keys-zone: Key 20326 for zone . is now trusted (acceptance timer complete) 
 +Dec 07 13:32:03 debian12.ittraining.loc named[32952]: managed-keys-zone: Key 38696 for zone . is now trusted (acceptance timer complete) 
 +</code> 
 + 
 +Intérogez le DNS local pour obtenir les clefs publiques : 
 + 
 +<code> 
 +root@debian12:/etc/bind/zones# dig @debian12.ittraining.loc DNSKEY ittraining.loc 
 + 
 +; <<>> DiG 9.18.41-1~deb12u1-Debian <<>> @debian12.ittraining.loc DNSKEY ittraining.loc 
 +; (1 server found) 
 +;; global options: +cmd 
 +;; Got answer: 
 +;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58210 
 +;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 
 + 
 +;; OPT PSEUDOSECTION: 
 +; EDNS: version: 0, flags:; udp: 1232 
 +; COOKIE: 74f4778aedb99b4d01000000693576d3fe2e16da8329795a (good) 
 +;; QUESTION SECTION: 
 +;ittraining.loc.                        IN      DNSKEY 
 + 
 +;; ANSWER SECTION: 
 +ittraining.loc.         259200  IN      DNSKEY  256 3 8 AwEAAZ+2bRM+yedcAeqUR6AdkSzyIeQg1kH4021as3WvYGlOLqeUnfbe gNewRYifndXx/b1t84A9L6IZH1ZamuSNxNi7Y0+FZbyq4DJmFnHA68Ao 5zmOhK76mrQf6SjzQHZWzwtoG0DAApTggaRxhmezzjkSr3WNadIoFg4F XU5UaV4ePU5hhPn+zi34SUYvgPTZsSWb/solo0yna80RBxI+hgRxoaPp jV/v4mEVVS9Fjpvc6SxJ/ZZbtUMJi5lTUCvko+Ny9cuXZ5auW4b2qp4u Sk6NuywMawQafxBaxZ/9KuhxqO4qp2n1pl+gBatqb/XPydE41z6ONkT2 YnDOLQVZxLM= 
 +ittraining.loc.         259200  IN      DNSKEY  257 3 8 AwEAAcRrC7vljqlLFZGQbLUBpMs29NWyiJ8158xqL0GdZuRslhAqy4q2 JisfBS1gKm27J4y2s8zrDhKLAnEqWpIydvRkZd+a6oTJAomfAF9bxHAe xxEyLK7Xd4ATGiXRUv2vALQq1e6XejBhVr10gmbKdQW+SxayYnwQ0G8h 1VFJ2wtAJZdNn/exhmgxxmUwxeJWLmUf37VOkycwn4RbwWZY3rBIOi2V mCigGe1cDpZoNb2FCTKLjEj5ZRz0ieM9SXXLkZEvGd77xAvoV8+JTTX5 BjlP6Hfso+C/NZUchvoNYisqWSPzffyrsaOzumMtuIsKJX2PaADSmFg8 os/b16zqtPbd+lPhQdsR+RE9V5R0YJhNPnsoG0Vy/mfQCCcP7VIC97iB aYSz/u5KFhsS5E0AIJt8rJwGrb2eqZYTFe2Mdtth1FjgIk7DCvFm2GYM zZ0F15WqcBpJGEDof0/HWSpMfjbnc20QAojLYmuek5XE9lWlZLrk9tby q4R7dZrUdDez3oShtJ/rXTA8AxOzcftLsoCZHy+bMfy5RxThidWQYJGE dQsnk3IgJ1pgzSjdB4nXQkyxMBpRzjyxPw9k1a4oLxYrdLQnHkm5RdWA b5k6Csu2xmSKaQUy9oyLaCRrkd9BnpJPELjRmXIdmyswevjmUr9qwLtk L1W/qxN3it6Ribh3 
 + 
 +;; Query time: 4 msec 
 +;; SERVER: 10.0.2.46#53(debian12.ittraining.loc) (UDP) 
 +;; WHEN: Sun Dec 07 13:45:07 CET 2025 
 +;; MSG SIZE  rcvd: 879 
 +</code> 
 + 
 +====3.8 - Signer la Zone==== 
 + 
 +Les clefs étant maintenant insérées dans la configuration, il convient de signer la zone en utilisant la commande **dnssec-signzone**. L'option **-S** signifie **smart signing** permet de trouver automatiquement les fichiers de clefs pour la zone et détermine comment ils doivent être utilisés : 
 + 
 +<code> 
 +root@debian12:/etc/bind/zones# dnssec-signzone -S ittraining.loc 
 +Verifying the zone using the following algorithms: 
 +- RSASHA256 
 +Zone fully signed: 
 +Algorithm: RSASHA256: KSKs: 1 active, 0 stand-by, 0 revoked 
 +                      ZSKs: 1 active, 0 stand-by, 0 revoked 
 +ittraining.loc.signed 
 + 
 +root@debian12:/etc/bind/zones# ls -l | grep signed 
 +-rw-r--r-- 1 root bind 12407 Dec  7 13:39 ittraining.loc.signed 
 +</code> 
 + 
 +Consultez le fichier **ittraining.loc.signed** : 
 + 
 +<code> 
 +root@debian12:/etc/bind/zones# more ittraining.loc.signed 
 +; File written on Sun Dec  7 13:39:03 2025 
 +; dnssec_signzone version 9.18.41-1~deb12u1-Debian 
 +ittraining.loc.         259200  IN SOA  debian12.ittraining.loc. root.debian12.ittraining.loc. ( 
 +                                        2025120703 ; serial 
 +                                        28800      ; refresh (8 hours) 
 +                                        7200       ; retry (2 hours) 
 +                                        2419200    ; expire (4 weeks) 
 +                                        86400      ; minimum (1 day) 
 +                                        ) 
 +                        259200  RRSIG   SOA 8 2 259200 ( 
 +                                        20260106113903 20251207113903 18528 ittraining.loc. 
 +                                        ANlboBzlffzcYC1G10cQuxvRP3XC5bvDP1+v 
 +                                        Baxfh/B4BxgYGeQoDih2uGqLxzDExRWix2a2 
 +                                        B95uAkDGClaGdlFkYtU4voIQJWuAx0Goo6Xa 
 +                                        omEyrIdLGqoj9e2vdn6j2lVpJik9YgCTxP2G 
 +                                        ShVYc632XsAFPXN6SJrR3QdKo1x6KM1uPYdd 
 +                                        OxAX9fGNYj59ZXG84slUxreDejoqn2k8Rx68 
 +                                        gxuzkIY3oM5aUtbvL8bwjflk121mWxQ4vVhW 
 +                                        R/KNk9SEc6AbZSqJXwmlY/vReOA+pvPCdLYJ 
 +                                        7Wf+S9kr1i1xT1y078Iqz2twASWBjBnP/adG 
 +                                        QtKpn9SvKUEzICTaNA== ) 
 +                        259200  NS      debian12.ittraining.loc. 
 +                        259200  RRSIG   NS 8 2 259200 ( 
 +                                        20260106113903 20251207113903 18528 ittraining.loc. 
 +                                        CGtE8nZ2F0JQLAmbyPgrqKLDXjyWg2hZmEcf 
 +                                        22h2zAxJZWjNWB7k5aLHA6weKkvo7mTnH7sS 
 +                                        pEazWPhaDzmW2BLfdBjeaSZzj+mMWUiXVnUq 
 +                                        LYAMLRXGD1NAPcuSQlyzDpN0JZXwWfQFTpzT 
 +                                        DJttJyChcQgyJmvaJEhIhQK5gRFMaT+Ww1zg 
 +                                        pvAke0HlkSEz9mQxIhff5FqSL00Zyn5mnLBB 
 +                                        N6X1XKQXL/mUJ8nb9X70n9b/qsYqAQdFFxzS 
 +                                        6lz+kMr/D1AhzabDGkeD/+xlXSPMygYc4I6b 
 +                                        eYZKmEsD8HOdYJb5JlWicP7cheeKonPXxjrZ 
 +                                        TQqLDJFaRETE+IDnLQ== ) 
 +                        86400   NSEC    debian12.ittraining.loc. NS SOA RRSIG NSEC DNSKEY 
 +                        86400   RRSIG   NSEC 8 2 86400 ( 
 +                                        20260106113903 20251207113903 18528 ittraining.loc. 
 +                                        dDLcoBI/agA+tHni16R8aWdWHBqPPfBjbFRZ 
 +                                        775fNQI/d20d47vFx/u2rx+WzenCSZBOpU/
 +                                        2b8Q2Dm26f218L1KYF7NF7dew2s5OUIkfM+V 
 +                                        iZIqBSAFYyAbLYRCfbQA6DxsIgDT6T/x7jLf 
 +                                        +jYHNeASGauWunufrSLvbqdsIE0z+JH+3AVE 
 +                                        JaLTeXYL6I+/U4vn+EwVOiOuVv3eOt8d1d5a 
 +                                        0lqDK8qRlcbhFF1ngOJHe+Fa5ect9kqnbjCa 
 +                                        7mwOOmp4v4JA6Myvvut7OEDI5mQItd9HApPl 
 +                                        eM0kvui7mioUEUCM2EXRPtJYXVAELUnqGz1S 
 +                                        hn6EYefpcWvUDo8veg== ) 
 +                        259200  DNSKEY  256 3 8 ( 
 +                                        AwEAAZ+2bRM+yedcAeqUR6AdkSzyIeQg1kH4 
 +                                        021as3WvYGlOLqeUnfbegNewRYifndXx/b1t 
 +                                        84A9L6IZH1ZamuSNxNi7Y0+FZbyq4DJmFnHA 
 +                                        68Ao5zmOhK76mrQf6SjzQHZWzwtoG0DAApTg 
 +                                        gaRxhmezzjkSr3WNadIoFg4FXU5UaV4ePU5h 
 +                                        hPn+zi34SUYvgPTZsSWb/solo0yna80RBxI+ 
 +                                        hgRxoaPpjV/v4mEVVS9Fjpvc6SxJ/ZZbtUMJ 
 +--More--(18%) 
 +</code> 
 + 
 +Consultez la section RRSIG du SOA : 
 + 
 +<file> 
 +... 
 +                        259200  RRSIG   SOA 8 2 259200 ( 
 +                                        20260106113903 20251207113903 18528 ittraining.loc. 
 +                                        ANlboBzlffzcYC1G10cQuxvRP3XC5bvDP1+v 
 +                                        Baxfh/B4BxgYGeQoDih2uGqLxzDExRWix2a2 
 +                                        B95uAkDGClaGdlFkYtU4voIQJWuAx0Goo6Xa 
 +                                        omEyrIdLGqoj9e2vdn6j2lVpJik9YgCTxP2G 
 +                                        ShVYc632XsAFPXN6SJrR3QdKo1x6KM1uPYdd 
 +                                        OxAX9fGNYj59ZXG84slUxreDejoqn2k8Rx68 
 +                                        gxuzkIY3oM5aUtbvL8bwjflk121mWxQ4vVhW 
 +                                        R/KNk9SEc6AbZSqJXwmlY/vReOA+pvPCdLYJ 
 +                                        7Wf+S9kr1i1xT1y078Iqz2twASWBjBnP/adG 
 +                                        QtKpn9SvKUEzICTaNA== ) 
 +... 
 +</code> 
 + 
 +Dans cette section on constate : 
 + 
 +  * L'ID de la clef **18528** utilisée pour la signature, soit la ZSK 
 +  * La date et l'heure de la signature **20251207113903** 
 +  * La date et l'heure de l'expiration de la signature **20260106113903** 
 + 
 +Configurez Bind pour qu'il utilise le fichier signé : 
 + 
 +<code> 
 +root@debian12:/etc/bind/zones# vi ../named.conf.default-zones  
 +root@debian12:/etc/bind/zones# cat ../named.conf.default-zones  
 +// prime the server with knowledge of the root servers 
 +zone "."
 +        type hint; 
 +        file "/usr/share/dns/root.hints"; 
 +}; 
 + 
 +// be authoritative for the localhost forward and reverse zones, and for 
 +// broadcast zones as per RFC 1912 
 + 
 +zone "localhost"
 +        type master; 
 +        file "/etc/bind/db.local"; 
 +}; 
 + 
 +zone "127.in-addr.arpa"
 +        type master; 
 +        file "/etc/bind/db.127"; 
 +}; 
 + 
 +zone "0.in-addr.arpa"
 +        type master; 
 +        file "/etc/bind/db.0"; 
 +}; 
 + 
 +zone "255.in-addr.arpa"
 +        type master; 
 +        file "/etc/bind/db.255"; 
 +}; 
 + 
 +zone "ittraining.loc"
 +    type master; 
 +    file "/etc/bind/zones/ittraining.loc.signed"; 
 +    forwarders { }; 
 +}; 
 + 
 +zone "2.0.10.in-addr.arpa"
 +    type master; 
 +    file "/etc/bind/zones/db.2.0.10.hosts"; 
 +    forwarders { }; 
 +}; 
 +</code> 
 + 
 +Redémarrez le service **named** : 
 + 
 +<code> 
 +root@debian12:/etc/bind/zones# systemctl restart named 
 + 
 +root@debian12:/etc/bind/zones# systemctl status named 
 +● named.service - BIND Domain Name Server 
 +     Loaded: loaded (/lib/systemd/system/named.service; enabled; preset: enabled) 
 +     Active: active (running) since Sun 2025-12-07 14:02:52 CET; 7s ago 
 +       Docs: man:named(8) 
 +   Main PID: 33227 (named) 
 +     Status: "running" 
 +      Tasks: 18 (limit: 19123) 
 +     Memory: 109.0M 
 +        CPU: 88ms 
 +     CGroup: /system.slice/named.service 
 +             └─33227 /usr/sbin/named -f -u bind 
 + 
 +Dec 07 14:02:52 debian12.ittraining.loc named[33227]: network unreachable resolving './DNSKEY> 
 +Dec 07 14:02:52 debian12.ittraining.loc named[33227]: network unreachable resolving './NS/IN'> 
 +Dec 07 14:02:52 debian12.ittraining.loc named[33227]: network unreachable resolving './DNSKEY> 
 +Dec 07 14:02:52 debian12.ittraining.loc named[33227]: network unreachable resolving './NS/IN'> 
 +Dec 07 14:02:52 debian12.ittraining.loc named[33227]: network unreachable resolving './DNSKEY> 
 +Dec 07 14:02:52 debian12.ittraining.loc named[33227]: network unreachable resolving './NS/IN'> 
 +Dec 07 14:02:52 debian12.ittraining.loc named[33227]: network unreachable resolving './DNSKEY> 
 +Dec 07 14:02:52 debian12.ittraining.loc named[33227]: network unreachable resolving './NS/IN'> 
 +Dec 07 14:02:52 debian12.ittraining.loc named[33227]: managed-keys-zone: Key 20326 for zone .> 
 +Dec 07 14:02:52 debian12.ittraining.loc named[33227]: managed-keys-zone: Key 38696 for zone .> 
 +</code> 
 + 
 +Demandez l'enregistrement SOA du DNS local : 
 + 
 +<code> 
 +root@debian12:/etc/bind/zones# dig @debian12.ittraining.loc ittraining.loc SOA 
 + 
 +; <<>> DiG 9.18.41-1~deb12u1-Debian <<>> @debian12.ittraining.loc ittraining.loc SOA 
 +; (1 server found) 
 +;; global options: +cmd 
 +;; Got answer: 
 +;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42848 
 +;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 
 + 
 +;; OPT PSEUDOSECTION: 
 +; EDNS: version: 0, flags:; udp: 1232 
 +; COOKIE: a42dbdb3e931b5b40100000069357b611d705b9c213bca01 (good) 
 +;; QUESTION SECTION: 
 +;ittraining.loc.                        IN      SOA 
 + 
 +;; ANSWER SECTION: 
 +ittraining.loc.         259200  IN      SOA     debian12.ittraining.loc. root.debian12.ittraining.loc. 2025120703 28800 7200 2419200 86400 
 + 
 +;; Query time: 0 msec 
 +;; SERVER: 10.0.2.46#53(debian12.ittraining.loc) (UDP) 
 +;; WHEN: Sun Dec 07 14:04:33 CET 2025 
 +;; MSG SIZE  rcvd: 121 
 +</code> 
 + 
 +Demandez l'enregistrement SOA et sa signature du DNS local : 
 + 
 +<code> 
 +root@debian12:/etc/bind/zones# dig @debian12.ittraining.loc ittraining.loc SOA +dnssec 
 +  
 +; <<>> DiG 9.18.41-1~deb12u1-Debian <<>> @debian12.ittraining.loc ittraining.loc SOA +dnssec 
 +; (1 server found) 
 +;; global options: +cmd 
 +;; Got answer: 
 +;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56632 
 +;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 
 + 
 +;; OPT PSEUDOSECTION: 
 +; EDNS: version: 0, flags: do; udp: 1232 
 +; COOKIE: 14cfa09283a1f4980100000069357b95d90b040d04f37247 (good) 
 +;; QUESTION SECTION: 
 +;ittraining.loc.                        IN      SOA 
 + 
 +;; ANSWER SECTION: 
 +ittraining.loc.         259200  IN      SOA     debian12.ittraining.loc. root.debian12.ittraining.loc. 2025120703 28800 7200 2419200 86400 
 +ittraining.loc.         259200  IN      RRSIG   SOA 8 2 259200 20260106113903 20251207113903 18528 ittraining.loc. ANlboBzlffzcYC1G10cQuxvRP3XC5bvDP1+vBaxfh/B4BxgYGeQoDih2 uGqLxzDExRWix2a2B95uAkDGClaGdlFkYtU4voIQJWuAx0Goo6XaomEy rIdLGqoj9e2vdn6j2lVpJik9YgCTxP2GShVYc632XsAFPXN6SJrR3QdK o1x6KM1uPYddOxAX9fGNYj59ZXG84slUxreDejoqn2k8Rx68gxuzkIY3 oM5aUtbvL8bwjflk121mWxQ4vVhWR/KNk9SEc6AbZSqJXwmlY/vReOA+ pvPCdLYJ7Wf+S9kr1i1xT1y078Iqz2twASWBjBnP/adGQtKpn9SvKUEz ICTaNA== 
 + 
 +;; Query time: 0 msec 
 +;; SERVER: 10.0.2.46#53(debian12.ittraining.loc) (UDP) 
 +;; WHEN: Sun Dec 07 14:05:25 CET 2025 
 +;; MSG SIZE  rcvd: 423 
 +</code> 
 + 
 +====3.9 - La chaîne de confiance DNS==== 
 + 
 +Créez le DSSet à partir de la clef publique KSK : 
 + 
 +<code> 
 +root@debian12:/etc/bind/zones# dnssec-dsfromkey -2 Kittraining.loc.+008+63515.key 
 +ittraining.loc. IN DS 63515 8 2 909F3FC8A2B34083B1268C0FE7FDAA851252626CDCDF4D8B51D97CB98C62FDA4 
 + 
 +root@debian12:/etc/bind/zones# ls -l | grep dsset 
 +-rw-r--r-- 1 root bind    99 Dec  7 13:39 dsset-ittraining.loc. 
 + 
 +root@debian12:/etc/bind/zones# cat dsset-ittraining.loc.  
 +ittraining.loc.         IN DS 63515 8 2 909F3FC8A2B34083B1268C0FE7FDAA851252626CDCDF4D8B51D97CB9 8C62FDA4 
 +</code> 
 + 
 +Il conviendrait maintenant d'insérer un enregistrement DSSet dans le DNS du domaine parent, dans notre cas **.loc**. Cet enregistrement comportera l'ID de la clef, soit **63515**, ainsi que le hash **909F3FC8A2B34083B1268C0FE7FDAA851252626CDCDF4D8B51D97CB98C62FDA4** 
 + 
 +Quand DNSSEC ne peut pas être validé, le résultat routorné par la commande dig est **SERVFAIL** : 
 + 
 +<code> 
 +root@debian12:/etc/bind/zones# dig www.dnssec-failed.org +dnssec 
 + 
 +; <<>> DiG 9.18.41-1~deb12u1-Debian <<>> www.dnssec-failed.org +dnssec 
 +;; global options: +cmd 
 +;; Got answer: 
 +;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 42077 
 +;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1 
 + 
 +;; OPT PSEUDOSECTION: 
 +; EDNS: version: 0, flags: do; udp: 1232 
 +; COOKIE: 5321c94da922f6ca010000006935867f45a42de06e00bfa1 (good) 
 +;; QUESTION SECTION: 
 +;www.dnssec-failed.org.         IN      A 
 + 
 +;; Query time: 140 msec 
 +;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP) 
 +;; WHEN: Sun Dec 07 14:51:59 CET 2025 
 +;; MSG SIZE  rcvd: 78 
 +</code>
  
 ----- -----
 Copyright © 2025 Hugh Norris. Copyright © 2025 Hugh Norris.
  
Menu