DNS : Choix, configuration et sécurité

Permalink | Publié le 2 novembre 2016, dernière modification le 9 avril 2018.

Sommaire

Présentation

DNS est un service qui permet d’associer un nom de domaine (duckduckgo.com) à une adresse IP (54.229.105.92). Chaque fois que l’on saisi une adresse ou que l’on clique sur un lien, un résolveur DNS (aussi appelé serveur DNS) est questionné et donne l’adresse IP associée. Les résolveurs DNS questionnent quant à eux les serveurs racines DNS (il y en a 13 dans le monde actuellement) et gardent en cache ces informations un certain temps pour réduire les requêtes.

Il faut bien comprendre ici que le résolveur DNS que vous utilisez connaît tous les sites web que vous visitez, peu importe que vous utilisiez tel ou tel navigateur ou que vous soyez en navigation privée. Il ne connaît cependant que le domaine et non pas la page précise que vous avez vu.

Il est donc important de pouvoir choisir le serveur questionné durant votre navigation, car cela concerne votre vie privée mais également la neutralité d’Internet, car c’est généralement via les DNS que s’effectue la censure de certains gouvernements, comme en France.

Questionner son résolveur DNS

Il est possible de connaître l’adresse IP associée de n’importe quel nom de domaine à l’aide d’un outils disponible sur toutes les plateformes (Linux, Windows et Mac) qui est nslookup. Son utilisation est très simple sous Unix :

nslookup duckduckgo.com

Dans ce cas, le résolveur DNS, dont l’adresse est précisée sur les deux premières lignes (Server et Address), retourne plusieurs résultats. C’est le cas pour certains sites web importants qui disposent de plusieurs serveurs, où l’on réparti la charge sur chacun d’entre eux. Il est également possible de spécifier un autre résolveur DNS à questionner, simplement en ajoutant son adresse à la fin de commande :

nslookup duckduckgo.com 87.98.175.85

Sous Unix il existe également deux autres logiciels : dig et host. Il existe quelques différences entre ces 3 outils, mais ils permettent de faire la même chose à quelques options près. Leur utilisation n’est pas plus compliquée :

dig duckduckgo.com
host duckduckgo.com

Il est également possible d’effectuer la requête à partir d’une adresse IP pour connaître le nom de la machine associée à cette IP. Cela fonctionne avec les 3 commandes (nslookup, dig et host) et host retournera par exemple l’adresse ec2-54-229-105-203.eu-west-1.compute.amazonaws.com.

host 54.229.105.203

Neutralité et vie privée

Par défaut, votre ordinateur trouve tout seul le résolveur DNS à questionner, à l’aide du protocole DHCP, et donc c’est le résolveur DNS de votre FAI (Free, Orange, SFR…) qui est utilisé. Tous les gros FAI sont soumis à la législation du pays, et en France, lorsqu’on souhaite censurer un site web, cela passe via leurs résolveurs DNS, c’est de cette façon qu’un des noms de domaine de T411, un site de téléchargement illégal, a été bloqué par la justice. Depuis 2016, la consultation de sites terroristes est un délit, et lorsque vous accédez à l’un de ces sites, vous êtes redirigé vers une page du gouvernement qui collecte votre IP. On appelle DNS menteurs ces résolveurs qui altèrent délibérément les informations DNS transmises au client, c’est une méthode controversée car elle s’oppose à la neutralité d’Internet.

Le 17 octobre 2016 s’est produit l’événement parfait pour illustrer le pouvoir de censure qui est à disposition d’un FAI ou d’un gouvernement : les noms de domaine de nombreux sites web, dont 3 majeurs (Google, Wikipédia et OVH, rien que ça) sont arrivés « par erreur » dans la liste des sites bloqués par le résolveur DNS d’Orange pour… apologie du terrorisme.

Utiliser le résolveur DNS d’un FAI ou bien d’une entreprise comme Google ou Cisco (OpenDNS) n’est pas ce qui est de plus sûr en terme de vie privée également. Google en sait déjà bien assez sur vous avec tout ses produits (Search, Android, Gmail, Analytics…), pas besoin de lui fournir la liste complète des sites que vous avez visité et OpenDNS revend vos données personnelles pour être viable économiquement.

Attention, ce n’est pas parce que vous utilisez un autre DNS que celui de votre FAI que ce dernier ne peut pas savoir les sites que vous visitez, car les requêtes DNS sont transmises en clair. Il vous faut dans ce cas utiliser un VPN, à condition que ce ne soit pas une passoire, ou utiliser par exemple DNSCrypt pour chiffrer les requêtes (voir plus bas).

DNS Associatifs

Une bonne solution est de se tourner vers un résolveur DNS associatif, dont l’objectif est le plus souvent de proposer un service sans censure, le plus neutre possible et respectueux de votre vie privée.

