đ Configuration DNS Unbound (Fedora Server)
Article original: Mise Ă jour dâUnbound sur Fedora Server 41
Fichiers de configuration Unbound
Analysons les fichiers de configuration présents :
Nouvelles structures des fichiers de configuration
Par dĂ©faut, les fichiers de configuration sont dans le rĂ©pertoire /etc/unbound. Câest dans ce rĂ©pertoire que le principal fichier de configuration unbound.conf est placĂ©, câest celui quâunbound recherche et lance par dĂ©faut.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/etc/unbound
âââ conf.d # RĂ©pertoire des fichiers de configuration personnalisĂ©e
â  âââ example.com.conf
â  âââ pi-hole.conf # configuration de Pi-Hole (https://docs.pi-hole.net/guides/dns/unbound/)
â  âââ remote-control.conf # Renvoi vers /usr/share/unbound/conf.d/remote-control.conf
âââ dnssec-root.key
âââ icannbundle.pem # Certificates for validating S/MIME signature; known as the ICANN CA.
âââ keys.d # RĂ©pertoire des clĂ©s pour un domaine spĂ©cifique
â  âââ example.com.key
âââ local.d # RĂ©pertoire des fichiers de configuration de surchage local
â  âââ block-example.com.conf
âââ openssl-sha1.conf
âââ unbound.conf # Fichier de configuration principal
âââ unbound_control.key
âââ unbound_control.pem
âââ unbound_server.key
âââ unbound_server.pem
Le dĂ©mon unbound permet de configurer les donnĂ©es locales ou les dĂ©rogations Ă lâaide des rĂ©pertoires suivants :
- Le rĂ©pertoire /etc/unbound/conf.d est utilisĂ© pour ajouter des configurations pour un nom de domaine spĂ©cifique. Il permet de rediriger les requĂȘtes pour un nom de domaine vers un serveur DNS spĂ©cifique. Ce rĂ©pertoire est souvent utilisĂ© pour les sous-domaines qui nâexistent quâau sein dâun rĂ©seau Ă©tendu dâentreprise.
- Le rĂ©pertoire /etc/unbound/keys.d est utilisĂ© pour ajouter des âtrust anchorsâ pour un nom de domaine spĂ©cifique. Cela est nĂ©cessaire lorsquâun nom interne est signĂ© DNSSEC, mais quâil nây a pas dâenregistrement DS existant publiquement pour construire un chemin de confiance. Un autre cas dâutilisation est celui oĂč une version interne dâun domaine est signĂ©e Ă lâaide dâune clĂ© DNS diffĂ©rente de celle du nom publiquement disponible Ă lâextĂ©rieur du rĂ©seau WAN de lâentreprise.
- Le rĂ©pertoire /etc/unbound/local.d est utilisĂ© pour ajouter des donnĂ©es DNS spĂ©cifiques en tant que surcharge locale. Ces donnĂ©es peuvent ĂȘtre utilisĂ©es pour Ă©tablir des listes noires ou crĂ©er des dĂ©rogations manuelles. Ces donnĂ©es seront renvoyĂ©es aux clients par unbound, mais elles ne seront pas marquĂ©es comme Ă©tant signĂ©es DNSSEC.
(source : Red Hat Documentation)
De plus, la communauté Fedora ajoute des fichiers de configurations personnalisées dans le répertoire /usr/share/unbound/ :
1
2
3
4
5
6
/usr/share/unbound
âââ conf.d
â  âââ remote-control.conf # Remote control config section update
â  âââ unbound-as112-networks.conf # Allow forwarding of private ranges, which are marked forwardable by IANA
â  âââ unbound-local-root.conf # Authority zones
âââ fedora-defaults.conf # Fedora distribution defaults
Fichier de configuration unbound.conf
Le fichier de configuration principal est unbound.conf situĂ© dans le rĂ©pertoire /etc/unbound. Dans notre cas, il sâagit du fichier de configuration exemple fourni par unbound (disponible dans le dĂ©pĂŽt github dâunbound) totalement commentĂ©, Ă lâexception de 3 lignes, qui permettent dâinclure dâautres fichiers de configurations :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#
# Example configuration file.
#
# See unbound.conf(5) man page, version 1.22.0.
#
# this is a comment.
# Use this anywhere in the file to include other text into this file.
#include: "otherfile.conf"
# Use this anywhere in the file to include other text, that explicitly starts a
# clause, into this file. Text after this directive needs to start a clause.
#include-toplevel: "otherfile.conf"
# The server clause sets the main parameters.
server:
# whitespace is not necessary, but looks cleaner.
[...]
include: /etc/unbound/local.d/*.conf
[...]
# Default Fedora settings
include: "/usr/share/unbound/fedora-defaults.conf"
# Stub and Forward zones
include: "/etc/unbound/conf.d/*.conf"
[...]
Fichier de configuration pi-hole.conf
Ce fichier de configuration pi-hole.conf est situĂ© dans le rĂ©pertoire /etc/unbound/conf.d. Il est ajoutĂ© Ă lâinstallation de Pi-hole et reprend les recommandations du guide âunboundâ de Pi-hole dans la documentation.
Personnalisation de la configuration
Voyons comment personnaliser la configuration dâUnbound.
Utiliser le fichier de zone des serveurs DNS racine
Afin dâindiquer Ă Unbound dâutiliser le fichier de zone des serveurs DNS racine, on va rajouter le fichier suivant root-hints.conf dans le rĂ©pertoire /etc/unbound/conf.d/ :
1
2
3
4
5
6
7
server:
# Read the root hints from this file. Default is nothing, using built in
# hints for the IN class. The file has the format of zone files, with root
# nameserver names and addresses only. The default may become outdated,
# when servers change, therefore it is good practice to use a root-hints
# file. get one from ftp://FTP.INTERNIC.NET/domain/named.cache
root-hints: "/var/lib/unbound/root.hints"
Il faudra prĂ©alablement avoir tĂ©lĂ©chargĂ© ce fichier depuis le site de lâInternic avec la commande suivante :
$ sudo wget https://www.internic.net/domain/named.root -O /var/lib/unbound/root.hints
MĂȘme si ce fichier Ă©volue trĂšs peu, il est recommandĂ© de le mettre rĂ©guliĂšrement Ă jour. Vous pouvez vous reporter Ă la section Automatiser la copie du fichier de zone des serveurs DNS racine de mon prĂ©cĂ©dent article Installer Unbound en complĂ©ment de Pi-Hole.
Optimisation de performance
Afin dâoptimiser les performances dâUnbound, on va rajouter le fichier suivant tuning.conf dans le rĂ©pertoire /etc/unbound/conf.d/. Ces optimisations sont issues principalement de lâarticle Performance Tuning de la documentation officielle.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
server:
## Unbound Optimization and Speed Tweaks ##
# number of threads to create. 1 disables threading.
# num-threads: 1
# Already define in pi-hole.conf
# the time to live (TTL) value lower bound, in seconds. Default 0.
# If more than an hour could easily give trouble due to stale data.
cache-min-ttl: 3600
# the time to live (TTL) value cap for RRsets and messages in the
# cache. Items are not cached for longer. In seconds.
cache-max-ttl: 86400
# the number of slabs to use for cache and must be a power of 2 times the
# number of num-threads set above. more slabs reduce lock contention, but
# fragment memory usage.
# the number of slabs to use for the message cache.
# the number of slabs must be a power of 2.
# more slabs reduce lock contention, but fragment memory usage.
msg-cache-slabs: 8
# the number of slabs to use for the RRset cache.
# the number of slabs must be a power of 2.
# more slabs reduce lock contention, but fragment memory usage.
rrset-cache-slabs: 8
# the number of slabs to use for the Infrastructure cache.
# the number of slabs must be a power of 2.
# more slabs reduce lock contention, but fragment memory usage.
infra-cache-slabs: 8
# the number of slabs to use for the key cache.
# the number of slabs must be a power of 2.
# more slabs reduce lock contention, but fragment memory usage.
key-cache-slabs: 8
# more cache memory, rrset=msg*2
# Increase the memory size of the cache. Use roughly twice as much rrset cache
# memory as you use msg cache memory. Due to malloc overhead, the total memory
# usage is likely to rise to double (or 2.5x) the total cache memory. The test
# box has 4gig of ram so 256meg for rrset allows a lot of room for cacheed objects.
# the amount of memory to use for the RRset cache.
# plain value in bytes or you can append k, m or G. default is "4Mb".
rrset-cache-size: 8m
# the amount of memory to use for the message cache.
# plain value in bytes or you can append k, m or G. default is "4Mb".
msg-cache-size: 4m
# Larger socket buffer. OS may need config.
# buffer size for UDP port 53 incoming (SO_RCVBUF socket option).
# 0 is system default. Use 4m to catch query spikes for busy servers.
so-rcvbuf: 1m
# buffer size for UDP port 53 outgoing (SO_SNDBUF socket option).
# 0 is system default. Use 4m to handle spikes on very busy servers.
so-sndbuf: 1m
# more outgoing connections
# depends on number of cores: 1024/cores - 50
# number of ports to allocate per thread, determines the size of the
# port range that can be open simultaneously. About double the
# num-queries-per-thread, or, use as many as the OS will allow you.
outgoing-range: 206
# Faster UDP with multithreading (only on Linux).
# use SO_REUSEPORT to distribute queries over threads.
# at extreme load it could be better to turn it off to distribute even.
so-reuseport: yes
Renforcer la vie privée
Afin dâĂ©viter de dĂ©voiler lâutilisation dâUnbound, on va rajouter le fichier suivant privacy.conf dans le rĂ©pertoire /etc/unbound/conf.d/.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
server:
## Hardening privacy ##
# enable to not answer id.server and hostname.bind queries.
hide-identity: yes
# the identity to report. Leave "" or default to return hostname.
identity: "DNS"
# enable to not answer version.server and version.bind queries.
hide-version: yes
# Sent minimum amount of information to upstream servers to enhance
# privacy. Only sent minimum required labels of the QNAME and set QTYPE
# to A when possible.
qname-minimisation: yes
Ajout dâune liste noire
Avec Unbound, il est possible de bloquer directement certains domaines comme les domaines publicitaires/malveillants mais aussi le porno, les mĂ©dias sociaux et dâautres catĂ©gories, grĂące notamment Ă des listes dâagrĂ©gation prĂ©-construites. Attention, Ă partir de ce moment-lĂ , vous ĂȘtes en train de construire un serveur DNS menteur.
Pour ce faire, nous allons utiliser la syntaxe suivante, qui permet de rediriger un domaine vers le localhost (127.0.0.1 ou 0.0.0.0) :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server:
# Blocking Ad Server domains. Google's AdSense, DoubleClick and Yahoo
# account for a 70 percent share of all advertising traffic. Block them.
local-zone: "doubleclick.net" redirect
local-data: "doubleclick.net A 127.0.0.1"
local-zone: "googlesyndication.com" redirect
local-data: "googlesyndication.com A 127.0.0.1"
local-zone: "googleadservices.com" redirect
local-data: "googleadservices.com A 127.0.0.1"
local-zone: "google-analytics.com" redirect
local-data: "google-analytics.com A 127.0.0.1"
local-zone: "ads.youtube.com" redirect
local-data: "ads.youtube.com A 127.0.0.1"
local-zone: "adserver.yahoo.com" redirect
local-data: "adserver.yahoo.com A 127.0.0.1"
En faisant cela, le navigateur sera invitĂ© Ă rediriger sa requĂȘte vers le localhost, donc la requĂȘte ne ramĂšnera pas de rĂ©sultat, et donc, le navigateur ne pourra pas charger la ressource demandĂ©e.
PlutĂŽt que dâajouter ces donnĂ©es manuellement dans le fichier de configuration, on peut se baser sur des listes noires prĂ©-construites. Elles seront Ă ajouter directement dans le rĂ©pertoire /etc/unbound/local.d/.
Utilisation de la liste StevenBlack Unified hosts
Une des listes les plus connues est celle de StevenBlack disponible dans son dĂ©pĂŽt GitHub - StevenBlack/hosts: đ Consolidating and extending hosts files from several well-curated sources. Optionally pick extensions for porn, social media, and other categories. Ce dĂ©pĂŽt recense et agrĂšge dâautres listes, et met Ă jour journaliĂšrement 31 diffĂ©rentes listes par catĂ©gories.
Dans un premier temps, on va utiliser la liste principale du dĂ©pĂŽt listant des domaines publicitaires et malveillants, nommĂ©e âUnified hosts = (adware + malware)â.
Pour ce faire, on va créer un script unbound-update.sh qui met à jour cette liste dans domaines publicitaires/malveillants dans /opt/ :
nano /opt/unbound-update.sh
Puis dans ce fichier, vous allez mettre le code suivant :
1
2
3
4
5
6
#!/bin/sh
# Télécharge la liste StevenBlack Unified hosts = (adware + malware)
wget https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts -O /tmp/hosts
# Rend le fichier téléchargé compatible avec Unbound
cat /tmp/hosts | grep '^0\.0\.0\.0' | awk '{print "local-zone: \""$2"\" redirect\nlocal-data: \""$2" A 0.0.0.0\""}' > /etc/unbound/conf.d/unified_hosts.conf
rm /tmp/hosts
Puis il faut rendre le script exécutable :
chmod +x /opt/unbound-update.sh
Et enfin, il faut créer une tùche planifiée dans crontab pour mettre à jour la liste StevenBlack Unified hosts = (adware + malware) avec la commande suivante :
crontab -e
et y ajouter lâentrĂ©e suivante :
1
2
# Télécharge tous les jours à 22h30 la liste StevenBlack Unified hosts = (adware + malware)
30 22 * * * /bin/bash /opt/unbound-update.sh
Utilisation de la liste Red Flag Domains
Red Flag Domains sont des listes de noms de domaine enregistrés trÚs récemment et probablement malveillants dans les domaines de premier niveau français.
Vous pouvez utiliser la procĂ©dure ci-dessus pour tĂ©lĂ©charger et mettre Ă jour rĂ©guliĂšrement le fichier formatĂ© pour pi-hole disponible Ă lâadresse suivant : https://dl.red.flag.domains/pihole/red.flag.domains.txt
Utilisation de la liste yoyo.org
Yoyo.org fournit une liste de serveurs publicitaires connus dans un fichier texte pratique qui est mis Ă jour pĂ©riodiquement et prĂ©formatĂ© pour Unbound. La liste configurera Unbound pour rediriger plus de 3400 noms dâhĂŽtes de serveurs publicitaires vers localhost (127.0.0.1).
NOTE : la liste yoyo.org est déjà incluse dans la liste StevenBlack Unified hosts
Vous pouvez utiliser la commande suivante pour télécharger directement un fichier compatible avec Unboud et donc le mettre dans votre crontab :
# Télécharge la liste yoyo.org curl -sS -L --compressed "http://pgl.yoyo.org/adservers/serverlist.php?hostformat=unbound&showintro=0&mimetype=plaintext" > /etc/unbound/conf.d/yoyo_org_ad_servers.conf
Ajout dâun nom de domain local
Il est tout Ă fait possible de faire de la rĂ©solution de nom de domaine pour son rĂ©seau local. Un domaine local est dĂ©jĂ rĂ©servĂ© Ă ce titre, câest le domaine home.arpa. via la RFC 8375. Il faudra donc dĂ©finir la zone local home.arpa., puis les local data de chaque Ă©quipement pour faire la rĂ©solution de lâadresse quâon leur donne. Par exemple, lâenregistrement host.home.arpa renverra lâadresse IP 192.168.0.1 correspondant Ă lâĂ©quipement, et on pourra aussi prĂ©voir lâinverse (dit Reverse DNS ou rDNS).
Dans notre cas, on va rajouter le fichier suivant home.arpa.conf dans le répertoire /etc/unbound/local.d/ :
1
2
3
4
5
6
7
8
9
10
11
## Local Domains
server:
# Configure la zone local
local-zone: "home.arpa." transparent
# Definition des zones pour les différents équipements
## homelab
local-data: "homelab.home.arpa. 86400 IN A 192.168.1.30"
local-data: "30.1.168.192.in-addr.arpa. IN PTR homelab.home.arpa." #rDNS
## Passerelle wifi
local-data: "wifi.home.arpa. 86400 IN A 192.168.1.50"
local-data: "50.1.168.192.in-addr.arpa. IN PTR wifi.home.arpa." #rDNS
Pour en savoir plus
Voici dâautres liens utiles :
- Unbound by NLnet Labs â Unbound 1.22.0 documentation
- Unbound DNS Server Tutorial : DNSwatch.COM
- Avoir son DNS local : sécurité, contrÎle et performance ⹠Tribune ⹠Zeste de Savoir
- Shaft Inc. : Gérer un domaine local avec Unbound
- Comment configurer un résolveur DNS local avec Unbound sur Rocky Linux 9
- Comment configurer un résolveur DNS local avec Unbound sur Ubuntu 22.04
- Securing Your Network With Unbound - A DNS Resolver Guide - Shapehost
