14

DNSCrypt + DNSMasq sur ArchLinux/Manjaro : Chiffrez toutes les requêtes DNS

Pour augmenter encore d’un cran l’anonymat sur le réseau internet, un système de chiffrement de requètes DNS va être mis en place sur l’ordinateur. Ce qui permet aussi de contourner les règles de filtrages ou de blocages mis en place par certains FAI/Pays.

Ce système de chiffrement sera basé sur le couple DNSCrypt et DNSMasq.

DNSCrypt est un service d’OpenDNS, qui permet de chiffrer les requêtes DNS.
Cependant, pour que DNSCrypt fonctionne, il a besoin d’un serveur cache DNS. C’est donc DNSMasq, qui en aura la fonction.

Pour rappel, un serveur cache DNS n’a pas le même rôle qu’un serveur DNS. Effectivement, un serveur DNS va essayer de résoudre un nom de domaine par une adresse IP où le serveur cache DNS ne va juste mettre en cache mémoire les requètes. Chaque requète qui n’est pas présente en cache sera résolue par le ou les serveurs DNS. Ici OpenDNS.

Cet article décrit les étapes pour les distribution ArchLinux et Manjaro.
Pour les distributions Ubuntu et dérivées, voir cet autre article: OpenDNS DNSCrypt.

Installation de DNSCrypt et DNSMasq

sudo pacman -S dnsmasq dnscrypt-proxy

Configuration de DNSMasq

DNSMasq sera à l’écoute sur l’adresse 127.0.0.1, si la requète DNS n’est pas dans son cache alors il envoie la demande à DNSCrypt sur l’interface 127.0.0.2.

Faire une sauvegarde du fichier de configuration par défaut:

sudo mv /etc/dnsmasq.conf /etc/dnsmasq.old

Créer un nouveau fichier de configuration:

sudo nano /etc/dnsmasq.conf

Exemple d’un fichier fonctionnel:

# ne pa prendre en compte /etc/hosts.
no-hosts
# Do not go into the background at startup but otherwise run as
# normal.
keep-in-foreground

# Do not provide DHCP or TFTP on the loopback interface.
no-dhcp-interface=lo

# Only listen on the loopback interface.
listen-address=127.0.0.1

# Only bind to interfaces dnsmasq is listening on.
bind-interfaces

# Never forward addresses in the non-routed address spaces.
bogus-priv

# Don't read /etc/resolv.conf.
no-resolv

# Reject (and log) addresses from upstream nameservers which are in
# the private IP ranges. This blocks an attack where a browser behind
# a firewall is used to probe machines on the local network.
stop-dns-rebind

# Exempt 127.0.0.0/8 from rebinding checks. This address range is
# returned by realtime black hole servers, so blocking it may disable
# these services.
rebind-localhost-ok

# Never forward plain names (without a dot or domain part).
domain-needed

# Upstream server is dnscrypt-proxy on local machine.
server=127.0.0.2
# Set the cache size here. If you don't use spam blocking add-ons such
# Adblock Plus or Ghostery, you may want to increase this value as you
# will be resolving more domain names.
cache-size=1000

# Pass through DNSSEC validation results from dnscrypt-proxy.
proxy-dnssec

Configuration de Dnscrypt

Editer le fichier de configuration de Dnscrypt:

sudo nano /etc/conf.d/dnscrypt-proxy

Et modifier comme suit:

DNSCRYPT_LOCALIP=127.0.0.2 ##adresse IP de Dnscrypt
DNSCRYPT_LOCALPORT=53  ## le port d'écoute
DNSCRYPT_USER=nobody
DNSCRYPT_PROVIDER_NAME=2.dnscrypt-cert.opendns.com ## le serveur d'OpenDNS certifié
DNSCRYPT_PROVIDER_KEY=B735:1140:206F:225D:3E2B:D822:D7FD:691E:A1C3:3CC8:D666:8D0C:BE04:BFAB:CA43:FB79 ## la clé de véréficiation
DNSCRYPT_RESOLVERIP=208.67.220.220  ## l'adresse Ip du serveur OpenDNS
DNSCRYPT_RESOLVERPORT=443 ## son port d'écoute 443, qui est un port SSL

Activation et démarrage des services dnscrypt-proxy et dnsmasq

