[tuto] Installer DNScrypt sur son réseau local - Carmagnole

Carmagnole

Soyez résolus de ne servir plus et vous voilà libres

[tuto] Installer DNScrypt sur son réseau local

Rédigé par propositionjoe 4 commentaires
 
 

Prérequis: Un poste avec debian d'installé.

 
 
 

Edit du 17 mars 2018: le proxy utilisé dans ce tuto a été abandonné, il existe désormais une version en go à cette page. Pour ma part je n'utilise plus dnscrypt que j'ai trouvé de moins en moins fiable, sur fond de rumeur d'abandon du projet. À la place je vous recommande plutôt Unbound.

Ce papier fait suite au précédent Chiffrer ses requêtes DNS avec DNScrypt et le complète en donnant une recette afin d'installer DNScrypt. Contrairement à ce que je déclarai dans ce papier, je suis revenu à une installation à la main, plutôt que de recourir à un script. Ce qu'on gagne en solution clé en main, on le perd en apprentissage et en maîtrise... Et je n'aime pas trop ça. Avec ce tuto, en quelques étapes, vous devriez pouvoir utiliser chez vous un résolveur DNS chiffré:

- Que ce soit: pour un usage sur le poste où le soft est installé;
- Ou bien plus intéressant: pour un usage à destination de tous les dispositifs connectés au réseau local; il faudra dans ce cas installer un serveur DNS local en plus. J'utilise pour ma part dnsmasq, mais vous être libre d'en prendre un autre (le wiki d'arch, vachement bien fichu - comme d'habitude - sera votre ami dans ce cas).

Alors comment on fait? C'est ce que nous allons voir.

 

Installation de DNScrypt et dépendance

Sur ubuntu il existe un PPA, mais si comme moi vous préférez debian, il faudra procéder à une installation plus manuelle. Il sera d'abord nécessaire de récupérer deux dépendances non disponibles sur Jessie à cette date, puis de dl le soft lui-même. Rassurez-vous, ce ne sont que des .deb. Je vous donne le lien pour les .deb à jour "ce jour", et en dessous le lien vers le repo. Ainsi il vous sera possible de vérifier s'il n'existe pas une version "plus à jour" que celle proposée au moment de la rédaction de ce billet.

~$ wget http://cdn-fastly.deb.debian.org/debian/pool/main/libt/libtool/libltdl7_2.4.6-2_amd64.deb

#http://http.debian.net/debian/pool/main/libt/libtool/

~$ wget http://cdn-fastly.deb.debian.org/debian/pool/main/libs/libsodium/libsodium18_1.0.11-1_amd64.deb

#http://http.debian.net/debian/pool/main/libs/libsodium/

~$ wget http://cdn-fastly.deb.debian.org/debian/pool/main/d/dnscrypt-proxy/dnscrypt-proxy_1.9.4-1_amd64.deb

#http://http.debian.net/debian/pool/main/d/dnscrypt-proxy/ 

Les .deb récupérés, un triple dpkg -i suffira à installer DNScrypt:

~$ dpkg -i libltdl7_2.4.6-2_amd64.deb
~$ dpkg -i libsodium18_1.0.11-1_amd64.deb
~$ dpkg -i dnscrypt-proxy_1.9.4-1_amd64.deb

 

Configuration de DNScrypt

On commence par règler le port d'écoute du soft afin qu'il n'empiète pas sur dnsmasq (on l'installera juste après celui-là). Si vous souhaitez n'utiliser DNScrypt que pour un seul pc, cette étape n'est pas nécessaire; il faudra donc garder le port d'écoute par défault des DNS qui est le 53.

~$ nano /lib/systemd/system/dnscrypt-proxy.socket

[Socket]
ListenStream=
ListenDatagram=
ListenStream=127.0.0.1:5353
ListenDatagram=127.0.0.1:5353

#127.0.0.1:5353 correspond à l'ip locale de votre machine, sur le port 5353.

On va ensuite choisir les DNS chiffrés qu'on souhaite utiliser ici. Comme je l'ai expliqué précédemment ma préférence va au choix de prendre un serveur de type random, qui fera ses requêtes dans différent serveur DNScrypt; ce qui vous garantira - puisque ce ne sera pas le même serveur qui recevra toutes vos requêtes - une meilleur confidentialité.

~$ nano /etc/dnscrypt-proxy/dnscrypt-proxy.conf

#et pas /etc/dnscrypt-proxy.conf comme écrit à pas mal d'endroit sur internet, et qui m'a fait perdre un temps certain!

ResolverName d0wn-random-ns2
ResolverName d0wn-random-ns2-ipv6
LocalAddress 127.0.0.1:5353

On active DNScrypt dans systemctl:

~$ systemctl enable dnscrypt-proxy.service
~$ systemctl enable dnscrypt-proxy.socket

Et on lance le service:

~$ systemctl start dnscrypt-proxy.service
~$ systemctl start dnscrypt-proxy.socket

Pour avoir des infos, il suffit de mettre status:

~$ systemctl status dnscrypt-proxy.service
~$ systemctl status dnscrypt-proxy.socket

 

Pour un usage uniquement sur l'hôte de l'installation de DNScrypt, il suffira de modifier dans vos paramètres résaux l'adresse du DNS, c'est à dire de renseigner l'ip 127.0.0.1

Pour les autres, il faut à présent passer à l'installation et à la configuration de dnsmasq qui va déservir en DNS votre réseau local en faisant le pont avec votre DNScrypt; mais aussi stocker les requêtes précédentes localement (ce qui est relativement sympa).

 

