mercredi 4 mars 2009

Configuration d'un serveur bind

Nous allons commencer par mettre bind dans un environnement chrooté afin de limiter la casse en cas de hack

Stopper le serveur
/etc/init.d/bind9 stop

Editer le fichier /etc/default/bind9
OPTIONS="-u bind -t /var/lib/named"

Puis créer quelques dossiers
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

Copier la configuration dans l'environnement chrooté
mv /etc/bind /var/lib/named/etc

Faire les liens symboliques
ln -s /var/lib/named/etc/bind /etc/bind

Le necessaire dans /dev
mknod /var/lib/named/dev/null c 1 3
mknod /var/lib/named/dev/random c 1 8

Donner les bons droits
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

Et copier le fichier rndc.key
cp /etc/bind/bind/rndc.key /etc/bind

Puis editer le syslog /etc/default/syslogd
SYSLOGD="-a /var/lib/named/var/log"

Enfin, redemmarer le tout
/etc/init.d/sysklogd restart
/etc/init.d/bind9 start

Nous allons maintenant configurer bind dans cette environnement chrooté

Editer le fichier /etc/bind/bind/named.conf.options et ajouter les lignes suivantes dans options {}

#Bind resoudra les domaines du monde entier seulement pour la machine locale
#les autres n'auront le droit qu'aux seuls zones pour lesquelles le DNS est autoritaire

allow-recursion{
127.0.0.1;
192.168.1.1; #IP SERVEUR LOCAL
};

#On autorisera les transferts de zones uniquement pour les DNS secondaires

allow-transfer{
none; #SEULEMENT LES SECONDAIRES
};

#IP sur laquelle on ecoute, ici l'ip du serveur local

listen-on{
192.168.1.1; #IP SERVEUR
};

Puis pour creer une nouvelle zone, editer /etc/bind/bind/named.conf.local et inserer les lignes ci-dessous

zone "test.com" {
type master;
file "test.com.hosts";
};

Dans le fichier correspondant /var/lib/named/var/cache/bind/test.com.hosts, mettre ceci

@ IN SOA ns1.test.com postmaster.test.com (
2009030401 ; serial
21600 ; refresh after 6 hours
3600 ; retry after 1 hour
604800 ; expires after 1 week
86400 ) ; minimum TTL of 1 day

IN NS ns1.test.com.
IN NS ns2.test.com.
IN MX 10 mail.test.com.

IN A 192.168.1.1
ww1 IN A 192.168.1.1
mail IN A 192.168.1.1
ns1 IN A 10.0.1.2
ns2 IN A 10.0.1.3

Un peu d'explications

ns1.test.com est le dns primaire
postmaster.test.com signifie que postmaster@test.com est l'adresse principale pour ce domaine
le serial doit etre de la forme yyyymmdd0x où x est incrementé à chaque maj quotidienne

Pour tester sous linux sur la machine locale, ne pas oublier de mettre l'ip du serveur local en premier dans /etc/resolv.conf
un nslookup google.fr 192.168.1.1 fonctionnera en local et ne doit pas fonctionner depuis une autre ip du reseau
un nslookup test.com 192.168.1.1 doit dans les 2 cas (reseau & local) retourner 192.168.1.1

Ensuite nous pouvons proteger un peu plus Bind avec fail2ban contre une attaque DDOS (Distributed Denial of Service). Il faut que fail2ban soit déjà installé.

Dans /etc/bind/bind/named.conf.local ajouter ceci

logging {
channel security_file {
file "/var/log/named/security.log" versions 3 size 30m;
severity dynamic;
print-time yes;
};
category security {
security_file;
};
};

Puis dans /etc/fail2ban/jail.conf ou jail.local selon votre configuration, modifier les lignes suivantes

[named-refused-udp]
enabled = true

[named-refused-tcp]
enabled = true

Enfin pour terminer on reboote le tout

/etc/init.d/bind9 restart
/etc/init.d/fail2ban restart

Pour en savoir un peu plus sur la configuration de Bind:

http://www.cgsecurity.org/Articles/dns_bind.html
http://www.linux-kheops.com/doc/redhat72/rhl-rg-fr-7.2/s1-bind-configuration.html
http://www.alsacreations.com/tuto/lire/623-Bind-dns-chroot.html

1 commentaire:

  1. Bonjour,

    Comment arrivez-vous, à publier vos logs en dehors de votre chroot ? (/var/log/named/security.log)
    J'essaye de faire la même chose mais il m'en est impossible.

    RépondreSupprimer