Un dns c'est quoi DNS.
La source de la documentation officielle (en anglais) est ici.
Je me suis aussi inspiré d'un tuto de Yannick sur le sujet.
sudo apt update && sudo apt upgrade sudo apt install unbound
Télécharger la liste des serveurs DNS racines :
cd /var/lib/unbound/ && wget ftp://ftp.internic.net/domain/named.cache
Mettre en place cette liste pour le serveur Unbound :
mv named.cache root.hints && chown unbound:unbound root.hints
Mise à jour de la liste automatiquement.
Il faut maintenir cette liste à jour pour que le serveur dns fonctionne correctement, on va donc écrire un script pour cela et mettre en place une tache cron pour exécuter la mise à jour une fois par jour.
Le script est placé dans /etc/unbound/
Le script a télécharger est ici.
Rendre le script executable
chmod +x dnsunbound-update-root-dns.sh
crontab -e (si c'est la première fois il faut choisir un éditeur, par défaut Nano est sélectionné)
Ajouter en fin de fichier
# Mise à jour automatique des serveurs DNS de la racine 30 03 * * * /etc/unbound/dnsunbound-update-root-dns.sh > /dev/null
Enregistrer et la mise à jour aura lieu tous les jours a 3h30.
Tester le script en l’exécutant à la main pour en valider son fonctionnement.
Tout ce passe dans le fichier /etc/unbound/unbound.conf.
On peut modifier directement ce fichier mais personnellement je préfère créer deux fichiers contenant ma config dans /etc/unbound/unbound.conf.d/perso.conf et /etc/unbound/unbound.conf.d/default.conf
Mes fichiers de configuration amplement inspiré du web.
Le fichier de configuration du serveur.
Mon fichier perso.
server: interface: 0.0.0.0 # 0.0.0.0 unbound sur toutes les interfaces interface: ::0 access-control: 0.0.0.0/0 allow access-control: ::/0 allow root-hints: "/var/lib/unbound/root.hints" verbosity: 0 # 0 messages (erreurs uniquement) num-threads: 2 msg-cache-slabs: 4 rrset-cache-slabs: 4 infra-cache-slabs: 4 key-cache-slabs: 4 rrset-cache-size: 100m msg-cache-size: 50m outgoing-range: 465 so-rcvbuf: 4m so-sndbuf: 4m port: 53 do-ip4: yes do-ip6: yes do-udp: yes do-tcp: yes do-daemonize: yes hide-identity: yes hide-version: yes harden-glue: yes harden-dnssec-stripped: yes harden-referral-path: yes use-caps-for-id: yes prefetch: yes # Blocage des sites de pub et plus include: "/etc/unbound/unbound.conf.d/adslist"
Il est possible d'améliorer la configuration du serveur en limitant les requettes au réseau local et plein d'autre chose mais j'ai encore quelques tests a faire avant de modifier ma configuration par défaut.
Optimiser unbound.
Quelques paramètres a modifier:
interface: 192.168.1.74 interface: ::1 do-ip4: yes do-ip6: yes do-udp: yes do-tcp: yes # autoriser mon serveur access-control: 127.0.0.0/8 allow # autoriser les réseaux locaux access-control: 192.168.1.0/24 allow access-control: 192.168.2.0/24 allow # interdire tout le reste access-control: 0.0.0.0/0 refuse Temps de rétention du cache cache-min-ttl: 3600 cache-max-ttl: 86400 Nombre de réponses pourries avant que le cache se vide unwanted-reply-threshold: 10000
# mon serveur virtuel de test local-data: "deb-cloud. IN A 192.168.1.74" local-data: "deb-cloud.popaul77.lan. IN A 192.168.1.74" local-data: "popaul77.lan. IN A 192.168.1.74" # le raspberry qui a aussi un dns unbound fonctionnel local-data: "raspberry. IN A 192.168.1.107" # ma machine portable local-data: "mydell. IN A 192.168.1.60" # Tuxmachine fixe local-data: "tuxmachine. IN A 192.168.1.50"
Tester le fichier de configuration.
unbound-checkconf
Redemarrer unbound
systemctl start unbound (démarre le serveur) systemctl reload unbound recharge la configuration) systemctl status unbound (donne l'état du serveur) systemctl stop unbound (arrête le serveur)
Télécharger et modifier le fichier tenu à jour par : Steven Black ( https://github.com/StevenBlack/hosts )
Se rendre dans le dossier de configuration de unbound /etc/unbound/unbound.conf.d/
Lancer la commande suivante:
wget -O- https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts | grep '^0\.0\.0\.0' | awk '{print "local-zone: \""$2"\" redirect\nlocal-data: \""$2" A 0.0.0.0\""}' > adslist
Tester la configuration du serveur avec unbound-checkconf
root@deb-cloud:~# /sbin/unbound-checkconf unbound-checkconf: no errors in /etc/unbound/unbound.conf
Relancer le serveur dns:
systemctl restart unbound
Pour que le blocage des indésirables soit efficace il faut maintenir à jour la liste pour cela un script et une tache cron seront utilisés.
Le script est placé dans /etc/unbound/
Le script a télécharger est ici.
Rendre le script executable
chmod +x domaines-bloques.sh
crontab -e (si c'est la première fois il faut choisir un éditeur, par défaut Nano est sélectionné)
Ajouter en fin de fichier
# Mise à jour automatique des domaines indésirables. 10 03 * * * /etc/unbound/domaines-bloques.sh > /dev/null
Enregistrer et la mise à jour aura lieu tous les jours a 3h10.
Tester le script en l’exécutant à la main pour en valider son fonctionnement.
Maintenant que j'ai un serveur dns fonctionnel je vais configurer ma machine pour l'utiliser.
Sur nos distributions il existe un fichier /etc/resolv.conf qui contient les adresses des serveurs dns a contacter pour résoudre les adresses des sites consultés.
On va modifier ce fichier pour faire les tests en rajoutant l'adresse ip du serveur unbound
nano /etc/resolv.conf
nameserver 192.168.1.113 # adresse de mon serveur dns a rajouter nameserver 192.168.1.254 # adresse du serveur dns de ma freebox
Il ne reste plus qu'a tester le bon fonctionnement de unbound
apt install dnsutils
jpg@MyDell:~$ dig google.fr ;; QUESTION SECTION: ;google.fr. IN A ;; ANSWER SECTION: google.fr. 100000 IN A 216.58.213.131 ;; Query time: 570 msec ## temps mis pour repondre ;; SERVER: 192.168.1.74#53(192.168.1.74) ## __ici c'est le serveur unbound qui repond pour la premiere fois a cette requette__ ;; WHEN: dim. avril 12 14:27:50 CEST 2020 ;; MSG SIZE rcvd: 54
jpg@MyDell:~$ dig google.fr ;; QUESTION SECTION: ;google.fr. IN A ;; ANSWER SECTION: google.fr. 99823 IN A 216.58.213.131 ;; Query time: 0 msec ## temps mis pour repondre ;; SERVER: 192.168.1.74#53(192.168.1.74) # dexième reponse du serveur ;; WHEN: dim. avril 12 14:30:47 CEST 2020 ;; MSG SIZE rcvd: 54
La reponse parle d'elle même 0 msec.
Dans un navigateur internet, les publicités sont bloquées par unbound ce qui se traduit par des pages qui s'ouvrent plus vite.
NOTE: Cette procédure n'est valide qu'avec une version égale ou supérieure à la version 1.7 de unbound, sur Raspbian ou Debian il faut donc une Buster (10) pour avoir cette version de Unbound.
Pour les curieux il faut faire un tour sur ce site Blocage de DMP avec unbound où les fichiers nécessaires sont maintenu à jour.
Ce projet regroupe la configuration nécessaire pour Unbound afin de bloquer certaines « Data Management Platforms » (DMP) utilisées par de plus en plus de sites (liberation.fr, oui.scnf, lemonde.fr, fnac.com…) et qui échappent – pour l'instant aux bloqueurs de traqueurs traditionnels (uBlock Origin ou uMatrix par exemple) ou un peu plus sophistiqué.
Personnellement je vais juste faire un raccourci de la doc sitée ci-dessus mais je vous engage a lire celle-ci c'est très instructif des pratiques des gestionnaires de site pour intercepter notre navigation et ainsi notre vie.
Copier blocked.zone dans /var/lib/unbound/
wget http://download.tuxfamily.org/popaul77/gulliver77/blocked.zone /var/lib/unbound/blocked.zone chown unbound:unbound /var/lib/unbound/blocked.zone
Copier la version Debian de adblock-war.conf dans /etc/unbound/unbound.conf.d/
wget http://download.tuxfamily.org/popaul77/gulliver77/adblock-war.conf /etc/unbound/unbound.conf.d/adblock-war.conf chown unbound:unbound /etc/unbound/unbound.conf.d/adblock-war.conf
Tester la nouvelle configuration
unbound-checkconf
Redémarrer Unbound et c'est normalement fonctionnel
systemctl restart unbound systemctl status unbound
Verifier que ça fonctionne.
dig v.oui.sncf ; <<>> DiG 9.11.5-P4-5.1+b1-Debian <<>> v.oui.sncf ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 5341 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;v.oui.sncf. IN A ;; ANSWER SECTION: v.oui.sncf. 3600 IN CNAME voyages-sncf.eulerian.net. ;; AUTHORITY SECTION: eulerian.net. 10800 IN SOA localhost. nobody.invalid. 1 3600 1200 604800 10800
Le domaine eulerian.net est redirigé sur localhost.
Il est possible de forcer l'adresse des serveurs dns sur tous les pc (Linux, Windows, Apple) exemple avec gnome-network-manager qui permet de fixer les dns de la connexion active, mais cette configuration est a faire sur toutes les machines du réseau local, il y a donc une solution un peu plus efficace par sa simplicité.
Lors du boot de mon pc les serveurs dns sont donner par la Freebox via le dhcp il me faut donc modifier la configuration de la box pour intégrer l'adresse de la machine qui héberge unbound.
Avantage de cette configuration, c'est que toutes les machines qui vont se connecter à ma Freebox auront l'adresse de ma machine dns unbound et donc profiter de sa rapidité et du filtrage publicitaire.
Certaines box internet n'offrent pas la possibilité de rajouter des adresses de serveur dns. Il faudra donc désactiver la fonction dhcp de la box et de monter sur la machine hébergeant le serveur dns unbound le serveur isc-dhcp configurer de manière a attribuer adresse ip et dns au réseau local.
Pour les distribution Linux il est possible de modifier le client dhcp pour forcer le serveur dns a utiliser.
vim /etc/dhcp/dhclient.conf
# Mettre au dessus du bloc request
supersede domain-name-servers 192.168.x.x; (adresse IP de votre serveur dns)
Jpg