BIND DNS : query (cache) ‘*/IN’ denied

Ce matin en regardant les logs de mon serveur nouvellement réinstallé, je vois des milliers de lignes liées à BIND DNS :

1
2
3
4
5
...
09-Oct-2015 22:23:29.076 client 74.125.181.49#32935: query (cache) 'www.site.fr/A/IN' denied
09-Oct-2015 22:23:29.086 client 74.125.181.54#38723: query (cache) 'www.site.fr/A/IN' denied
09-Oct-2015 22:23:39.833 client 62.34.202.138#51968: query (cache) 'www.site.fr/A/IN' denied
...

Dans un premier temps, je pensais à une attaque du mon serveur, mais en cherchant bien sur le net, je n’étais pas le seul a être touché par ce problème lié à BIND9 les fameux “Faille DOS DNS”.
Et c’est bien ce que m’a confirmé l’outil dnstop, outil de monitoring de requêtes DNS, avec la commande

1
dnstop eth0

Dans mon cas, le serveur BIND DNS refuse bien les requêtes, d’où la mention “denied”, donc même si cela engendrait des kilomètres de ligne dans les fichiers logs, le serveur n’en souffre pas.

Oui mais comment faire pour bloquer tous ce raffut bind dns ?

J’ai pensé alors à fail2ban qui est un formidable outil pour bannir les IP trop encombrantes.
Mais cela s’avère une très mauvaise solution, car en général dans ce type d’attaques, les IP sont celles des victimes voir même de moteurs de recherche, et non celles des assaillants.
Bannir l’IP d’un moteur de recherche, ce n’est jamais bon.

Sécuriser sont serveur BIND DNS

Ce qu’il faut vérifier dans un premier temps, c’est si le serveur BIND DNS n’est pas récursif.

Avec la commande suivante

1
dig @IP_DU_SERVEUR SOA fr.

Si vous voyez dans les flags la mention “ra”, c’est que le serveur est récursif. (ra = recursion available)
Attention, vous devez faire ce test depuis l’extérieur de votre réseau local.

1
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

Pour corriger cela il faut ajouter à la fin du fichier de configuration de BIND les lignes suivantes

1
vi /etc/bind/named.conf.options

ajoutez

1
allow-recursion { 127.0.0.1; IP_DU_SERVEUR;};

Ce qui limite l’utilisation de BIND DNS au serveur lui même.

Ensuite ajoutez la ligne

1
allow-query-cache { 127.0.0.1; IP_DU_SERVEUR;};

Et cela pour interdire l’utilisation du cache de notre serveur
Ajoutez enfin

1
2
additional-from-cache no;
recursion no;

redémarrer bind pour la prise en compte des modifications

1
/etc/init.d/bind9 restart

Ref. Blog de bortzmeyer, Système Linux

Zenzla

À propos de Zenzla

Je suis un passionné des logiciels libres, et tous ce qui tourne autour!! j'essaie de plus en plus de me débarrasser de l'oppression des Big Brothers du net. Je suis aussi Formateur en base de donnée, Gnu/Linux et bien autre chose.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *