Description
Le but d’utiliser Unbound est d’avoir localement sur sa station son propre serveur DNS Cache - selon la RFC 8499 , un Résolveur complet avec mémoire (en anglais, full-service resolver), c’est à dire un client DNS qui fournit un service de résolution complet, avec mémorisation des enregistrements DNS récoltés.
Utiliser Unbound avec la gestion sécurisée des informations DNS, par le
biais de la technologie DNSSEC, est un plus indéniable.
(cela évite d’avoir à obtenir des informations DNS faussées, par une action
pirate, par une action “étatique”…).
Sous OpenBSD, unbound est intégré nativement !
- Pour activer unbound, tapez :
# rcctl enable unbound - Pour le démarrer :
# rcctl start unbound - Pour l’utiliser avec une connexion obtenue via, dhcp, ajoutez dans le
fichier
/etc/dhclient.conf:
prepend domain-name-servers 127.0.0.1;
Versions logicielles
- OS : OpenBSD 6.0 & supérieure
- Unbound : natif, intégré
Configuration
La configuration d’unbound ne pose pas de gros problème, en soit, il faut veiller à l’écriture correcte des informations !
Toutes les variables et leur impact sont expliquées dans la documentation officielle anglaise : https://unbound.net/documentation/unbound.conf.html
Voyons quelques détails dits de sécurité à paramétrer absolument dans
votre propre fichier de configuration :
/var/unbound/etc/unbound.conf
Pour tester la configuration de vos fichiers, utilisez la commande unbound-checkconf !
Quand vous avez terminé votre configuration, pensez à redémarrer le service lié à unbound.
Fichier root.hints
Le fichier root.hints est une liste des serveurs de noms faisant autorité,
les premiers serveurs DNS, dits roots.
Bien qu’OpenBSD semble avoir une liste intégrée, il est intéressant de récupérer ladite liste tous les 6 mois environ.
Pour le récupèrer :
# ftp -o /var/unbound/db/root.hints http://www.internic.net/domain/named.cache
Puis, modifiez le fichier de configuration, pour ajouter :
root-hints: "/var/unbound/db/root.hints
Gestion des réseaux autorisés
access-control: 127.0.0.0/8 allow # autorise l’interface de bouclage local sur la couche IPv4
access-control: ::1 allow # autorise l’interface de bouclage local sur la couche IPv6
access-control: 192.168.1.0/24 allow # autorise le réseau local
access-control: 0.0.0.0/0 refuse # interdit tout le reste de l’Internet !
access-control: ::0/0 refuse # interdit tout Internet sur IPv6
À moins de savoir quoi modifier, laissez tel quel !
Le segment réseau peut-être de type IPv4 ou IPv6. L’action à allouer peut-être :
allowpermet l’accèsallow_snooppermet l’accès, en utilisant une technique de “cache snopping”, qui donne le droit d’examiner le contenu en cache.denyrefuse l’accès -option par défaut, si non spécifiéedeny_non_local,refuserefuse l’accès, tout en envoyant un message d’erreur adéquat.- ou
refuse_non_local
Pour les autres options, ou afin de mieux saisir les subtilités, merci de lire la page officielle anglaise !
Durcir et cacher certaines informations
Code : unbound
Explications
harden-algo-downgradeempêche ou non de choisir l’algorithme le plus faible .- Si
noest choisi, ce sera l’algorithme le plus faible qui sera élu… - Si les zones DNS ne sont pas configurées pour fonctionner correctement
avec cette option, cela peut entraîner des échecs de validation ;
dans ce cas, il faut la mettre sur
no.
Cette option n’est pas reconnue avec la version Jessie, utilisez la version backports !
- Si
- Les variables
private-addressrenforcent l’aspect privé de ces réseaux. Cela empêche l’inclusion de ces segments réseaux dans les réponses DNS, et protège de la technique des “Relais DNS” (qui utilise, par exemple, un navigateur internet comme relais ou proxy réseau). - La variable
use-caps-for-idest expérimentale et peut créer des bogues, ou résultats incorrects - ne pas l’utiliser à moins d’être sûr de ce que vous faites… - La variable
val-clean-additionalassure de nettoyer toutes les données DNS non sécurisées
Optimisation
Code : unbound
Explications
- La variable
num-threadcorrespond au nombre de cœurs CPU dont dispose votre station, soit pour 4 CPU ayant chacun deux cœurs, on lui attribuera le chiffre8.
Une manière d’être sûr du nombre de cœurs utilisés dans votre machine est d’utiliser la commande suivante :
$ sysctl hw.ncpu
hw.ncpu=4
$ sysctl hw.ncpufound
hw.ncpufound=4 - Les variables terminant par le mot
slabsdoivent être paramétrées au double de la variablenum-thread. Ces variables gèrent les conflits de verrouillage en les diminuant. - La gestion des variables
*-cache-sizeest sensible et doit être ainsi paramétrée : la variablerrset-cache-sizedoit être le double de la variablemsg-cache-size; quant à la variablekey-cache-size, elle doit être elle-même le double de la variablerrset. - La variable
outgoing-rangequi gère le nombre de connexions par cœurs CPU doit être ainsi calculée :
1024 / nb_coeurs_CPU - 50 - La variable
so-reuseportpermet d’améliorer significativement les performances de l’usage du protocole UDP.
n'est fonctionnelle que sous Linux ! - La variable
qname-minimisationa pour propos d’améliorer les informations privées liées à l’usage de DNS. - Lisez la documentation officielle anglaise pour les options
so-rcvbuf, etso-sndbufqui doivent être augmentées dans le cas de serveur surchargé. Autrement, laissez la valeur0par défaut - cela utilise les valeurs systèmes !
Gestion des caches
Code : unbound
Gestion des journaux
Code : unbound
Explications
- Si l’option
unwanted-reply-thresholdest définie, le nombre paramétré total de réponses indésirables est gardé dans chacun des processus. Ce nombre paramétré atteint déclenche une action défensive de nettoyage des cachesrrsetet autres messages, un avertissement est affiché dans les journaux. Il est recommandé de positionner ce nombre à une valeur de 10 Millions !
Pour info, l’excellente documentation de Calomel recommande 10000. - L’option
verbosityest le degré de verbosité des journaux :0signifie que seules les erreurs seront affichées ;1que ce sont des informations opérationnelles - valeur par défaut - ;2que celles-ci seront plus détaillées ;3définit les informations par niveau de requêtes et leurs sorties ;4restitue l’information du niveau d’algorithme utilisé ;5, quant à lui, enregistre l’identification des clients en cas d’erreurs de cache.
- Mettre l’option
val-log-levelà2permet d’atteindre un niveau d’explications suffisant pour obtenir les raisons des échecs.
très utile à utiliser pour unbound en mode DNSSEC ! ;)
Gérer des statistiques
Code : unbound
Explications
- L’option
statistics-cumulativeest à paramétrer suryes- si vous utilisez un outil d’affichage graphique des rapports, tel que Munin…
Bloquer certains sites
Code : unbound
Pour info, il existe des projets de listes, tels que :
- PGL-Yoyo
- l’excellent unbound-badhosts
Dans le cas d’usage de listes, il faut les inclure en utilisant la déclaration :
include: /var/unbound/etc/nom-fichier-liste
Documentation
Pour savoir comment :
autres documentations
- l’excellente documentation de Calomel.org, en anglais
- celles de Stéphane Bortzmeyer, en français