J'utilisais avec succès un petit fichier de zone (20 000 entrées) avec bind9
serveur, mais aujourd'hui, mon fournisseur de données a envoyé une mise à jour qui a fait que le fichier de zone est devenu plus de 300 000 entrées (plus de 30 Mo).
Le problème est que le serveur ne démarre pas avec ce fichier de zone. Le named-checkconf
ne signalerait aucune erreur. Aucun message de journal n'est disponible (ou je n'ai pas pu les enregistrer correctement).
Je voudrais savoir si bind9
est capable de gérer de gros fichiers de configuration et si oui, comment puis-je le réparer. Si non, j'aimerais savoir s'il existe des solutions à ce problème. Peut-être est-il possible de stocker les entrées dans une base de données ?
Le fichier de zone que j'essaie d'utiliser peut être téléchargé ici.
Mise à jour :
service bind9 status
a montré quelques informations qui peuvent être pertinentes :
adjusted limit on open files from 4096 to 1048576
found 1 CPU, using 1 worker thread
using 1 UDP listener per interface
using up to 4096 sockets
loading configuration from '/etc/bind/named.conf'
Je ne sais pas trop comment interpréter ou utiliser ces informations... Des idées ?
De plus, je n'ai pas pu trouver où bind9
les journaux sont situés :/var/log/
n'a pas de bind9
entrées. Quelqu'un peut-il me dire où ils se trouvent sur Debian Jessie ?
Réponse acceptée :
J'ai vu votre fichier de zone :il semble qu'il s'agisse d'une liste de plus de 350 000 domaines, pour le moment, où le serveur BIND local est défini comme le maître. Les domaines sont au format suivant :
zone "xxxx.com" { type master; notify no; file "null.zone.file"; };
Selon les besoins en mémoire, je dirais qu'à titre indicatif, vous pourriez avoir besoin d'environ 40 Mo à 80 Mo de RAM libre pour cela, car les tables de domaine sont chargées en mémoire. (même si je me sentirais plus à l'aise avec 200 Mo au moins)
À moins que le serveur ne soit sévèrement limité en RAM, cela semble un peu improbable, mais cela pourrait arriver.
J'ai également remarqué qu'il y a des traits de soulignement ("_") dans le nom de plusieurs domaines. Avoir des traits de soulignement dans DNS RR rompt quelques RFC (RFC 952 et RFC 1123), et vous devez ajouter à la section des options BIND la directive :
check-names master ignore;
En ce qui concerne le format et la méthode utilisés pour les domaines de la liste noire. À partir de la version 9.8, BIND prend en charge ce que l'on appelle les zones de politique de réponse (RPZ), qui ont été créées spécifiquement pour les domaines de liste noire.
Plusieurs fournisseurs de listes noires (commerciales) suivent aujourd'hui ce format. (J'utilise moi-même RPZ au travail et à la maison).
L'utilisation de RPZ devrait avoir plus de sens et signifie également une charge plus légère, et à ce titre, si vous payez le service, je vous conseillerais de contacter votre fournisseur pour savoir comment l'utiliser. Le format RPZ prend également en charge dans une certaine mesure les caractères génériques, ce qui signifierait un fichier de liste noire beaucoup plus petit.
Une alternative consiste également à traiter le fichier avec un script pour le modifier au format RPZ.
En relation :Qu'est-ce qui cause l'envoi de divers signaux ?Je laisserai ici des liens pertinents sur RPZ et les fournisseurs officiels de RPZ :
https://dnsrpz.info
et un tutoriel comment configurer RPZ :
http://www.zytrax.com/books/dns/ch9/rpz.html
Comme vous l'avez peut-être remarqué, avec la configuration actuelle, vous aurez également beaucoup de fichiers ouverts; par conséquent, je recommande à nouveau d'utiliser RPZ.
Pour traiter davantage de fichiers ouverts, dans de gros serveurs de messagerie, DNS ou HTTP, les limites doivent souvent être relevées.
La situation n'est pas aussi mauvaise qu'avant avec les anciens noyaux, mais je recommande néanmoins d'augmenter les limites.
Modifier /etc/sysctl.conf
et modifiez/ajoutez la directive fs.file-max
pour la limite globale de fichiers ouverts :
fs.file-max=500000
Pour appliquer la nouvelle limite de fichiers sans redémarrer, vous devez exécuter :
sudo sysctl -p
Et pour les limites de fichiers par processus, éditez, /etc/security/limits.conf
:
* - nofile 400000
Pour appliquer les limites de fichiers par processus, déconnectez-vous et connectez-vous, ou exécutez :
sudo ulimit -n 400000
Après avoir augmenté ces deux limites, vous devez redémarrer BIND :
sudo service bind9 restart
Pour convertir votre fichier au format RPZ, vous exécutez :
cat bind | tr -d " | awk ' { print $2" CNAME ." } ' > /etc/bind/rpz.db
Le script convertira les entrées au format suivant :
zeus.developershed.com CNAME .
zeusclicks.com CNAME .
zintext.com CNAME .
Ajouter dans la section des options de nommé :
response-policy { zone "rpz"; };
Créez la déclaration de la zone RPZ :
zone "rpz" {
type master;
file "/etc/bind/rpz.db";
};
Ajouter en haut de /etc/bind/rpz.db
fichier :
$TTL 604800
@ IN SOA localhost. root.localhost. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
@ IN NS your_dns_fqdn.
Déconfigurez votre fichier DNS et redémarrez votre serveur BIND. De toute évidence, le fichier RPZ peut être optimisé avec des caractères génériques et rendu beaucoup plus court, mais même sans cette optimisation, vous n'aurez plus besoin d'autant de fichiers ouverts.
Quant à la consultation des logs BIND/DNS, ils sont regroupés avec les logs système dans /var/log/syslog
avec la balise named
. Vous pouvez utiliser la commande :
sudo grep named /var/log/syslog