---
categories: ['OpenBSD','Réseau','Serveur']
date: 2017-08-15T18:56:30+02:00
description: "Utiliser le serveur unbound - résolveur DNS cache + DNSSEC - sous OpenBSD"
draft: false
tags: ['OpenBSD', 'unbound', 'DNS', 'RFC', 'RFC8499']
title: "OpenBSD : utiliser Unbound"
translationKey: 'openbsd-unbound'
---
## 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`
{{< note tip >}}
Pensez à créer un fichier cron pour mettre-à-jour régulièrement ce fichier…
{{}}
### 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 :
* `allow` permet l'accès
* `allow_snoop` permet l'accès, en utilisant une technique de "cache snopping",
qui donne le droit d'examiner le contenu en cache.
* `deny` refuse l'accès - `option par défaut, si non spécifiée`
* `deny_non_local`,
* `refuse` refuse 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][1] !*
### Durcir et cacher certaines informations
{{< code "unbound-config-harden" unbound >}}
**Explications**
* `harden-algo-downgrade` empêche ou non de choisir l’algorithme le plus faible .
* Si `no` est 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 !*
* Les variables `private-address` renforcent 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-id` est 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-additional` assure de nettoyer toutes les données DNS non sécurisées
### Optimisation
{{< code "unbound-config-optimizations" unbound >}}
**Explications**
* La variable `num-thread` correspond au nombre de cœurs CPU dont dispose
votre station, soit pour 4 CPU ayant chacun deux cœurs, on lui attribuera
le chiffre `8`.
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 `slabs` doivent être paramétrées
au double de la variable `num-thread`. Ces variables gèrent les conflits
de verrouillage en les diminuant.
* La gestion des variables `*-cache-size` est sensible et doit être ainsi
paramétrée : la variable `rrset-cache-size` doit être le double de la
variable `msg-cache-size` ; quant à la variable `key-cache-size`, elle
doit être elle-même le double de la variable `rrset`.
* La variable `outgoing-range` qui gère le nombre de connexions par cœurs
CPU doit être ainsi calculée :
**1024 / nb_coeurs_CPU - 50**
* La variable `so-reuseport` permet d'améliorer significativement les performances
de l'usage du protocole UDP.
{{< color red >}}n'est fonctionnelle que sous Linux !{{}}
* La variable `qname-minimisation` a 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`,
et `so-sndbuf` qui doivent être augmentées dans le cas de serveur surchargé.
Autrement, laissez la valeur `0` par défaut - cela utilise les valeurs systèmes !
### Gestion des caches
{{< code "unbound-config-caches" unbound >}}
### Gestion des journaux
{{< code "unbound-config-log" unbound >}}
**Explications**
* Si l'option `unwanted-reply-threshold` est 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 caches `rrset` et 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][1] recommande **10000**.*
* L'option `verbosity` est le degré de verbosité des journaux :
* `0` signifie que seules les erreurs seront affichées ;
* `1` que ce sont des informations opérationnelles - *valeur par défaut* - ;
* `2` que celles-ci seront plus détaillées ;
* `3` définit les informations par niveau de requêtes et leurs sorties ;
* `4` restitue 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` à `2` permet d'atteindre un niveau d'explications
suffisant pour obtenir les raisons des échecs.
*très utile à utiliser pour {{< inside "sys:openbsd:unbound-dnssec-dns-over-tls" "unbound en mode DNSSEC" >}} !* ;)
### Gérer des statistiques
{{< code "unbound-config-stats" unbound >}}
**Explications**
* L'option `statistics-cumulative` est à paramétrer sur `yes` -
*si vous utilisez un outil d'affichage graphique des rapports, tel que Munin…*
### Bloquer certains sites
{{< code "sys-debian-unbound-config-local-zone-example" unbound >}}
{{% note info %}}
Pour info, il existe des projets de listes, tels que :
- **[PGL-Yoyo](https://pgl.yoyo.org/adservers/)**
- l'excellent **[unbound-badhosts](https://www.geoghegan.ca/unbound-adblock.html)**
Dans le cas d'usage de listes, il faut les inclure en utilisant la déclaration :
`include: /var/unbound/etc/nom-fichier-liste`
{{%/note%}}
## Documentation
Pour savoir comment :
* {{< inside "sys:openbsd:unbound-dnssec-dns-over-tls" "configurer Unbound pour utiliser les protocoles DNSSEC, et DNS/TLS" >}} !
* {{< inside "sys:openbsd:unbound-control" "contrôler le service unbound" >}}
### autres documentations
* l'excellente [documentation de Calomel][2].org, *en anglais*
* [celles][3] de Stéphane Bortzmeyer, en français
### Manpages
* {{< man cron 8 >}}
* {{< man unbound 8 >}}, {{< man unbound.conf 5 >}}, {{< man unbound-checkconf 8 >}}
{{< rfcdoc 8499 >}}
---
[1]: https://calomel.org/unbound_dns.html
[2]: https://framagit.org/BlackLists/BlockZones/raw/master/cron/monthly.local
[3]: http://www.bortzmeyer.org/search?pattern=unbound
---