Unbound
Il a été choisi comme résolveur de prendre unbound
pour les nœuds de
l'association. Ce n'est pas un choix définitif, d'autres résolveurs (comme
bind
) peuvent être choisi pour remplacer unbound
.
Tor permet aussi de faire des requêtes DNS donc il est important d'avoir son propre résolveur sur un nœud de sortie.
Installation
On installe le paquet Debian :
sudo apt-get install unbound
(On n'oublie pas de commit pour etckeeper :)
sudo etckeeper commit
Configuration
Il y a un fichier de configuration par défaut : /etc/unbound/unbound.conf
.
Ce fichier est quasi vide mais il existe un exemple de fichier de
configuration : /usr/share/doc/unbound/examples/unbound.conf
Listen on
# The default is to listen to localhost (127.0.0.1 and ::1).
Par défaut le serveur écoute sur localhost, cela nous convient
Clients autorisés
Les attaques DNS par amplification pour faire du DDoS sont courantes et peuvent être très puissantes, il faut donc faire attention à ce que le résolveur ne puisse pas être utilisé dans de telles attaques. On écoute donc uniquement sur localhost, ce qui est le comportement par défaut :
# control which clients are allowed to make (recursive) queries
# to this server. Specify classless netblocks with /size and action.
# By default everything is refused, except for localhost.
DNSSEC
Même si cela n'est pas vital, le résolveur permet de tirer profit de DNSSEC. C'est activé par défaut.
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"
En faisant un dig +dnssec afnic.fr
on peut voir dans les flags
flags: qr rd ra ad
.
AD signifie « Authenticated Data », ce qui confirme que ça marche.
Addresses privées
Unbound permet de spécifier certains réseaux qui ne peuvent figurer dans les réponses DNS ; ça permet de se prémunir d'attaques dites par «DNS rebinding».
server:
# Enforce privacy of these addresses. Strips them away from answers.
# It may cause DNSSEC validation to additionally mark it as bogus.
# Protects against 'DNS Rebinding' (uses browser as network proxy).
# Only 'private-domain' and 'local-data' names are allowed to have
# these private addresses.
private-address: 10.0.0.0/8
private-address: 172.16.0.0/12
private-address: 192.168.0.0/16
private-address: 169.254.0.0/16
private-address: fd00::/8
private-address: fe80::/10
Durcissement du résolveur
On utilise diverses options qui évitent d'annoncer le nom et la version du résolveur (ça gêne plus un bot qu'un adversaire capable de lire le wiki...), et on active certaines protections contre le déni de service :
server:
# enable to not answer id.server and hostname.bind queries.
hide-identity: yes
# enable to not answer version.server and version.bind queries.
hide-version: yes
# Harden against very small EDNS buffer sizes.
harden-short-bufsize: yes
# Harden against unseemly large queries.
harden-large-queries: yes
Transfert des requêtes pour Nos oignons
On transfère les requêtes pour nos propres zones directement vers bulbe :
forward-zone:
name: "nos-oignons.net"
forward-addr: 91.216.110.49
forward-addr: 2001:912:410:37::1
forward-zone:
name: "nos-oignons.org"
forward-addr: 91.216.110.49
forward-addr: 2001:912:410:37::1
forward-zone:
name: "nos-oignons.fr"
forward-addr: 91.216.110.49
forward-addr: 2001:912:410:37::1
Resolv.conf
Il faut ensuite indiquer dans le fichier resolv.conf
d'utiliser
localhost
comme résolveur :
nameserver 127.0.0.1
On peut en laisser un autre en cas de dysfonctionnement d'Unbound.
On préfèrera un résolveur DNS proche (celui de l'hébergeur de la machine ?)
à Google DNS (8.8.8.8
et 8.8.4.4
).