Unbound (Serveur DNS)

Logo Unbound

Environnement

  • Conteneur LXC Proxmox
  • Ubuntu 18.04

Installation

Installer Unbound

apt install -y unbound

Configuration

Récupérer la liste des serveurs racine :

wget ftp://FTP.INTERNIC.NET/domain/named.cache -O /var/lib/unbound/root.hints

Récupérer la liste des domaines publicitaires/malveillants et la rendre compatible avec Unbound :

wget https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts -O /tmp/hosts
cat /tmp/hosts | grep '^0\.0\.0\.0' | awk '{print "local-zone: \""$2"\" redirect\nlocal-data: \""$2" A 0.0.0.0\""}' > /etc/unbound/unbound.conf.d/ads-malware.conf

Éditer le fichier de configuration /etc/unbound/unbound.conf et ajouter la configuration suivante (/!\ à adapter à son besoin):

mv /etc/unbound/unbound.conf /etc/unbound/unbound.conf.bak
nano /etc/unbound/unbound.conf
# Unbound configuration file for Debian.
#
# See the unbound.conf(5) man page.
#
# See /usr/share/doc/unbound/examples/unbound.conf for a commented
# reference config file.

server:
    # The following line will configure unbound to perform cryptographic
    # DNSSEC validation using the root trust anchor.
    auto-trust-anchor-file: "/var/lib/unbound/root.key"

server:
verbosity: 1
logfile: "/var/log/unbound.log"
log-replies: yes
log-time-ascii: yes
log-queries: yes
interface: 0.0.0.0
port: 53
do-ip4: yes
do-ip6: no
do-udp: yes
do-tcp: yes
do-daemonize: yes
access-control: 192.168.0.0/24 allow
use-syslog: yes
root-hints: "/var/lib/unbound/root.hints"

# Durcissement
hide-identity: yes
hide-version: yes
harden-glue: yes
harden-below-nxdomain: yes
harden-dnssec-stripped: yes
harden-referral-path: yes

use-caps-for-id: yes
cache-min-ttl: 3600
cache-max-ttl: 86400
prefetch: yes
num-threads: 2
msg-cache-slabs: 8
rrset-cache-slabs: 8
infra-cache-slabs: 8
key-cache-slabs: 8
key-cache-size: 16m
rrset-cache-size: 8m
msg-cache-size: 4m
outgoing-range: 206
qname-minimisation: yes
so-rcvbuf: 1m
so-sndbuf: 1m
so-reuseport: yes
# Adresses privées non concernées par Unbound
private-address: 192.168.0.0/24
#private-domain: "mon-nom-de-domaine.fr"
unwanted-reply-threshold: 10000
do-not-query-localhost: no
val-clean-additional: yes

# Listes de adresses publicitaires/malveillantes
include: /etc/unbound/unbound.conf.d/ads-malware.conf

# Redirections vers des serveurs DNS externes (ici FDN
forward-zone:
name: "."
forward-addr: 80.67.169.12   # FDN
forward-addr: 80.67.169.40   # FDN
forward-addr: 84.200.69.80   # DNS WATCH

Créer le script qui met à jour la liste des domaines publicitaires/malveillants :

nano /opt/unbound-update.sh
#!/bin/sh
# Télécharge la liste des domaines publicitaires/malveillants et la rend compatible avec Unbound
wget https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts -O /tmp/hosts
cat /tmp/hosts | grep '^0\.0\.0\.0' | awk '{print "local-zone: \""$2"\" redirect\nlocal-data: \""$2" A 0.0.0.0\""}' > /etc/unbound/unbound.conf.d/ads-malware.conf
rm /tmp/hosts

Rendre le script exécutable :

chmod +x /opt/unbound-update.sh

Créer des tâches planifiées pour mettre à jour la liste des serveurs racine et des domaines publicitaires/malveillants :

crontab -e
# Télécharge tous les 1er de chaque mois à 22h00 la liste des serveurs racine
    0 22 1 * * /usr/bin/wget ftp://FTP.INTERNIC.NET/domain/named.cache -O /var/lib/unbound/root.hints
# Télécharge tous les jours à 22h30 la liste des domaines publicitaires/malveillants
    30 22 * * * /bin/bash /opt/unbound-update.sh

Arrêter/désactiver le résolveur interne de Ubuntu 18.04 et démarrer/activer Unbound :

systemctl stop systemd-resolved.service
systemctl disable systemd-resolved.service
systemctl enable unbound.service
systemctl start unbound.service

Redémarrer le serveur

reboot

Quelques commandes utiles

Mettre à jour un enregistrement :

unbound-control flush nom-de-domaine

Tester la validité du fichier de configuration :

unbound-checkconf /etc/unbound/unbound.conf

Recharger la configuration de Unbound :

unbound-control -c /etc/unbound/unbound.conf reload

Sources

https://memo-linux.com/debian-installer-le-serveur-dns-unbound/

https://nlnetlabs.nl/documentation/unbound/

https://homeserver-diy.net/wiki/index.php?title=Installer_et_configurer_son_serveur_DNS_connect%C3%A9_aux_serveurs_root_avec_Unbound/

https://carmagnole.ovh/le-resolveur-dns-unbound.htm/

https://www.it-wars.com/posts/trucs-et-astuces/dns-back-to-the-roots/

https://www.pofilo.fr/post/20180630-dns-unbound/