Outils pour utilisateurs

Outils du site


debian10:dns_unbound

Ceci est une ancienne révision du document !


Unbound le serveur dns simplement

Un dns c'est quoi DNS.

Installation

sudo apt update && sudo apt upgrade
sudo apt install unbound

Installation des serveurs racines

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
Automatisation de la mise à jour
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.

Configuration

Tout ce passe dans le fichier /etc/unbound/unbound.conf.
On peut modifier directement ce fichier mais personnellement je préfère créer un fichier contenant ma config dans /etc/unbound/unbound.conf.d/perso.conf

Mon fichier de configuration amplement inspirer du web.
le fichier de configuration

Ma configuration

  #server:
port:                   53                              #port d'écoute
do-ip4:                 yes                             #
do-ip6:                 yes                             #
do-udp:                 yes                             #protocole autorisé
do-tcp:                 yes                             #indique de communiquer sur le protocole TCP
#interface: 0.0.0.0
access-control:         192.168.1.0/24 allow
interface:              192.168.1.113                   #requi wifi
#interface:              192.168.4.21                    #requi rj45
#interface:              192.168.3.21                    #requi rj45
#interface:              192.168.2.21                    #requi rj45
interface:              127.0.0.1                       #?
access-control:         127.0.0.1       allow           #?
access-control:         192.168.1.0/24  allow           #requis rj45
#access-control:         192.168.2.0/24  allow           #requis rj45
#access-control:         192.168.3.0/24  allow           #requis rj45
#access-control:         192.168.4.0/24  allow           #requis rj45
#access-control:         192.168.1.0/24 allow           #requis wifi (pas en service)
private-address:        192.168.1.0/24                  #renforce le coter priver et  protège de la technique des "Relais DNS"
unwanted-reply-threshold: 10000000                      #éviter l'empoisonnement DNS
aggressive-nsec: yes
harden-algo-downgrade:  no                              #l algorithme le plus faible est exclut no
hide-identity:          yes                             #
hide-version:           yes
harden-glue:            yes
#ssl-upstream:          yes                             # oblige à communiquer sur le protocole TLS.                    :yes:erreur :debug: tcp error for address 8.8.8.8 port 53
#ssl-port:              853
prefetch:               yes                             # garde en cache les bons résultats
prefetch-key:           yes                             #
cache-min-ttl:          100000                          #durée minimal
cache-max-ttl:          200000                          #durée max
key-cache-size:         50m
infra-cache-numhosts:   1000000                         #nombre de hosts qui peuvent être mis en cache
do-ip6:                 no                              #désactive les requetes ipv6
tcp-idle-timeout:       15000                           #délais avant de signaler un timeout sur la connexion
 
harden-below-nxdomain:  yes
harden-dnssec-stripped: yes                             #DNSSEC pour les zones de confiance
val-clean-additional:   no                              #toutes les données DNS non sécurisées son effacee
do-not-query-localhost: yes                             #permet d'interroger localhost
so-reuseport:           yes                             #Linux seulement améliore les performance udp
#serve-expired: <yes or no>                             # tester
num-threads: 4
key-cache-slabs: 8
infra-cache-slabs: 8
msg-cache-slabs: 8
rrset-cache-slabs: 8
key-cache-size:         100m
key-cache-slabs:        2m
harden-short-bufsize:   yes                             #contre les très petites tailles de mémoire tampon EDNS.
harden-large-queries:   yes                             #contre les requêtes volumineuses
num-queries-per-thread: 100
root-hints: "/var/lib/unbound/root.hints"               #chemins des serveurs racine
 
val-log-level:          2                               #log
verbosity:              5                               #plage de 1 a 5 , 5 permet le plus parlant
log-time-ascii:         yes                             #valable sur un autre fichier que syslog
log-queries:            yes                             #affiche une ligne par requête
log-replies:            yes                             #affiche une ligne par requête,(réponse)
log-local-actions:      yes                             #affiche les info de la zone local
log-servfail:           yes                             #afficher pourquoi les requêtes renvoient SERVFAIL Ref doc
 
logfile:                /var/log/unbound.log            #chemin d'accès
 
private-domain:                "gull-server"                 # mon domaine local
 
forward-zone:
		name: "."
#forward-addr: 192.168.0.1@53
forward-addr: 1.1.1.1@53
forward-addr: 1.0.0.1@53
forward-addr: 65.2.17.60@53
forward-addr: 65.2.17.61@53
forward-addr: 66.2.24.158@53
forward-addr: 67.2.24.162@53
#forward-addr: 8.8.8.8@53					## dns google



server:

include:  "/etc/unbound/unbound.conf.d/adslist"

#  mon serveur
	local-data: "gull-server. IN A 192.168.1.113" 
	local-data: "gull-server.popaul77.lan. IN A 192.168.1.113" 
	local-data: "popaul77.lan. IN A 192.168.1.113"

Vérification et redémarrage

unbound-checkconf va lire le fichier et afficher les erreurs (corriger si nécessaire).

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)

Blocage des publicités

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

Automatisation de la mise a jours des listes

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
Automatisation de la mise à jour

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.

Utilisation

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.


Blocage des DMP avec Unbound

Attention tout ce qui se trouve dans ce paragraphe ne fonctionne pas chez moi et plante le serveur, je cherche une solution.
Pour le moment j'ai gardé les fichiers mais en mode inactif (renommé sans le .conf)

Blocage de DMP avec unbound

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.

Mise en place du blocage supplémentaire

Copier blocked.zone dans /var/lib/unbound/
Copier la version Debian de adblock-war.conf dans /etc/unbound/unbound.conf.d/

Redémarrer Unbound et c'est normalement fonctionnel

Verifier que ça fonctionne car chez moi c'est pas le cas (mais je creuse)

dig v.oui.sncf

Et dans la vie réelle

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

debian10/dns_unbound.1589114468.txt.gz · Dernière modification: 2020/05/10 12:41 par jpg