« Unbound » : différence entre les versions
(Page créée avec « Category:Service_dns [https://www.nlnetlabs.nl/projects/unbound/about/ Unbound] est un serveur ''DNS'' faisant office de résolveur récursif et pouvant faire autorité sur des domaines locaux. Il est développé par [https://www.nlnetlabs.nl/ NLnet Labs] et se veut à la fois complet en fonctionnalité, léger (grâce à la modularité de ces dernières) et simple à configurer. =Installation et configuration= Installation du service avec une ''Debian Bullseye... ») |
(Ajout d'une astuce pour autoriser un ensemble de sous-domaines dans une liste RPZ) |
||
(3 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 101 : | Ligne 101 : | ||
Il est à noter que tous les sous-domaines de chaque entrée sont automatiquement pris en compte. | Il est à noter que tous les sous-domaines de chaque entrée sont automatiquement pris en compte. | ||
{{astuce|Si vous voulez [https://serverfault.com/questions/1104690/how-to-whitelist-domain-in-unbound autoriser] un ensemble de sous-domaines inclus dans un sous-domaine bloqué, vous pouvez utiliser une ligne comportant la syntaxe suivante (exemple pour ''Gmail'') : <code>local-zone: "l.google.com" always_transparent</code>.}} | |||
<syntaxhighlight lang="nestedtext"> | <syntaxhighlight lang="nestedtext"> | ||
Ligne 178 : | Ligne 180 : | ||
Il est également possible de recharger la configuration sans relancer le logiciel. Cela a pour effet de ne pas le faire planter si jamais un fichier de configuration contient une erreur | Il est également possible de recharger la configuration sans relancer le logiciel. Cela a pour effet de ne pas le faire planter si jamais un fichier de configuration contient une erreur | ||
unbound-control reload | unbound-control reload | ||
Enfin, il est possible de configurer le système du serveur pour utiliser notre résolveur local et ne pas dépendre d'un résolveur de plus haut niveau (celui de notre ''FAI'' par exemple) | |||
echo "nameserver 127.0.0.1" > /etc/resolv.conf | |||
==Sources de la section== | ==Sources de la section== | ||
Ligne 184 : | Ligne 189 : | ||
* https://lists.nlnetlabs.nl/pipermail/unbound-users/2014-October/003573.html | * https://lists.nlnetlabs.nl/pipermail/unbound-users/2014-October/003573.html | ||
* https://unbound.docs.nlnetlabs.nl/en/latest/manpages/unbound.conf.html | * https://unbound.docs.nlnetlabs.nl/en/latest/manpages/unbound.conf.html | ||
=Convertir une liste de domaines en RPZ= | |||
Il est possible de trouver des listes de domaines générées par des tiers sur Internet ([https://raw.githubusercontent.com/schrebra/Windows.10.DNS.Block.List/main/hosts.txt exemple] d'une liste de domaine utilisés par ''Windows 10'' - [https://github.com/schrebra/Windows.10.DNS.Block.List source]). | |||
Pour les convertir en fichier de configuration ''RPZ'' avec syntaxe ''Unbound'', vous pouvez utiliser mon script : | |||
<syntaxhighlight lang="bash"> | |||
#!/bin/bash | |||
# Via un fichier distant | |||
unbound_rbl_src=$(wget -qO - https://raw.githubusercontent.com/schrebra/Windows.10.DNS.Block.List/main/hosts.txt) | |||
# ou via un fichier local | |||
# unbound_rbl_src=$(cat /tmp/windows10-rbl.txt) | |||
unbound_rbl_dst="/tmp/windows10-rbl-unbound.conf" | |||
echo "server:" > "${unbound_rbl_dst}" | |||
for i in $unbound_rbl_src; do | |||
echo -e "\tlocal-zone: \"${i}\" redirect\n\tlocal-data: \"${i} A 127.0.0.1\"" >> "${unbound_rbl_dst}" | |||
done | |||
</syntaxhighlight> | |||
Ce fichier sera à placer dans le répertoire des configurations du résolveur ''DNS'' <code>/etc/unbound/unbound.conf.d/</code> avant rechargement <code>unbound-control reload</code>. | |||
=Liste RPZ automatique= | =Liste RPZ automatique= | ||
Le site [https://pgl.yoyo.org pgl.yoyo.org] met à jour et publie une liste de domaines à interdire au format ''Unbound''. Ceci peut être utile afin de filtrer les sites irrespectueux de la vie privée des utilisateurs | Le site [https://pgl.yoyo.org pgl.yoyo.org] met à jour et publie une [https://pgl.yoyo.org/adservers/serverlist.php?hostformat=unbound&showintro=0&mimetype=plaintext liste de domaines] à interdire au format ''Unbound''. Ceci peut être utile afin de filtrer les sites irrespectueux de la vie privée des utilisateurs | ||
{{info|De façon générale, il est préférable de laisser ce filtrage être opéré par les utilisateurs eux-même afin de maintenir un [https://www.arcep.fr/nos-sujets/la-neutralite-du-net.html réseau aussi neutre que possible]. Il est important également de considérer l'aspect sécuritaire au fait de récupérer une liste de résolution canonique sur un site tiers. Rien ne garanti que son administrateur (ou un pirate) n'utilisera cette liste pour faire rediriger un site légitime vers une adresse externe et compromettre l'authenticité de vos communications avec celui-ci. Cette solution est à adapter à la situation locale.}} | {{info|De façon générale, il est préférable de laisser ce filtrage être opéré par les utilisateurs eux-même afin de maintenir un [https://www.arcep.fr/nos-sujets/la-neutralite-du-net.html réseau aussi neutre que possible]. Il est important également de considérer l'aspect sécuritaire au fait de récupérer une liste de résolution canonique sur un site tiers. Rien ne garanti que son administrateur (ou un pirate) n'utilisera cette liste pour faire rediriger un site légitime vers une adresse externe et compromettre l'authenticité de vos communications avec celui-ci. Cette solution est à adapter à la situation locale.}} |
Dernière version du 11 mars 2024 à 19:52
Unbound est un serveur DNS faisant office de résolveur récursif et pouvant faire autorité sur des domaines locaux. Il est développé par NLnet Labs et se veut à la fois complet en fonctionnalité, léger (grâce à la modularité de ces dernières) et simple à configurer.
Installation et configuration
Installation du service avec une Debian Bullseye
apt install --no-install-recommends unbound
Afin d'utiliser directement les serveurs racines pour la résolution récursive des requêtes clientes, il faut télécharger la liste contenant leurs adresses
wget https://www.internic.net/domain/named.root -O /var/lib/unbound/root.hints && chown unbound:unbound /var/lib/unbound/root.hints
Le fichier de configuration suivant sera utilisé
cat << _EOF_ > /etc/unbound/unbound.conf
# Fichier de configuration d'Unbound pour Debian.
#
# Référez-vous à la page de manuel unbound.conf(5).
#
# Voyez /usr/share/doc/unbound/examples/unbound.conf pour un
# fichier de configuration de référence commenté.
#
# La ligne suivante permet d'inclure les fichiers de configuration
# additionnels depuis le répertoire /etc/unbound/unbound.conf.d.
include-toplevel: "/etc/unbound/unbound.conf.d/*.conf"
server:
statistics-interval: 0
extended-statistics: yes
statistics-cumulative: yes
verbosity: 3
# Paramètres réseau
interface: 127.0.0.1
interface: 192.168.1.5
port: 53
do-ip4: yes
do-ip6: no
do-udp: yes
do-tcp: no
# Contrôle d'accès
access-control: 127.0.0.0/8 allow
access-control: 192.168.0.0/16 allow
access-control: 0.0.0.0/0 refuse
# DNSSEC
# auto-trust-anchor-file: "/var/lib/unbound/root.key"
harden-dnssec-stripped: yes
# Adresses des serveurs racine
root-hints: "/var/lib/unbound/root.hints"
# Paramètres système
hide-identity: yes
hide-version: yes
harden-glue: yes
use-caps-for-id: yes
cache-min-ttl: 3600
cache-max-ttl: 86400
prefetch: yes
num-threads: 6
msg-cache-slabs: 16
rrset-cache-slabs: 16
infra-cache-slabs: 16
key-cache-slabs: 16
rrset-cache-size: 256m
msg-cache-size: 128m
so-rcvbuf: 1m
unwanted-reply-threshold: 10000
do-not-query-localhost: yes
val-clean-additional: yes
# Journalisation
use-syslog: no
logfile: /var/log/unbound.log
# Paramètres du cache
cache-min-ttl: 3600
cache-max-ttl: 86400
prefetch: yes
prefetch-key: yes
_EOF_
Il est possible de servir des domaines locaux (faire autorité)
cat << _EOF_ > /etc/unbound/unbound.conf.d/ycharbi.yo.conf
server:
local-zone: "ycharbi.yo." static
local-data: "ycharbi.yo. IN A 192.168.1.1"
local-data: "toto1.ycharbi.yo. IN A 192.168.1.25"
local-data: "ycharbi.yo. IN MX 10 toto1.ycharbi.yo."
_EOF_
Il est également possible de rediriger des requêtes clientes après modification (DNS menteur aussi appelée Reponse Policy Zone ou RPZ) afin d’interdire l'accès à certains domaines. J'utilise cette fonctionnalité à deux fins :
- Servir mon miroir de dépôt local à toute mes machines sans avoir à changer leur configuration
- Éviter certains sites irrespectueux des données personnelles (utilisation d'une liste automatique plus bas)
Il est à noter que tous les sous-domaines de chaque entrée sont automatiquement pris en compte.
ASTUCE
Si vous voulez autoriser un ensemble de sous-domaines inclus dans un sous-domaine bloqué, vous pouvez utiliser une ligne comportant la syntaxe suivante (exemple pour Gmail) :local-zone: "l.google.com" always_transparent
.cat << _EOF_ > /etc/unbound/unbound.conf.d/rpz.conf
server:
# Miroirs de dépôts APT Debian
local-zone: "ftp.fr.debian.org" redirect
local-data: "ftp.fr.debian.org A 192.168.1.77"
local-zone: "http.debian.net" redirect
local-data: "http.debian.net A 192.168.1.77"
local-zone: "deb.debian.org" redirect
local-data: "deb.debian.org A 192.168.1.77"
local-zone: "security.debian.org" redirect
local-data: "security.debian.org A 192.168.1.77"
local-zone: "httpredir.debian.org" redirect
local-data: "httpredir.debian.org A 192.168.1.77"
local-zone: "debian.map.fastlydns.net" redirect
local-data: "debian.map.fastlydns.net A 192.168.1.77"
# APT utilise aussi des champs SRV pour résoudre l'adresse des miroirs
local-zone: "prod.debian.map.fastly.net" redirect
local-data: "prod.debian.map.fastly.net A 192.168.1.77"
local-zone: "dpvctowv9b08b.cloudfront.net" redirect
local-data: "dpvctowv9b08b.cloudfront.net A 192.168.1.77"
local-zone: "_http._tcp.deb.debian.org." redirect
local-data: "_http._tcp.deb.debian.org. 3600 IN SRV 10 1 80 prod.debian.map.fastly.net."
local-data: "_http._tcp.deb.debian.org. 3600 IN SRV 10 1 80 dpvctowv9b08b.cloudfront.net."
# Saloperies à supprimer
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"
local-zone: "ask.com" redirect
local-data: "ask.com A 127.0.0.1"
local-zone: "facebook.com" redirect
local-data: "facebook.com A 127.0.0.1"
local-zone: "truste-svc.net" redirect
local-data: "truste-svc.net A 127.0.0.1"
local-zone: "trustarc.com" redirect
local-data: "trustarc.com A 127.0.0.1"
local-zone: "gstatic.com" redirect
local-data: "gstatic.com A 127.0.0.1"
local-zone: "consent.google.com" redirect
local-data: "consent.google.com A 127.0.0.1"
local-zone: "consent.youtube.com" redirect
local-data: "consent.youtube.com A 127.0.0.1"
local-zone: "cdn.privacy-mgmt.com" redirect
local-data: "cdn.privacy-mgmt.com A 127.0.0.1"
local-zone: "privacy-mgmt.com" redirect
local-data: "privacy-mgmt.com A 127.0.0.1"
local-zone: "cdn.cookielaw.org" redirect
local-data: "cdn.cookielaw.org A 127.0.0.1"
local-zone: "digitalfeedback.us.confirmit.com" redirect
local-data: "digitalfeedback.us.confirmit.com A 127.0.0.1"
# Télémétrie Mozilla
local-zone: "incoming.telemetry.mozilla.org" redirect
local-data: "incoming.telemetry.mozilla.org A 127.0.0.1"
_EOF_
Vérification de la configuration du service
unbound-checkconf
Redémarrage du service
systemctl restart unbound
Il est également possible de recharger la configuration sans relancer le logiciel. Cela a pour effet de ne pas le faire planter si jamais un fichier de configuration contient une erreur
unbound-control reload
Enfin, il est possible de configurer le système du serveur pour utiliser notre résolveur local et ne pas dépendre d'un résolveur de plus haut niveau (celui de notre FAI par exemple)
echo "nameserver 127.0.0.1" > /etc/resolv.conf
Sources de la section
- https://memo-linux.com/debian-installer-le-serveur-dns-unbound/
- https://memo-linux.com/ubuntu-serveur-dns-unbound/
- https://lists.nlnetlabs.nl/pipermail/unbound-users/2014-October/003573.html
- https://unbound.docs.nlnetlabs.nl/en/latest/manpages/unbound.conf.html
Convertir une liste de domaines en RPZ
Il est possible de trouver des listes de domaines générées par des tiers sur Internet (exemple d'une liste de domaine utilisés par Windows 10 - source).
Pour les convertir en fichier de configuration RPZ avec syntaxe Unbound, vous pouvez utiliser mon script :
#!/bin/bash
# Via un fichier distant
unbound_rbl_src=$(wget -qO - https://raw.githubusercontent.com/schrebra/Windows.10.DNS.Block.List/main/hosts.txt)
# ou via un fichier local
# unbound_rbl_src=$(cat /tmp/windows10-rbl.txt)
unbound_rbl_dst="/tmp/windows10-rbl-unbound.conf"
echo "server:" > "${unbound_rbl_dst}"
for i in $unbound_rbl_src; do
echo -e "\tlocal-zone: \"${i}\" redirect\n\tlocal-data: \"${i} A 127.0.0.1\"" >> "${unbound_rbl_dst}"
done
Ce fichier sera à placer dans le répertoire des configurations du résolveur DNS /etc/unbound/unbound.conf.d/
avant rechargement unbound-control reload
.
Liste RPZ automatique
Le site pgl.yoyo.org met à jour et publie une liste de domaines à interdire au format Unbound. Ceci peut être utile afin de filtrer les sites irrespectueux de la vie privée des utilisateurs
INFORMATION
De façon générale, il est préférable de laisser ce filtrage être opéré par les utilisateurs eux-même afin de maintenir un réseau aussi neutre que possible. Il est important également de considérer l'aspect sécuritaire au fait de récupérer une liste de résolution canonique sur un site tiers. Rien ne garanti que son administrateur (ou un pirate) n'utilisera cette liste pour faire rediriger un site légitime vers une adresse externe et compromettre l'authenticité de vos communications avec celui-ci. Cette solution est à adapter à la situation locale.Le script suivant (écrit par sgble et adapté par mes soins) permet de récupérer la dernière version de la liste tout en sauvegardant sa copie actuelle, d'en vérifier la syntaxe et ainsi de soit recharger le service, soit restaurer sa version fonctionnelle :
cat << _EOF_ > /usr/local/sbin/maj-rbl-unbound
#!/bin/bash
# Lien de la liste
yoyo_url="https://pgl.yoyo.org/adservers/serverlist.php?hostformat=unbound&showintro=0&mimetype=plaintext"
# Localisation de la configuration Unbound
unbound_confs="/etc/unbound/unbound.conf.d/"
# Si le fichier précédent existe déjà, le garder en réserver au cas où
if [ -f "${unbound_confs}"/yoyo_blocus.conf ]; then
cp "${unbound_confs}"/yoyo_blocus.conf /tmp/yoyo_blocus.conf.sauv
fi
# Télécharger et placer la liste au bon endroit
wget "${yoyo_url}" -O "${unbound_confs}"/yoyo_blocus.conf && sed -i '1 s/^/server:\n/' "${unbound_confs}"/yoyo_blocus.conf
# Vérifier que Unbound ne rencontre aucun problème avec la liste et recharger si vrai
if unbound-checkconf; then
echo "La nouvelle liste est bonne"
unbound-control reload
echo "Unbound a été rechargé"
# Sinon, rétablir l'ancien fichier qu'on a gardé en réserve
else
echo "La nouvelle liste semble mal formaté"
mv /tmp/yoyo_blocus.conf.sauv "${unbound_confs}"/yoyo_blocus.conf
echo "Une restauration de l'ancienne liste a été effectuée"
fi
_EOF_
chmod +x /usr/local/sbin/maj-rbl-unbound
Création d'un minuteur Systemd afin d'automatiser l'actualisation de la liste (tous les jours)
mkdir -p /usr/local/etc/systemd/system
cat << _EOF_ > /usr/local/etc/systemd/system/maj-rbl-unbound.service
[Unit]
Description=Actualisation de la liste RPZ d'Unbound
After=network.target
[Service]
Type=oneshot
ExecStart=maj-rbl-unbound
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
_EOF_
cat << _EOF_ > /usr/local/etc/systemd/system/maj-rbl-unbound.timer
[Unit]
Description=Exécution journalière de l'actualisation de la liste RPZ d'Unbound
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target
_EOF_
ln -s /usr/local/etc/systemd/system/maj-rbl-unbound.service /etc/systemd/system/ ln -s /usr/local/etc/systemd/system/maj-rbl-unbound.timer /etc/systemd/system/
systemctl daemon-reload
systemctl enable maj-rbl-unbound.timer systemctl start maj-rbl-unbound.timer