DNS-Over-TLS, selfhosted !

Cette bidouille vise à monter un serveur DNS-Over-TLS pour un client Android par exemple, ou tout autre système compatible avec ce standard. Elle s’inspire très largement du wiki de DNSPrivacy.org dans lequel on trouve plein de choses sympa! Merci à eux!

L’infrastructure se base sur 2 machines virtuelles:

  • VM1: passerelle Internet OPNsense
    • HAProxy et Let’s Encrypt
    • IP: 192.168.0.254 dans notre exemple
  • VM2: DNS avec AdBlocking
    • Pi-Hole pour le blocage des pubs et autres télémétries indésirables sur l’ensemble du réseau local
    • IP: 192.168.0.250 dans notre exemple

VM1

Commençons par la VM1: c’est la passerelle Internet OPNsense qui permettra d’exposer le DoT à la DMZ et négociera la liaison TLS. Il est nécessaire que HAProxy et Let’s Encrypt soient configurés ensembles dans OPNsense (bidouille non détaillée ici). L’idée est de disposer d’un FQDN signé par Let’s Encrypt, ou d’un wildcard Let’S Encrypt dans mon cas, et que HAProxy soit au courant de l’emplacement des certificats et des clefs L.E.

HAProxy

Commençons par HAproxy. Il faut tout d’abord un nouveau « Real Server ». Dans Services > HAProxy > Settings > onglet Real Servers > +

Nommons le « backend_private_dns » et faisons le se mettre en relation avec notre futur vrai serveur DNS « 192.168.0.250 » (flouté) dont le service « pihole-FTL » écoutera sur le port 53:

Ensuite, il faudra un « pool » de backend(s), même s’il n’y a qu’un seul backend. Dans Services > HAProxy > Settings > onglet Virtual Services > Backend Pools > +

Nommons le pool « pool_private_dns » et demandons lui d’inclure notre serveur de backend en TCP (Layer 4):

HAProxy pool DoT

Une fois le backend et son pool opérationnels, passons à la dernière étape dans HAProxy: le frontend, que nous exposerons à la DMZ.

Ça se passe dans Services > HAProxy > Settings > onglet Virtual Services > Public Services > +

Nommons le frontend « front_853 », 853 étant le port DoT supporté par Android. Il est tout à fait possible de changer ce port par autre chose, l’essentiel est que ce soit raccord avec la partie Firewalling plus bas.
C’est dans le frontend aussi que va se jouer la partie Let’S Encrypt.

  • Listen Address: le FQDN signé par Let’s Encrypt, suivi du port DoT
  • Type: SSL/HTTPS (TCP mode)
  • Default Backend Pool: pool_private_dns
  • Enable SSL Offloading: oui
  • Bind options: force-tlsv12
  • Cipher list: ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
HAProxy frontend DoT

Ne pas oublier de cliquer sur le bouton Apply en fin de manip.

Firewall

Création de la règle exposant notre futur DNS à la DMZ: dans Firewall > Rules > WAN > +

Idem, ne pas oublier de cliquer sur le bouton Apply en fin de manip.

VM2

La VM2 se base sur une distribution Ubuntu Server 18.10 x64 minimal virtual et Pihole.

Pi-Hole

Pi-Hole, pour ceux qui ne le connaissent pas, est un système très efficace de blocage de publicités, trackers, télémétrie, et autres flux superflus ou indésirables qu’il faut avoir sur son réseau! Il se base sur dnsmasq, et dispose en option d’une belle interface Web permettant de se satisfaire du nombre parfois hallucinant de requêtes bloquées (et de trafic potentiellement gagné!!). Il s’alimente via des blacklists publiques disponibles en ligne.

Pi-Hole!

Pas grand chose à dire concernant l’installation. Que ce soit sur un Raspbian ou tout autre Nux, rien de mieux que de passer par leur site pour connaitre l’unique ligne de commande permettant de le déployer: https://pi-hole.net/ !

Une fois le Pi-Trou installé, voici les listes avec lequel je l’ai alimenté (les 2 271 768 domaines blacklistés!), via l’interface Web ou via:

/etc/pihole/adlists.list
http://hosts-file.net/ad_servers.txt
http://someonewhocares.org/hosts/hosts
http://sysctl.org/cameleon/hosts
http://v.firebog.net/hosts/HPHosts-ads.txt
http://v.firebog.net/hosts/HPHosts-emd.txt
http://v.firebog.net/hosts/HPHosts-exp.txt
http://v.firebog.net/hosts/HPHosts-psh.txt
http://winhelp2002.mvps.org/hosts.txt
http://www.joewein.net/dl/bl/dom-bl.txt
http://www.networksec.org/grabbho/block.txt
https://adaway.org/hosts.txt
https://adblock.mahakala.is/
https://bitbucket.org/ethanr/dns-blacklists/raw/8575c9f96e5b4a1308f2f12394abd86d0927a4a0/bad_lists/Mandiant_APT1_Report_Appendix_D.txt
https://easylist-downloads.adblockplus.org/easylist_noelemhide.txt
https://easylist.to/easylist/easylist.txt
https://easylist.to/easylist/easyprivacy.txt
https://easylist.to/easylist/fanboy-annoyance.txt
https://easylist.to/easylist/fanboy-social.txt
https://gist.githubusercontent.com/BBcan177/4a8bf37c131be4803cb2/raw/343ff780e15205b4dd0de37c86af34cfb26b2fbe/MS-2
https://gist.githubusercontent.com/BBcan177/b6df57cef74e28d90acf1eec93d62d3b/raw/f0996cf5248657ada2adb396f3636be8716b99eb/MS-4
https://gist.githubusercontent.com/anudeepND/adac7982307fec6ee23605e281a57f1a/raw/5b8582b906a9497624c3f3187a49ebc23a9cf2fb/Test.txt
https://github.com/StevenBlack/hosts/blob/master/extensions/fakenews/hosts
https://github.com/StevenBlack/hosts/blob/master/extensions/gambling/hosts
https://gitlab.com/quidsup/notrack-blocklists/raw/master/notrack-blocklist.txt
https://gitlab.com/quidsup/notrack-blocklists/raw/master/notrack-malware.txt
https://hosts-file.net/ad_servers.txt
https://hosts-file.net/emd.txt
https://hosts-file.net/exp.txt
https://hosts-file.net/fsa.txt
https://hosts-file.net/grm.txt
https://hosts-file.net/mmt.txt
https://hosts-file.net/pha.txt
https://hosts-file.net/psh.txt
https://hostsfile.mine.nu/hosts0.txt
https://hostsfile.org/Downloads/hosts.txt
https://isc.sans.edu/feeds/suspiciousdomains_Low.txt
https://isc.sans.edu/feeds/suspiciousdomains_Medium.txt
https://mirror.cedia.org.ec/malwaredomains/immortal_domains.txt
https://mirror1.malwaredomains.com/files/justdomains
https://openphish.com/feed.txt
https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=0&mimetype=plaintext
https://pgl.yoyo.org/as/serverlist.php?showintro=0&startdate%5Byear%5D=2000
https://ransomwaretracker.abuse.ch/downloads/CW_C2_DOMBL.txt
https://ransomwaretracker.abuse.ch/downloads/LY_C2_DOMBL.txt
https://ransomwaretracker.abuse.ch/downloads/RW_DOMBL.txt
https://ransomwaretracker.abuse.ch/downloads/TC_C2_DOMBL.txt
https://ransomwaretracker.abuse.ch/downloads/TL_C2_DOMBL.txt
https://raw.githubusercontent.com/CHEF-KOCH/Audio-fingerprint-pages/master/AudioFp.txt
https://raw.githubusercontent.com/CHEF-KOCH/CKs-FilterList/master/CK's-FilterList.txt
https://raw.githubusercontent.com/CHEF-KOCH/NSABlocklist/master/HOSTS
https://raw.githubusercontent.com/CHEF-KOCH/Spotify-Ad-free/master/Spotify.txt
https://raw.githubusercontent.com/CHEF-KOCH/Canvas-Font-Fingerprinting-pages/master/Canvas.txt
https://raw.githubusercontent.com/CHEF-KOCH/Canvas-fingerprinting-pages/master/Canvas.txt
https://raw.githubusercontent.com/CHEF-KOCH/WebRTC-tracking/master/WebRTC.txt
https://raw.githubusercontent.com/Dawsey21/Lists/master/main-blacklist.txt
https://raw.githubusercontent.com/EnergizedProtection/block/master/ultimate/formats/hosts.txt
https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-gambling-porn-social/hosts
https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/social/hosts
https://raw.githubusercontent.com/StevenBlack/hosts/master/data/KADhosts/hosts
https://raw.githubusercontent.com/StevenBlack/hosts/master/data/StevenBlack/hosts
https://raw.githubusercontent.com/StevenBlack/hosts/master/data/UncheckyAds/hosts
https://raw.githubusercontent.com/StevenBlack/hosts/master/data/add.2o7Net/hosts
https://raw.githubusercontent.com/StevenBlack/hosts/master/data/add.Risk/hosts
https://raw.githubusercontent.com/StevenBlack/hosts/master/data/add.Spam/hosts
https://raw.githubusercontent.com/StevenBlack/hosts/master/data/tyzbit/hosts
https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
https://gitlab.com/ZeroDot1/CoinBlockerLists/raw/master/hosts
https://raw.githubusercontent.com/anudeepND/blacklist/master/CoinMiner.txt
https://raw.githubusercontent.com/anudeepND/blacklist/master/adservers.txt
https://raw.githubusercontent.com/chadmayfield/pihole-blocklists/master/lists/pi_blocklist_porn_top1m.list
https://raw.githubusercontent.com/crazy-max/WindowsSpyBlocker/master/data/hosts/spy.txt
https://raw.githubusercontent.com/crazy-max/WindowsSpyBlocker/master/data/hosts/win10/spy.txt
https://raw.githubusercontent.com/jerryn70/GoodbyeAds/master/Hosts/GoodbyeAds.txt
https://raw.githubusercontent.com/mitchellkrogza/Badd-Boyz-Hosts/master/hosts
https://raw.githubusercontent.com/mitchellkrogza/The-Big-List-of-Hacked-Malware-Web-Sites/master/hacked-domains.list
https://raw.githubusercontent.com/piwik/referrer-spam-blacklist/master/spammers.txt
https://raw.githubusercontent.com/r-a-y/mobile-hosts/master/AdguardMobileAds.txt
https://raw.githubusercontent.com/r-a-y/mobile-hosts/master/AdguardMobileSpyware.txt
https://raw.githubusercontent.com/reek/anti-adblock-killer/master/anti-adblock-killer-filters.txt
https://raw.githubusercontent.com/vokins/yhosts/master/hosts
https://reddestdream.github.io/Projects/MinimalHosts/etc/MinimalHostsBlocker/minimalhosts
https://s3.amazonaws.com/lists.disconnect.me/simple_ad.txt
https://s3.amazonaws.com/lists.disconnect.me/simple_malvertising.txt
https://s3.amazonaws.com/lists.disconnect.me/simple_tracking.txt
https://smokingwheels.github.io/Pi-hole/allhosts
https://tspprs.com/dl/abuse
https://tspprs.com/dl/ads
https://tspprs.com/dl/cl1
https://tspprs.com/dl/crypto
https://tspprs.com/dl/gambling
https://tspprs.com/dl/malware
https://tspprs.com/dl/ransomware
https://tspprs.com/dl/spam
https://tspprs.com/dl/spotify
https://tspprs.com/dl/tracking
https://v.firebog.net/hosts/AdguardDNS.txt
https://v.firebog.net/hosts/Airelle-hrsk.txt
https://v.firebog.net/hosts/Airelle-trc.txt
https://v.firebog.net/hosts/BillStearns.txt
https://v.firebog.net/hosts/Easylist.txt
https://v.firebog.net/hosts/Easyprivacy.txt
https://v.firebog.net/hosts/Prigent-Ads.txt
https://v.firebog.net/hosts/Prigent-Malware.txt
https://v.firebog.net/hosts/Prigent-Phishing.txt
https://v.firebog.net/hosts/Shalla-mal.txt
https://v.firebog.net/hosts/static/SamsungSmart.txt
https://v.firebog.net/hosts/static/w3kbl.txt
https://www.dshield.org/feeds/suspiciousdomains_Low.txt
https://www.joewein.net/dl/bl/dom-bl-base.txt
https://www.malwaredomainlist.com/hostslist/hosts.txt
https://zerodot1.gitlab.io/CoinBlockerLists/list.txt
https://zerodot1.gitlab.io/CoinBlockerLists/list_browser.txt
https://zerodot1.gitlab.io/CoinBlockerLists/list_optional.txt
https://zeustracker.abuse.ch/blocklist.php?download=domainblocklist

Il n’y a pas vraiment de spot officiel sur lequel elles seraient toutes regroupées (elles changent d’URL de temps en temps, surtout celles hébergées sur Github), mais certains maintiennent quand même des listes à jour:
https://www.google.com/search?q=pi-hole+lists

Quelques options non-disponibles via l’interface Web:

/etc/pihole/pihole-FTL.conf
BLOCKINGMODE=NULL
RESOLVE_IPV4=yes
RESOLVE_IPV6=yes
AAAA_QUERY_ANALYSIS=yes
IGNORE_LOCALHOST=no
PRIVACYLEVEL=0

Ensuite, dans la section Settings > DNS > Upstream DNS Servers, c’est le DNS de la passerelle OPNsense (un bon vieux Unbound) qui sera en charge de résoudre en dernier toutes les requêtes, en interrogeant directement les ROOTS.HINTS. Ici, pas question de passer par des intermédiaires comme un FAI/ISP, Google ou tout autre DNS soit-disant OpenSource ou anonyme:

Pi-Hole /!\ LOCAL /!\ Upstream Server

Au passage, on se fait plaisir aussi sur la partie DNSSEC. Par les temps qui courent, c’est prudent.

Tout ça pour en arriver là 🙂

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.