Parmi le monde associatif, il y a l’association FDN (French Data Network) qui est un Fournisseur d’Accès à Internet (FAI). Il fait notamment partie de la Fédération FDN, qui est un réseau de FAI associatifs qui prône entre autres le respect de la neutralité d’Internet. L’association FDN met à disposition son résolveur DNS.

Il existe également OpenNIC Project. L’objectif de ce site est de vous proposer des serveurs DNS neutres, gratuits et sans tracking et les plus proches de chez vous (donc plus rapide).

Configuration sous Windows

Voici un guide pas-à-pas pour changer de serveur DNS sous Windows : commencez par aller sur le site OpenNIC Project (ou bien celui de l’association FDN)et récupérez dans la liste proposée en page d’accueil les deux premières adresses IPs :


Ensuite vous cliquez dans votre barre des tâches sur l’icône de la connexion Wifi (ou Ethernet selon les cas), puis vous allez dans les paramètres réseaux (« Network Settings » sur l’image) :

Vous allez tout en bas de la fenêtre qui s’ouvre pour trouver la liste des paramètres similaires, et sélectionner le « Centre Réseau et Partage » (« Network and Sharing Centre » sur l’image) :

Vous allez ensuite dans le menu de gauche, dans « Change adapter settings » (Changer les paramètres … d’adaptation ?) :

Vous arrivez alors à la liste de vos connexions réseaux. Vous faites un clic droit sur celle qui fonctionne (pour la reconnaître, c’est celle qui n’a pas de croix rouge en dessous) et vous cliquez sur « Propriétés » :

Note : vous pouvez faire ceci pour chaque connexion que vous utilisez.

Dans la fenêtre suivante qui s’ouvre, sélectionnez « Protocole Internet Version 4 (TCP/IPv4) » puis cliquez sur « Propriétés » :


Dernière étape : Cochez la case « Utiliser l’adresse de serveur DNS suivante : » et mettez-y les adresses proposées par OpenNIC Project. Pour remettre les DNS par défaut, il suffit de cocher la case juste au dessus « Obtenir automatiquement l’adresse du serveur DNS » ! Tout simplement 🙂

Il est parfois nécessaire de couper et relancer l’accès Internet pour que les modifications soient prises en compte. Pour vérifier le serveur DNS questionné, utilisez la commande nslookup comme indiqué en haut de cet article.

Configuration sous Linux

Comme sous Windows, commencez par récupérer les adresses des serveurs DNS proposés par OpenNIC Project :


Ensuite il suffit d’éditer la connexion en question, cela dépend de votre distribution, c’est parfois un simple clic-droit sur l’icône WiFi de votre barre des tâches, et un bouton de configuration associé à la connexion. Une fois la fenêtre de configuration de connexion affichée, vous allez dans l’onglet « IPv4 ». Vous changez la méthode pour « Automatique (adresses uniquement) » puis vous spécifiez en dessous les adresses DNS, séparées par des virgules.

Il est parfois nécessaire de couper et relancer l’accès Internet pour que les modifications soient prises en compte. Pour vérifier le serveur DNS questionné, utilisez la commande nslookup comme indiqué en haut de cet article.

DNSSEC

DNSSEC est un protocole qui ajoute une couche de sécurité au protocole DNS. Ainsi, les données transmises sont signées et il est possible pour le client de vérifier l’exactitude des informations transmises. Cela permet de se protéger contre le cache poisoning / DNS spoofing, technique visant à fournir une fausse correspondance @IP/NDD à un résolveur DNS, qui une fois dans le cache est transmise à tous les utilisateurs.

Il y a deux paramètres à prendre en compte pour DNSSEC : celui-ci s’active individuellement à chaque nom de domaine, un résolveur DNS peut avoir certains domaines sécurisés et d’autres noms et il faut également qu’il supporte le protocole.

Pour vérifier ceci, une extension est disponible pour Firefox, il s’agit de DNSSEC/TLSA Validator et se présente sous la forme de deux icônes dans la barre d’adresse. Il y a une clé dans un carré, qui indique si le domaine est sécurisé par DNSSEC (en vert c’est sécurisé, en orange votre résolveur DNS n’est pas compatible et en gris avec un signe « STOP » c’est que le domaine n’est pas protégé) et un cadena dans un rond, qui indique lui le résultat de la vérification avec DANE/TLSA


On constate ci-dessus que mon nom de domaine est sécurisé par DNSSEC, mais qu’il ne propose malheureusement pas la vérification avec DANE/TLSA (les raisons sont expliquées sur cet article d’Aeris).

Unbound

