Modifications entre les versions 1 et 6 (s'étendant sur 5 versions)
Version 1 à la date du 2007-06-28 07:44:35
Taille: 3580
Commentaire: zou !
Version 6 à la date du 2009-10-12 00:30:56
Taille: 3479
Commentaire: une façon moins intrusive pour rsyslog
Texte supprimé. Texte ajouté.
Ligne 3: Ligne 3:
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é. 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é.
Ligne 12: Ligne 12:
mkdir -p /srv/chroot/bind
cd /srv/chroot/bind
mkdir -p /var/chroot/bind
cd /var/chroot/bind
Ligne 22: Ligne 22:
ln -s /srv/chroot/bind/etc/bind /etc/ ln -s /var/chroot/bind/etc/bind /etc/
Ligne 28: Ligne 28:
ln -s /srv/chroot/bind/var/cache/bind /var/cache/ ln -s /var/chroot/bind/var/cache/bind /var/cache/
Ligne 32: Ligne 32:
ln -s /srv/chroot/bind/var/run/bind /var/run/
Ligne 35: Ligne 34:
ln -s /var/chroot/bind/var/run/bind /var/run/
Ligne 37: Ligne 37:
usermod -d /srv/chroot/bind bind usermod -d /var/chroot/bind bind
Ligne 40: Ligne 40:
sed -i '/^OPTIONS=/c OPTIONS="-u bind -t /srv/chroot/bind"' /etc/default/bind9

# configurer sysklogd pour accepter les messages de logs depuis le bind emprisoné (version Sarge)
[ -r /etc/init.d/sysklogd -a ! -r /etc/default/syslogd ] && sed -i '/^SYSLOGD=/s#"\(.*\)"#"\1 -a /srv/chroot/bind/dev/log"#' /etc/init.d/sysklogd && invoke-rc.d sysklogd restart
sed -i '/^OPTIONS=/c OPTIONS="-u bind -t /var/chroot/bind"' /etc/default/bind9
Ligne 46: Ligne 43:
[ -r /etc/default/syslogd ] && sed -i '/^SYSLOGD=/s#"\(.*\)"#"\1 -a /srv/chroot/bind/dev/log"#' /etc/default/syslogd && invoke-rc.d sysklogd restart [ -r /etc/default/syslogd ] && sed -i '/^SYSLOGD=/s#"\(.*\)"#"\1 -a /var/chroot/bind/dev/log"#' /etc/default/syslogd && invoke-rc.d sysklogd restart
Ligne 49: Ligne 46:
[ -r /etc/syslog-ng/syslog-ng.conf ] && sed -i '/unix-stream("\/dev\/log");/a\\t# bind9 chroot\n\tunix-stream("/srv/chroot/bind/dev/log");' /etc/syslog-ng/syslog-ng.conf && invoke-rc.d syslog-ng restart [ -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
Ligne 54: Ligne 54:

{i} Il n'y a pas de moyen plus propre pour `sysklogd` dans Sarge (BogueDebian:241350)
Ligne 65: Ligne 63:
17938 ? Ss 0:00 /usr/sbin/named -u bind -t /srv/chroot/bind
17939 ? S 0:00 /usr/sbin/named -u bind -t /srv/chroot/bind
17941 ? S 0:00 /usr/sbin/named -u bind -t /srv/chroot/bind
17942 ? S 0:00 /usr/sbin/named -u bind -t /srv/chroot/bind
17943 ? S 0:00 /usr/sbin/named -u bind -t /srv/chroot/bind
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
Ligne 72: Ligne 70:
Et on peut aussi vérifier que le répertoire racine du processus `named` est bien devenu `/srv/chroot/bind` : Et on peut aussi vérifier que le répertoire racine du processus `named` est bien devenu `/var/chroot/bind` :
Ligne 76: Ligne 74:
lrwxrwxrwx 1 root root 0 Jul 13 14:05 /proc/17938/root -> /srv/chroot/bind lrwxrwxrwx 1 root root 0 Jul 13 14:05 /proc/17938/root -> /var/chroot/bind
Ligne 82: Ligne 80:
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). 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).
Ligne 84: Ligne 82:
["CatégorieRecommandationDRI"] [[CatégorieRecommandationsARI]]

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/

# 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é (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) : Sécuriser un serveur de nom (à copier-coller et adapter ici si besoin).


CatégorieRecommandationsARI

DNS/Sécurisation (dernière édition le 2020-05-20 00:05:20 par JeanChristopheAndré)