Niveau : Expert

Bind et DNS

Configuration de Bind en chroot pour améliorer quelque peu la sécurité

Tutoriel par (Alsacréations, Strasbourg)
Créé le , mis à jour le (46539 lectures)
Tags : développement, bind, dns

Bind

Bind

Bind

BIND est le serveur DNS le plus utilisé sur Internet. Nous n'allons pas détailler sa configuration complète ici car elle nécessite beaucoup de développements, mais nous allons modifier son exécution pour qu'elle se fasse de façon plus sécurisée, dans une prison (en environnement chrooté). BIND est parfois exécuté avec des droits root, afin d'utiliser le port privilégié 53 (TCP, UDP), inférieur à 1024. Dans un environnement restreint, il ne pourra pas voir ou avoir accès aux fichiers à l'extérieur de sa propre arborescence. Cela permet de limiter la quantité d'accès que n'importe quel individu malveillant pourrait gagner en exploitant une vulnérabilité de BIND.

Cela suffira dans le cadre de cet ensemble de tutoriels qui visent à mettre en place un serveur d'hébergement. L'utilisation éventuelle d'un panel d'administration se chargera elle-même de la configuration plus avancée avec gestion des zones des sites hébergés, sinon il sera amplement suffisant avec gestion de vos zones DNS chez un registrar externe (tel que Gandi ou OVH).

Chroot est une commande des systèmes d'exploitation UNIX permettant de changer pour un programme le répertoire racine de la machine hôte.

Commencez par arrêter le service (ici en version 9) :

/etc/init.d/bind9 stop

Editez le fichier /etc/default/bind9 pour ajouter l'option -t suivie du chemin dans lequel nous voulons stocker l'environnement bind en chroot.

vi /etc/default/bind9

OPTIONS="-u bind -t /var/lib/named"

La suite des commandes permettra de mettre en place cet environnement et ses droits dans /var/lib/named/ :

mkdir -p /var/lib/named/etc

mkdir /var/lib/named/dev

mkdir -p /var/lib/named/var/cache/bind

mkdir -p /var/lib/named/var/run/bind/run

mv /etc/bind /var/lib/named/etc

ln -s /var/lib/named/etc/bind /etc/bind

mknod /var/lib/named/dev/null c 1 3

mknod /var/lib/named/dev/random c 1 8

chmod 666 /var/lib/named/dev/null /var/lib/named/dev/random

chown -R bind:bind /var/lib/named/var/*

chown -R bind:bind /var/lib/named/etc/bind

Editez la configuration de syslogd le daemon principal de log pour indiquer le nouveau chemin employé par bind.

Selon votre OS, il peut s'agir de syslogd ou rsyslogd.

Sous Debian 4.0 Etch : vi /etc/default/syslogd

SYSLOGD="-a /var/lib/named/dev/log"

Sous Debian 5.0 Lenny et supérieures, éditez vi /etc/rsyslog.d/bind-chroot.conf et ajoutez la ligne

$AddUnixListenSocket /var/lib/named/dev/log

Redémarrez le tout :

Sous Debian 4.0 Etch : /etc/init.d/sysklogd restart

Sous Debian 5.0 Lenny et supérieures : /etc/init.d/rsyslog restart

Redémarrage de bind : /etc/init.d/bind9 start

Note : Avec le panel DTC, les fichiers de zone DNS sont stockés dans /var/lib/dtc/etc/zones/