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/