💾 Archived View for zergy.net › blog › 006-securiser-bind.gmi captured on 2023-07-22 at 16:35:58. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2023-05-24)
-=-=-=-=-=-=-
Le service DNS est bien souvent un service assez critique dont dépendent plusieurs autres, si vous utilisez BIND pour remplir cette tâche, voici quelques astuces pour le rendre plus sûr. Comme toujours, cet article est plus centré sur Debian, mais peut être adapté à d'autres distributions.
Nous utiliseront dans ce tutorial la zone test.net, considérerons que celle-ci est actuellement en place sur un serveur primaire et un secondaire de façon standard et qu'elle fonctionne correctement. Ces deux serveurs utilisent le logiciel BIND.
Les chroot consiste à enfermer un programme dans une arborescence de votre système de fichier, ne lui donnant qu'une vue très partielle du système, lui évitant de se répandre partout en cas de problème, voyons les modifications à faire dans le cas de BIND.
Notre chroot enfermera BIND dans le répertoire /var/chroot/bind9/.
OPTIONS="-u bind"
OPTIONS="-u bind -t /var/chroot/bind9"
# mkdir -p /var/chroot/bind9{etc,dev,var/cache/bind,var/run/named}
# mknod /var/chroot/bind9/dev/null c 1 3 # mknod /var/chroot/bind9/dev/random c 1 8 # chmod 660 /var/chroot/bind9/dev/{null,random}
# mv /etc/bind /var/chroot/bind9/etc/ # ln -s /var/chroot/bind9/etc/bind /etc/bind
# chown -R bind:bind /etc/bind/* # chmod 775 /var/chroot/bind9/var/{cache/bind,run/named} # chgrp bind /var/chroot/bind9/var/{cache/bind,run/named}
PIDFILE=/var/chroot/bind9/var/run/named/named.pid
# echo "$AddUnixListenSocket /var/chroot/bind9/dev/log" > /etc/rsyslog.d/bind-chroot.conf
# /etc/init.d/rsyslog restart && /etc/init.d/bind9 start
Plusieurs options peuvent êtres modifiées dans le fichier named.conf.options :
listen-on { 127.0.0.1; 10.0.0.1; }; listen-on-v6 { ::1; fd00:a::1; };
version "none";
allow-query { localhost;}; allow-recursion { localhost; }; allow-transfer { none; };
Les clefs RNDC sont un système de chiffrement asymétrique utilisé par BIND pour chiffrer ses communications. Les clef RNDC utilisent l'algorythme MD5 et ont une longueur maximum de 512 bits.
Générer un clef RNDC avec la commande rndc-confgen. Indiquer les options -b pour la longueur de la clef, et -k pour lui donner un nom :
# rndc-confgen -b 512 -k test.net
Une fois la clef généré, la commande vous indique où mettre les différentes informations, cependant, celle-ci sont pas très correct dans le cas de Debian, voici comment faire :
key "test.net" { algorithm hmac-md5; secret "CpObjiWEGtRGKj1xsCbrbJbCjxZNyQr1+mHGAS56yP5912kv4OyQFoLDfHJ4HQEI8aNaR3VCwpiSSifSe9DwBQ=="; };
include "/etc/bind/rndc.key"; options { default-server localhost; default-port 953; default-key "test.net"; }; server localhost { key "test.net"; };
include "/etc/bind/rndc.key"; acl internals { 127.0.0.0/8; ::1/128; }; controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "test.net"; }; inet ::1 port 953 allow { ::1; } keys { "test.net"; }; };
# service bind9 restart
Il faut autoriser les serveurs à se contacter en ajoutant leurs réseaux et adresses IPv4 et IPv6 dans les options acl internal et controls
acl internals { 127.0.0.0/8; 10.0.0.0/8; ::1/128; fd00:a::/64; }; controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; 10.0.0.2; } keys { "test.net"; }; inet 10.0.0.1 port 953 allow { 127.0.0.1; 10.0.0.2; } keys { "test.net"; }; inet ::1 port 953 allow { ::1; fd00:a::2; } keys { "test.net"; }; inet fd00:a::1 port 953 allow { ::1; fd00:a::2; } keys { "test.net"; }; };
acl internals { 127.0.0.0/8; 10.0.0.0/8; ::1/128; fd00:a::/64; }; controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; 10.0.0.1; } keys { "test.net"; }; inet 10.0.0.2 port 953 allow { 127.0.0.1; 10.0.0.1; } keys { "test.net"; }; inet ::1 port 953 allow { ::1; fd00:a::1; } keys { "test.net"; }; inet fd00:a::2 port 953 allow { ::1; fd00:a::1; } keys { "test.net"; }; };
Il est possible de chiffrer les communications en indiquant une clef RNDC dans :
allow-transfer { 10.0.0.2; fd00:a::2; key "test.net"; }; allow-update { 10.0.0.2; fd00:a::2; key "test.net"; };
masters { 10.0.0.1; fd00:a::1; key "test.net"; }; allow-notify { 10.0.0.1; fd00:a::1; key "test.net"; };
Pour cela, je vous renvoi à l'article que j'ai écrit sur ce point.