Activer les services dnscrypt-proxy et dnsmasq au démarrage du système:

sudo systemctl enable dnscrypt-proxy.service
sudo systemctl enable dnsmasq.service

Démarrer les services:

sudo systemctl start dnscrypt-proxy.service
sudo systemctl start dnsmasq.service

Vérification du bon fonctionnement

Vérification du port d’écoute(53) sur les interfaces locales:

sudo netstat -alputen | grep 53
tcp        0      0 127.0.0.2:53            0.0.0.0:*               LISTEN      0          37985      2773/dnscrypt-proxy
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      0          36846      2768/dnsmasq
udp        0      0 127.0.0.2:53            0.0.0.0:*                           0          37983      2773/dnscrypt-proxy
udp        0      0 127.0.0.1:53            0.0.0.0:*                           0          36845      2768/dnsmasq

Si Network-Manager est utilisé pour la gestion du réseau, il faut aller ajouter l’IP 127.0.0.1 comme serveur DNS supplémentaire:

network-manager

Test avec la commande dig:

dig google.fr

; <<>> DiG 9.9.2-P2 <<>> google.fr
;; global options: +cmd
;; Got answer:
;; ->>HEADER<;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;google.fr.			IN	A

;; ANSWER SECTION:
google.fr.		300	IN	A	173.194.45.87
google.fr.		300	IN	A	173.194.45.95
google.fr.		300	IN	A	173.194.45.88

;; Query time: 1877 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Mar 24 15:14:46 2014
;; MSG SIZE  rcvd: 86

Si dig n’est pas présent, il faut installer le paquet: dnsutils

sudo pacman -S dnsutils

via blog.jam.net.ve

Partager l'article :





fred

"Dire que l'on s'en fiche du droit à la vie privée sous prétexte qu'on a rien à cacher, c'est comme déclarer que l'on se fiche du droit à la liberté d'expression sous prétexte qu'on a rien à dire." Edward Snowden

14 commentaires

  1. Pour moi la commande sudo netstat -alputen | grep 53
    me retourne cela
    tcp 0 0 0.0.0.0:53 0.0.0.0:* LISTEN 0 338457 25845/dnsmasq
    tcp6 0 0 :::53 :::* LISTEN 0 338459 25845/dnsmasq
    udp 0 0 0.0.0.0:53 0.0.0.0:* 0 338456 25845/dnsmasq
    udp6 0 0 :::53 :::* 0 338458 25845/dnsmasq

  2. Si tu n’utilise pas l’IPv6 tu peux déjà le désactiver.
    le service dnscrypt-proxy est-il démarré?
    [code lang= »shell »]ps -e | grep dnscrypt[/code]

  3. slt, une question j’ai bind d’installé, faut il le désinstaller pour profiter de dnsmasq et dnscrypt ?

  4. Salut zoulou!

    tu peux garder Bind mais il faut le configurer en sorte qu’il fonctionne avec dnscrypt…

  5. Merci de ta réponse je vais me pencher dessus des que j’ai un peux de temps ;)

  6. Concernant dig maintenant j’ai
    ; <> DiG 9.9.2-P2 <> google.fr
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28194
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 1280
    ;; QUESTION SECTION:
    ;google.fr. IN A

    ;; ANSWER SECTION:
    google.fr. 85 IN A 173.194.40.127
    google.fr. 85 IN A 173.194.40.120
    google.fr. 85 IN A 173.194.40.119

    ;; Query time: 37 msec
    ;; SERVER: 192.168.1.254#53(192.168.1.254)
    ;; WHEN: Wed Mar 26 19:07:39 2014
    ;; MSG SIZE rcvd: 86

  7. Tu as un serveur DNS sur ton réseau local ?

    [code lang= »shell »]
    SERVER: 192.168.1.254#53(192.168.1.254)
    [/code]

  8. Salut Sledge,
    merci pour ton complément d’informations, mais après quelques recherches, voici ce qu’il est possible de trouver:
    « DNSCrypt. The main objectives of DNSCrypt is full encryption of the communication channel between the client (you) and server (OpenDNS) »
    http://wiki.openwrt.org/inbox/dnscrypt
    et
    http://korben.info/chiffrer-dns.html

    Quoiqu’il en soit, je pensais que c’était un projet initialement réaliser par OpenDNS.

Laisser un commentaire

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