Comment protéger bind9 sous Debian
Depuis Debian "Sarge", bind9 est automatiquement lancée sous l'utilisateur bind par défaut, mais toujours pas en chroot, ce qui serait pourtant une bonne idée du point de vue sécurité.
Aussi, depuis que bind9 est lancé via systemd, il est nécessaire de lier la socket notify de systemd dans le chroot, cf https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1037966#37
Enfin, penser à mettre à jour le contenu de /var/chroot/bind/usr/share/dns/ depuis /usr/share/dns/ (pour les serveurs racine et pour DNSSEC) après chaque mise à niveau Debian !
# stopper l'exécution de bind pendant son emprisonnement
/etc/init.d/bind9 stop
# créer la prison pour bind
mkdir -p /var/chroot/bind
cd /var/chroot/bind
mkdir -p dev etc var/cache var/run
cp -a /dev/log /dev/null /dev/random dev/
cp -p /etc/localtime etc/
# la configuration
mv /etc/bind etc/
chown -R root:bind etc/bind
chmod -R u=rwX,g=rX,o= etc/bind
ln -s /var/chroot/bind/etc/bind /etc/
# le cache
mv /var/cache/bind var/cache/
chown -R bind:bind var/cache/bind
chmod -R u=rwX,g=rX,o= var/cache/bind
ln -s /var/chroot/bind/var/cache/bind /var/cache/
# le pid
mv /var/run/bind var/run/
chown -R bind:bind var/run/bind/run
chmod -R u=rwX,g=rX,o= var/run/bind/run
ln -s /var/chroot/bind/var/run/bind /var/run/
# changer le répertoire personnel de bind vers sa future prison
usermod -d /var/chroot/bind bind
# modifier les options de demarrage de bind
sed -i '/^OPTIONS=/c OPTIONS="-u bind -t /var/chroot/bind"' /etc/default/bind9
# configurer sysklogd pour accepter les messages de logs depuis le bind emprisoné
[ -r /etc/init.d/sysklogd ] && sed -i '/^SYSLOGD=/s#"\(.*\)"#"\1 -a /var/chroot/bind/dev/log"#' /etc/default/sysklogd && /etc/init.d/sysklogd restart
# configurer syslog-ng pour accepter les messages de logs depuis le bind emprisoné
[ -r /etc/syslog-ng/syslog-ng.conf ] && sed -i '/unix-stream("\/dev\/log");/a\\t# bind9 chroot\n\tunix-stream("/var/chroot/bind/dev/log");' /etc/syslog-ng/syslog-ng.conf && /etc/init.d/syslog-ng restart
# configurer pour RSYSLOG pour accepter les messages de logs depuis le bind emprisonné
[ -r /etc/rsyslog.conf ] && echo "\$AddUnixListenSocket /var/chroot/bind/dev/log" > /etc/rsyslog.d/chroot-bind.conf
# enfin, redemarrer bind dans sa prison !
/etc/init.d/bind9 start
Vérifier que tout va bien
En surveillant le contenu du fichier /var/log/daemon.log qui ne doit pas contenir d'erreur ou de warning suite aux redemarrage des deux services.
En faisant un ps ax | grep named, le résultat doit ressembler à cela :
# ps ax | grep named 17938 ? Ss 0:00 /usr/sbin/named -u bind -t /var/chroot/bind 17939 ? S 0:00 /usr/sbin/named -u bind -t /var/chroot/bind 17941 ? S 0:00 /usr/sbin/named -u bind -t /var/chroot/bind 17942 ? S 0:00 /usr/sbin/named -u bind -t /var/chroot/bind 17943 ? S 0:00 /usr/sbin/named -u bind -t /var/chroot/bind
Et on peut aussi vérifier que le repertoire racine du processus named est bien devenu /var/chroot/bind :
# ls -l /proc/17938/root lrwxrwxrwx 1 root root 0 Jul 13 14:05 /proc/17938/root -> /var/chroot/bind
Lien
Une bonne doc sur les autres aspects largement aussi importants (allow-transfer, allow-query) : Sécuriser un serveur de nom (a copier-coller et adapter ici si besoin).
CatégorieSécurité CatégorieManuel CatégorieDNS CatégorieLogiciel