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).