DNSCrypt ist ein Tool, das einen Sicherheitsgewinn durch Verhinderung von Man-In-The-Middle-Angriffen bei DNS-Abfragen verspricht. Dieser Artikel, wenn auch schon älter, umreißt das Thema ganz gut.
Installation
DNSCrypt lässt sich unter Debian folgendermaßen installieren und aktivieren:
# apt install dnscrypt-proxy
# systemctl enable dnscrypt-proxy.service
Konfiguration
Nun kann man sich einen der, in der Datei
/usr/share/dnscrypt-proxy/dnscrypt-resolvers.csv
gelisteten, Server
aussuchen und in die Datei /etc/dnscrypt-proxy/dnscrypt-proxy.conf
eintragen, z.B.:
ResolverName ns0.dnscrypt
Man kann auch random
eintragen, dann wird ein zufälliger Resolver
aus der Liste gewählt, der über IPv4 verfügbar ist, DNSSEC unterstützt
und nicht loggt:
ResolverName random
Damit auch der installierte Proxy zur Auflösung von DNS-Anfragen genutzt
wird muss die Datei /etc/resolv.conf
editiert werden:
# Use dnscrypt-proxy
nameserver 127.0.2.1
DNSCrypt starten
Nun kann kann der DNSCrypt-Proxy gestartet werden:
# systemctl start dnscrypt-proxy.service
Troubleshooting
Da der NetworkManager diese Datei bei Nutzung von DHCP
überschreibt muss, wie im Arch-Wiki beschrieben, in der Datei
/etc/NetworkManager/NetworkManager.conf
die Zeile dns=none
im Bereich [main]
eingetragen werden.
Bei mir war die Datei /etc/resolv.conf
ein Link auf
/var/run/NetworkManager/resolv.conf
und ich musste den Link
entfernen damit DNSCrypt funktionierte:
# ll /etc/resolv.conf
lrwxrwxrwx 1 root root 35 Jul 7 02:04 /etc/resolv.conf -> /var/run/NetworkManager/resolv.conf
# rm /etc/resolv.conf
Danach habe ich die Datei neu angelegt, den oben beschriebenen Eintrag eingefügt und die Datei für alle Nutzer lesbar gemacht:
# nano /etc/resolv.conf
# chmod 644 /etc/resolv.conf
# ll /etc/resolv.conf
-rw-r--r-- 1 root root 42 Jul 7 15:07 /etc/resolv.conf
Nach einem Neustart des NetworkManagers funktioniert auch die Namensauflösung mit selbigem.
Im verlinkten Beitrag aus dem Arch-Wiki ist auch erklärt, wie man
dhcpcd und netctl davon abhält die Datei resolv.conf
zu
überschreiben.
Erfolg testen
Man kann lokal testen ob die Anfragen auch vom DNSCrypt-Proxy beantwortet werden:
$ dig debian.org txt
; <<>> DiG 9.10.3-P4-Debian <<>> debian.org txt
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44884
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;debian.org. IN TXT
;; AUTHORITY SECTION:
debian.org. 600 IN SOA denis.debian.org. hostmaster.debian.org. 2017070811 1800 600 1814400 600
;; Query time: 192 msec
;; SERVER: 127.0.2.1#53(127.0.2.1)
;; WHEN: Sat Jul 08 09:32:22 CEST 2017
;; MSG SIZE rcvd: 92
Die Zeile ;; SERVER: 127.0.2.1#53(127.0.2.1)
zeigt, dass Anfragen durch
DNSCrypt beantwortet werden.
Es gibt auch einen DNS Leak Test online.
[Update 2017-07-07]
Aufgrund dieses Kommentares habe ich den Server im Beispiel durch einen Server aus Island ersetzt, der DNSSEC unterstützt, nicht loggt und nicht zensiert:
ns0.dnscrypt.is,"ns0.dnscrypt.is in Reykjavík, Iceland","DNSSEC enabled, non-logging, uncensored. Sponsored by 1984 Hosting.","Reykjavík, Iceland",,https://dnscrypt.is,1,yes,yes,no,93.95.228.87,2.dnscrypt-cert.ns0.dnscrypt.is,EE41:6A83:451C:218F:37B2:B736:78C4:999F:7DE6:89D1:31D2:7866:7C8E:A8BB:1C95:B402,pubkey.ns0.dnscrypt.is
Ich habe auch die Konfiguration von DNSCrypt mit dem NetworkManager erweitern müssen.
[Update 2017-07-08]
Abschnitt “Erfolg testen” hinzugefügt.
[Update 2017-11-18]
Hinweis auf random
und die Scripte dnscrypt-update-resolvers.sh
und resolvers-check.sh
vorgestellt.
[Update 2017-12-16]
Die URL der Scripte auf Github hat sich geändert und wurde angepasst.
[Update 2018-02-03]
Wie in diesem Kommentar richtig angemerkt gibt es die Scripte auf Github nicht mehr. Ich habe die Abschnitte dementsprechend entfernt.