clarification maj dynamique et typos

This commit is contained in:
Tom David--Broglio 2024-02-05 12:14:47 +01:00
parent 8be2a413a4
commit 4dd6f03248

View file

@ -210,7 +210,7 @@ ftp CNAME ftp.example.net.
* `allow-transfer` : spécifie les adresses des serveurs replica ou clefs [TSIGs](/Glossaire.md#tsig) autorisées à faire des requêtes AXFR (transfert de zone). Par défaut, toutes les adresses sont autorisées, il est impératif de restreindre les autorisations.
* `allow-recursion` : spécifie les adresses autorisées à faire des requêtes DNS récursives. À restreindre impérativement également.
* `allow-update` : spécifie les adresses ou clefs [TSIGs](/Glossaire.md#tsig) autorisées à mettre à jour dynamiquement des informations dans leur zone. Par défaut, aucune adresse n'est autorisée.
* `update-policy` : spécifie finement les droit de modification des entrées pour les adresses ou clefs [TSIGs](/Glossaire.md#tsig) autorisées via une liste d'ACL, **Attention** : on ne peut pas définir à la fois `allow-update` et `update-policy`. voir [Configuration update-policy](/HowtoBind#configuration-update-policy)
* `update-policy` : spécifie finnement les droit de modification des entrées pour les adresses ou clefs [TSIGs](/Glossaire.md#tsig) autorisées via une liste d'ACL, **Attention** : on ne peut pas définir à la fois `allow-update` et `update-policy`. voir [Configuration update-policy](/HowtoBind#configuration-update-policy)
## chroot
@ -418,24 +418,125 @@ Options :
## Mise à jour dynamique
La mise à jour dynamique permet de mettre à jour une zone avec des demandes de mise à jour
"Dynamic Updates" envoyés par le réseau au server authoritaire pour ajouter ou supprimer des champs :
La mise à jour dynamique permet de mettre à jour une zone avec des demandes de mise à jour `Dynamic Updates` envoyés par le réseau au server autoritaire pour ajouter ou supprimer des champs ( voir RFC2136 )
* Il n'y a plus besoin de se connecter au serveur authoritaire pour changer le fichier de zone
* Il n'y a plus besoin de se connecter au serveur autoritaire pour changer le fichier de zone
* La syntaxe d'une demande est vérifiée avant d'être envoyé pour éviter d'ajouter des entrées incorrectes.
* Le serial SOA est incrémenté automatiquement.
* Le SOA est incrémenté automatiquement.
* Dans une zone DNSSEC, le changement est immédiatement signé.
* On peut facilement scripter ces mises à jours ( certbot par exemple )
* **Important** : Les directives `$INCLUDE` et `$GENERATE` d'un fichier de zone ne pourront plus être utilisé. Pour conserver cette fonctionnalité, on recommande d'activer la mise à jour uniquement sur des sous domaines/zone d'une zone qui utilise ces directives (ces sous-zones seront alors incluses).
> **Attention** : lorsqu'on active le `dynamic-update` sur une zone, il devient difficile d'éditer le fichier de zone à la main, voir [màj manuelle](#mise-à-jour-manuelle-de-la-zone).
### Activer la mise à jour dynamique sur une zone
Pour faire la mise à jour dynamique, Bind génère un fichier de journal `.jnl` binaire du même nom que la zone, contenant l'historique des modifications apportées à la zone.
Il est possible de mettre à jour le fichier de zone directement mais ce n'est pas recommandé car on va devoir temporairement désactiver la mise à jour dynamique "freeze".
L'historique est
> **Note** : la synchronisation avec le fichier de zone n'est pas faite en temps réel, cela se fait toutes les 15 minutes en général, on peut forcer la synchronisation avec `$ rndc sync [nom_zone]`.
Pour éviter de donner à Bind le droit d'éditer tous les fichiers dans `/etc/bind`, il est préférable de placer les fichiers de zones mise à jour dynamique dans un dossier séparer ou bind à l'accès en écriture, par exemple :
~~~{.bash}
$ mkdir -p /etc/bind/dynamic-zones
$ chown -R bind:bind /etc/bind/dynamic-zones
~~~
> **Attention** : la zone ne doit pas contenir de directives telles que `$INCLUDE` et `$GENERATE` ... celles-ci seront perdues à la synchronisation avec le fichier journal
On peut alors mettre en place le fichier de zone dans ce dossier...
~~~{.bash}
# copier ou créer un fichier de zone avec les bon droits
$ touch /etc/bind/dynamic-zones/db.example.com
$ chown bind:bind /etc/bind/dynamic-zones/db.example.com
~~~
Puis activer la mise à jour dynamique dans sa configuration :
~~~
zone "example.com" in {
type master;
file "/etc/bind/dynamic-zones/db.example.com";
allow-update { key "custom-tsig"; localhost ;};
allow-transfer { key "secondary-tsig"; 1.2.3.4 ; localhost ; };
// update-policy {
// grant custom-tsig name _acme-challenge.example.com. txt;
// };
// serial-update-method ( date | increment | unixtime );
};
~~~
* `allow-update` permet d'autoriser la mise à jour de toute la zone avec des IPs ou clefs TSIGs tandis que `update-policy` permet de contrôler finement quels champs peuvent être mis à jour, voir [configuration update-policy](#configuration-update-policy)
* `allow-transfer` pour permettre de transférer la zone, utilisé pour que le client puisse aussi récupérer la zone
* `serial-update-method` permet de définir le mécanisme de mise à jour du serial SOA (incrément par défaut).
> Voir [mise en place d'une clef tsig](#mise-en-place-de-clefs-tsigs) si besoin
On peut ensuite tester le fonctionnement en jouant nsupdate ou nsvi pour ajouter ou supprimer une entrée.
Si le nsupdate fonctionne, on peut alors vérifier avec un dig normal ou axfr ( par exemple `dig -t axfr example.com @localhost` sur le server dns) ou encore mieux, en [controlant le journal](#contrôler-le-journal-dune-zone).
### client nsupdate
nsupdate est utilitaire en ligne de commande interactif fournit le paquet de bind `bind9-dnsutils` sur Debian.
Celui-ci permet d'envoyer des demandes de mise à jour à un serveur dns, avec ou sans TSIGs :
~~~{.bash}
# nsupdate [-y [hmac:]keyname:secret]
$ nsupdate -y hmac-sha512:happydomain:"3JtiVQEBFXtQeU/3PorKpCV7jM1bZEEzkdD1zb9emvwaBZFSgYxOXV41OdSeeHb5dcud+SvNo47jEf5yRwfSkQ=="
> server <adresse_server> [port]
> zone example.com
> update add www.example.com. 172800 IN A 192.168.254.7
> send
>
~~~
> Une réponse vide après send indique que la mise à jour à eu lieu. Sinon un code d'erreur sera affiché.
Le manuel contient plusieurs examples.
### nsdiff
Documentation : <https://dotat.at/prog/nsdiff/>
nsdiff est outil permettant de faciliter l'utilisation de nsupdate avec différents utilitaires:
* nsdiff : comme son nom l'indique, permet de voir la diff entre une ancienne et une nouvelle vertsion de la zone, sa sortie peut directement etre fournie à nsupdate : `nsdiff | nsupdate`
* nspatch : joue `nsdiff | nsupdate` et n'affiche rien s'il n'y a pas d'erreur, utile dans un CRON
* nsvi : fait un transfert de zone, ouvre la zone dans vi (ou un autre editeur) et envoie les mise à jour avec `nsdiff | nsupdate`
> **Remarque** : les enregistrements dnssec sont retirés avant de passer la zone à l'éditeur et il n'y a pas besoin de s'occuper du SOA
Exemples d'utilisations (WIP) :
~~~{.bash}
# editer une zone dynamique sur le serveur dns ... (avec localhost dans allow-update)
# nsvi example.com
# editer une zone dynamique avec la clef tsig associée
~~~
### Contrôler le journal d'une zone
On peut vérifier le contenu du journal
~~~{.bash}
# voir les changement dans le fichier de journal .jnl
$ named-journalprint [fichier_zone_jnl]
# si il y a des changement, on peut les synchroniser et vider le journal
$ rndc sync -clean example.com
# desactiver la mise à jour dynamique
~~~
### Mise à jour manuelle de la zone
Il est possible de mettre à jour le fichier de zone directement, mais ce n'est pas recommandé, car on va devoir temporairement désactiver la mise à jour dynamique "freeze".
Avant cela, il est préférable de vérifier l'état du journal et de la vider ( voir [contrôler le journal](#contrôler-le-journal-dune-zone) )
~~~{.bash}
# désactiver la mise à jour dynamique
$ rndc freeze [nom_zone]
# Modification manuelle de la zone avec vim ou autre
$ named-checkzone <nom_zone> <fichier_de_zone>
@ -443,17 +544,9 @@ $ rndc unfreeze [nom_zone]
$ rndc reload [nom_zone]
~~~
Comme cela est compliqué et risqué, il est préférable d'utiliser un outil comme nsdiff avec nsvi qui va nous permettre d'éditer la zone comme si on l'edite à la main, mais va envoyer les changements par demande de mise à jour.
Comme cela est compliqué et risqué, il est préférable d'utiliser un outil comme nsdiff avec nsvi qui va nous permettre d'éditer la zone comme si on l'édite à la main, mais va envoyer les changements par demande de mise à jour, voir [nsdiff](#nsdiff).
Voir : https://dotat.at/prog/nsdiff/ (documentation à venir)
> *Note* : la synchronisation avec le fichier réel de zone n'est pas faite en temps réel, cela se fait toutes les 15 minutes en général, on peut forcer la synchronisation avec :
~~~
$ rndc sync [nom_zone]
~~~
### Petit guide TSIG
### Mise en place de clefs TSIGs
On peut utiliser nsupdate, ou n'importe quel client, pour mettre à jour la zone en s'authentifiant avec une clef [TSIG](/Glossaire.md#tsig).
Pour mettre celle-ci en place, il faut ...
@ -485,20 +578,6 @@ $ named-checkconf /etc/bind/named.conf && rndc reload
$ rndc tsig-list
~~~
On peut alors confirmer le fonctionnement avec nsupdate
~~~{.bash}
$ nsupdate -y hmac-sha512:happydomain:"3JtiVQEBFXtQeU/3PorKpCV7jM1bZEEzkdD1zb9emvwaBZFSgYxOXV41OdSeeHb5dcud+SvNo47jEf5yRwfSkQ=="
> server <adresse_server> [port]
> zone example.com
> update add www.example.com. 172800 IN A 192.168.254.7
> send
>
~~~
Une réponse vide après send indique que la mise à jour à eu lieu. Sinon un code d'erreur sera affiché.
## DNSSEC
### Ajouter la gestion DNSSEC