Ce document décrit une procédure semi-automatique de sécurisation du service DNS avec `bind9`. La version de `bind9` disponible sous [[Debian]] est maintenant 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é. == Mettre en place la protection == {{{ # stopper l'exécution de bind pendant son emprisonnement invoke-rc.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/ # fichiers racine DNS if [ -e /usr/share/dns ] ; then # dist ≥ Debian Buster mkdir -p usr/share cp -a /usr/share/dns usr/share/ fi # 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 if [ -e /var/run/bind ] ; then # dist < Debian Squeeze 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/ elif [ -e /var/run/named ] ; then # dist ≥ Debian Squeeze mv /var/run/named var/run/ chown -R root:bind var/run/named chmod -R u=rwX,g=rwX,o=rX var/run/named ln -s /var/chroot/bind/var/run/named /var/run/ else echo "*** ERREUR ***" fi if [ -e /run ] ; then # dist ≥ Debian Buster ln -s var/run fi # 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é (version Etch) [ -r /etc/default/syslogd ] && sed -i '/^SYSLOGD=/s#"\(.*\)"#"\1 -a /var/chroot/bind/dev/log"#' /etc/default/syslogd && invoke-rc.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 && invoke-rc.d syslog-ng restart # configurer rsyslog pour accepter les messages de logs depuis le bind emprisoné (rsyslog vient par défaut avec Lenny) [ -r /etc/rsyslog.conf ] && echo '$AddUnixListenSocket /var/chroot/bind/dev/log' >> /etc/rsyslog.d/bind9.conf && invoke-rc.d rsyslog restart # enfin, redemarrer bind dans sa prison ! invoke-rc.d bind9 start }}} == Vérifier que tout va bien == En surveillant, comme d'habitude, le contenu du fichier `/var/log/daemon.log` qui ne doit pas contenir d'erreur ou d'avertissement (''warning'') suite aux redémarrage 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 répertoire 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 }}} == Documentation == Une bonne documentation sur les autres aspects largement aussi importants (allow-transfer, allow-query) : [[http://www.security-labs.org/full-page.php3?page=411|Sécuriser un serveur de nom]] (à copier-coller et adapter ici si besoin). ---- [[CatégorieRecommandationsARI]]