Installation et configuration de dnsmasq

Pour éviter que dnsmasq ne touche à resolv.conf, c'est à dire qu'il ne joue - c'est ce qu'on cherche - que le rôle de relais de DNScrypt, il faut:

~$ nano /etc/resolv.conf

nameserver 127.0.0.1

Puis interdire la modification de ce fichier avec:

~$ chattr +i /etc/resolv.conf  

#si besoin chattr -i pour reprendre le droit de modification

Ensuite vient le moment d'installer le soft, et d'y mettre ces paramètres:

~$ apt install dnsmasq
~$ nano /etc/dnsmasq.conf

port=53                                                
domain-needed
bogus-priv
dnssec                          
proxy-dnssec                
no-resolv
server=127.0.0.1#5353      
interface=eth0                   
listen-address=192.168.XXX.XXX 
expand-hosts
cache-size=6000 

#port=53: port d'écoute de dnsmasq
#dnssec: pour une validation dnssec, optionnelle
#proxy-dnssec: pour une validation dnssec, optionnelle
#server=127.0.0.1#5353: ip et port de votre DNScrypt
#interface=eth0: l'interface réseau de votre pc
#listen-address=192.168.XXX.XXX: l'ip du serveur où vous avez installé DNScrypt: c'est l'adresse locale que vos autres machines vont joindre pour faire leur requête DNS
#Cache-size=6000: cela va stocker 6000 requêtes en cache local, c'est sans doute beaucoup, mais quand on aime on ne compte pas.

On active dnsmasq et on relance tout!

~$ systemctl enable dnsmasq.service
~$ systemctl restart dnscrypt-proxy.socket
~$ systemctl restart dnscrypt-proxy.service
~$ systemctl restart dnsmasq.service

Il ne vous reste plus qu'à indiquer l'ip 192.168.XXX.XXX dans l'interface web de votre box, ou dans les paramètres réseaux de vos/votre pc.

 

Ensuite il vous faudra redémarer pour permettre la mise à jour du service DNS de votre machine, puis tester si tout fonctionne à l'aide de ces deux sites:

- dnsleaktest pour vérifier que vous utilisez bien des serveurs dnscrypt, plutôt que ceux de votre opérateur.

- dnssec pour vérifier si vos requêtes sont bien signées gpg.

 

Bonus 1: ajouter de l'entropie pour garantir un niveau de chiffrement suffisant

Pour ceux installant ce service sur une machine virtuelle, il est très possible que rapidement vous ne disposiez plus d'une réserve d'entropie suffisante pour vous permettre de garantir un chiffrement efficace. Une solution simple est d'installer haveged.

#edit 24 mars 2017: Suite à la sagacité d'un lecteur j'édite afin de mettre en garde avant de faire le choix d'utiliser Haveged cf:

https://security.stackexchange.com/questions/34523/is-it-appropriate-to-use-haveged-as-a-source-of-entropy-on-virtual-machines

#edit 10 avril 2017: Pour aller plus loin sur l'entropie et son utilité:

http://www.deltasight.fr/entropie-linux-generation-nombres-aleatoires/#comment-1502

 

~$ apt-get install haveged
~$ nano /etc/default/haveged

DAEMON_ARGS="-w 4096"

~$ service haveged start
~$ update-rc.d haveged defaults

 

Bonus 2: pour forcer ubuntu 16.04 à utiliser le DNS qu'on lui dit

~$ sudo nano /etc/network/interfaces

dns-nameservers 192.168.XXX.XXX

 

Sources:

https://wiki.archlinux.org/index.php/DNSCrypt
https://blog.milne.it/2017/02/05/dnscrypt-proxy-alternative-install-method-for-debian-raspbian-jessie/
http://www.drazzib.com/docs/admin/dnsmasq.html
https://www.skyminds.net/serveur-dedie-produire-une-meilleure-reserve-dentropie-avec-haveged/

 

 

4 commentaires

#1  - Nadley a dit :

Bonjour,

L'article est intéressant je découvre des outils inconnus. Merci.

Par contre l'édition de l'unit systemd directement dans /lib/systemd...pour changer le port d'écoute, c'est moyen en particulier en cas de mise à jour surtout qu'il existe un moyen de faire propre https://fedoraproject.org/wiki/Systemd#How_do_I_customize_a_unit_file.2F_add_a_custom_unit_file.3F

#2  - propositionjoe a dit :

Merci à mon tour pour le lien; je me pencherai dessus.

#3  - Frank Denis a dit :

dnsmasq (ou un autre cache) n'est pas necessaire pour que le proxy dnscrypt puisse etre accessible depuis d'autres machines. Il suffit d'ecouter sur 0.0.0.0:53 (ou bien l'une des IPs du host, autre que 127.*). dnscrypt-proxy peut aussi cacher les donnees : https://github.com/jedisct1/dnscrypt-proxy/wiki/Go-faster

Je ne conseillerais pas l'utilisation de Haveged, surtout sur une machine virtuelle.

#4  - propositionjoe a dit :

Merci pour ton commentaire, toute critique est bonne pour avancer.
Pour ma part sans dnsmasq - donc avec uniquement le proxy dnscrypt - mes machines basculaient toutes sur le dns de mon opérateur... Chacun fera donc son expérience.
Pour haveged, effectivement un post semble montrer que ce n'est pas forcément une bonne idée: https://security.stackexchange.com/questions/34523/is-it-appropriate-to-use-haveged-as-a-source-of-entropy-on-virtual-machines

Les commentaires sont fermés.

Fil RSS des commentaires de cet article