💾 Archived View for zergy.net › blog › 006-securiser-bind.gmi captured on 2024-05-26 at 14:56:18. Gemini links have been rewritten to link to archived content

View Raw

More Information

⬅️ Previous capture (2024-03-21)

-=-=-=-=-=-=-

Blog /home/zergy - Sécuriser BIND

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.

Préliminaires

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.

Le Chroot

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

Réduire l'exposition de BIND

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; };

Utiliser des clefs RNDC

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ération de la clef et l'utiliser pour gérer BIND

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

Configuration maître/esclave

Fichier de configuration générale

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"; };
};

Fichiers de configuration de zones

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";
};

Utiliser DNSSEC

Pour cela, je vous renvoi à l'article que j'ai écrit sur ce point.

Utiliser DNSSEC sous BIND

Accueil du Blog

Accueil de la capsule