Pour éviter les problèmes de censure et d’espionnage, il est possible de mettre en place son propre résolveur DNS, sur votre ordinateur mais aussi sur un Raspberry Pi par exemple, pour qu’il soit utilisé par tous les périphériques chez vous. Il existe différentes solutions, comme BIND, Dnsmasq ou encore PowerDNS (tableau comparatif), le plus utilisé étant BIND, mais Unbound est beaucoup plus simple à configurer. La mise en place ci-dessous est effectuée sur un Raspberry Pi.

Le résolveur local doit être correctement configuré, de manière à aller interroger directement les serveurs racines ou bien des résolveurs neutres (associatifs par exemple) lorsque la réponse ne se trouve pas dans son cache. En terme d’avantages, on note également la rapidité d’une requête DNS lorsque l’information est dans le cache, ainsi que la possibilité de fermer l’accès aux régies publicitaires.

sudo apt-get install unbound

On va ensuite se rendre dans le fichier de configuration d’Unbound. Ce dernier indique qu’il existe un fichier d’exemple commenté dans /usr/share/doc/unbound/examples/unbound.conf. Il inclut également tous les fichiers de configuration présents dans le répertoire /etc/unbound/unbound.conf.d/, qui ne concerne pour le moment qu’un fichier à propos de DNSSEC.

sudo nano /etc/unbound/unbound.conf
verbosity: 1

Défini le niveau d’informations fourni dans les logs d’Unbound. La valeur par défaut est 1 (informations opérationnelles), le minimum est 0 (seulement les erreurs), et le maximum 5.

interface 10.42.0.98

Défini l’interface du serveur écouté. Si votre machine est reliée à plusieurs réseaux, il faut spécifier 0.0.0.0 et pour n’écouter que sur localhost, il ne faut pas définir ce paramètre.

access-control 10.42.0.98/24 allow

Ce paramètre autorise l’accès aux machines sur la plage d’adresses spécifiée. Il est possible d’utiliser également deny (on jette le message), refuse (on répond négativement à la requête) et allow_snoop pour autoriser également l’accès non-résursif : utile en tant qu’outil de debug, il permet cependant l’espionnage du cache (cache spoofing), donc à n’utiliser que pour l’IP de l’administrateur.

Il faut ensuite définir qui Unbound va questionner lorsque la réponse ne sera pas dans son cache. Il y a deux solutions possibles : contacter directement les serveurs racines ou bien contacter un autre résolveur DNS. Pourquoi cette autre solution ? Si tout le monde mettait en place son propre résolveur DNS demain, les 13 serveurs racines existants dans le monde à l’heure actuelle (de ‘A’ à ‘M’) ne tiendraient probablement pas la charge. Mais bon, d’ici à ce que ça arrive… je vais donc vous montrer les deux solutions.

forward-zone:
            name: "."
            forward-addr: 80.67.169.12 #serveur FDN
            forward-addr: 80.67.169.40 #serveur FDN
            forward-addr: 91.121.161.184 #serveur OVH
            forward-addr: 91.121.164.227 #serveur OVH

Vous l’aurez deviné, cette solution concerne l’appel à d’autres résolveurs DNS (ceux de la FDN et de OVH). Pour ce qui est de l’usage des serveurs racines, il faut commencer par télécharger le fichier contenant les informations sur ces serveurs :

wget ftp://ftp.internic.net/domain/named.cache -O /var/lib/unbound/root-server.hints
root-hints: /var/lib/unbound/root-server.hints

Cette ligne permet de faire appel aux serveurs racines spécifiés dans le fichier. Une fois les modifications appliquées sur le fichier de configuration, vous pouvez tester sa validité à l’aide de la commande suivante :

unbound-checkconf /etc/unbound/unbound.conf

Il également possible, par mesure de sécurité, de masquer les informations sur notre serveur (identité et version) à l’aide de ces deux lignes :

hide-identity: yes
hide-version: yes

Puis redémarrer le serveur :

sudo service unbound restart

Pour tester votre résolveur :

nslookup qwant.fr 10.42.0.98

Ce petit tutoriel n’est pas complet, pour consulter toutes les options disponibles je vous renvoi vers la documentation officiel d’Unbound. Les options harden-dnssec-stripped et auto-trust-anchor-file sont à considérer pour une utilisation de DNSSEC, et harden-glue pour la sécurité.

A propos de cet article

L’objectif de cet article n’est en aucun cas d’inciter qui que ce soit à consulter et utiliser des sites dont l’usage est considéré comme illégal (téléchargement, terrorisme, etc.).
Il s’agit uniquement de proposer une explication sur le fonctionnement du service DNS et de partager des alternatives légales aux solutions existantes.

Inspiration

Commentaires

Un avis sur "DNS : Choix, configuration et sécurité"

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *