add more details on doh/dot

This commit is contained in:
Yann Verry 2022-04-24 22:59:21 +02:00
parent 4a56ff3bab
commit 0972077fe0
Signed by: yann
GPG key ID: EB9E679A66B8C7A1

View file

@ -4,7 +4,7 @@ categories = ["dns"]
date = 2021-04-14T13:47:47Z date = 2021-04-14T13:47:47Z
description = "" description = ""
draft = false draft = false
image = "doh-dot/doh-dot-1.jpg" image = "doh-dot-1.jpg"
slug = "resolvons-de-maniere-securise" slug = "resolvons-de-maniere-securise"
tags = ["dns"] tags = ["dns"]
title = "Resolvons de manière sécurisé" title = "Resolvons de manière sécurisé"
@ -14,7 +14,7 @@ title = "Resolvons de manière sécurisé"
Le DNS, brique de base pour Internet évolue à son rythme. Depuis plusieurs années l'ensemble de la toile s'est sécurisé en activant du TLS un peu partout. Le DNS, brique de base pour Internet évolue à son rythme. Depuis plusieurs années l'ensemble de la toile s'est sécurisé en activant du TLS un peu partout.
Et donc le DNS à suivi. Deux nouvelle façon ont émérgé: Et donc le DNS à suivi, une première tentative avec _DNSCrypt_ mais ça n'a pas été un succès. Deux nouvelles façon ont émérgé après ce premier échec :
* DNS over TLS * DNS over TLS
* DNS over HTTPs * DNS over HTTPs
@ -23,14 +23,15 @@ Cela restais compliqué à mettre en œuvre, peu de client compatible, mais ça
## DNS Dist ## DNS Dist
DNSDist est proposé par powerdns. Ce logiciel est dans la ligné de tout ce que produit powerdns: excellent. Si je fais l'analogie c'est un reverse proxy du DNS. DNSDist est proposé par [PowerDNS](https://www.powerdns.com/). Ce logiciel est dans la ligné de tout ce que produit powerdns: excellent.
Si je fais l'analogie c'est un reverse proxy du DNS.
Pour commencer je me suis donc créé un container à base d'alpine puis installé dnsdist. Pour commencer je me suis donc créé un container à base d'alpine puis installé dnsdist.
On commence donc par lui fournir un backend, ici mon dns resolveur menteur chez moi: On commence donc par lui fournir un backend, ici mon dns resolveur menteur chez moi:
``` ```
newServer({address="2a01:e0a:49e:2b83::2", qps=10}) newServer({address="2a01:e0a:49e:2b83::2", name="home", qps=10, checkInterval="30"})
``` ```
Je souhaite que ce résolveur soit ouvert à tous pour DoT et DoH, pour cela ajoutons une ACL "open bar" : Je souhaite que ce résolveur soit ouvert à tous pour DoT et DoH, pour cela ajoutons une ACL "open bar" :
@ -48,18 +49,17 @@ addAction(MaxQPSIPRule(50), DropAction())
``` ```
Je le réserve à mon usage personnel et fonction des graphs d'utilisation je verrais pour modifier cela avec une charte et tout ce qui va avec. Je laisse ouvert cette URL, mais sans garantie sur son fonctionnement bien que je l'utilise au quotidien. On va voir pour mettre une charte et tout ce qui va avec un peu plus tard.
### Monitoring & Graphing ### Monitoring & Graphing
Avant de faire DoT & DoH je n'imagine pas utiliser un service sans un minimum d'observabilité avec prometheus. Ici pas besoin d'exporter spécifique c'est natif au serveur web Avant de faire DoT & DoH je n'imagine pas utiliser un service sans un minimum d'observabilité avec prometheus. Ici pas besoin d'exporter spécifique c'est natif au serveur web qu'il faut donc activer.
``` ```
webserver("[::]:8083", "webinterfacepassword", "apipassword", {}, "prometheusIP") webserver("[::]:8083", "webinterfacepassword", "apipassword", {}, "prometheusIP")
``` ```
J'ai donc un serveur web qui tourne et répond dans `/metrics` il fait plein d'autre chose mais j'aurais la même dans grafana. J'ai donc un serveur web qui tourne et répond à `/metrics` il fait plein d'autre chose mais j'aurais la même dans grafana.
La configuration prometheus est aussi simple: La configuration prometheus est aussi simple:
@ -77,22 +77,20 @@ Et me voila avec des metrics \o/
## DNS over TLS (DoT) ## DNS over TLS (DoT)
Pas de roue réinventé ce qui n'est pas plus mal, ce n'est "que" du TLS ajouté au protocole DNS. Cela impose TCP uniquement, exit donc UDP (peut-être avec h3?) Pas de roue réinventé ce qui n'est pas plus mal, ce n'est "que" du TLS ajouté au protocole DNS. Cela impose TCP uniquement, exit donc UDP.
Sa mise en place côté dnsdist est simple en v4 et v6, forçons un minimum de TLSv1.2: Sa mise en place côté dnsdist est simple en v4 et v6, forçons un minimum de TLSv1.2:
``` ```
addTLSLocal('::','/ssl/certs/verry.org/fullchain.pem','/ssl/certs/verry.org/privkey.pem', {minTLSVersion: "tls1.2"}) addTLSLocal('::','/ssl/certs/verry.org/fullchain.pem','/ssl/certs/verry.org/privkey.pem', {minTLSVersion: "tls1.2"})
addTLSLocal('0.0.0.0','/ssl/certs/verry.org/fullchain.pem','/ssl/certs/verry.org/privkey.pem', {minTLSVersion: "tls1.2"}) addTLSLocal('0.0.0.0','/ssl/certs/verry.org/fullchain.pem','/ssl/certs/verry.org/privkey.pem', {minTLSVersion: "tls1.2"})
``` ```
dnsdist va donc se mettre à faire du DoT sur le port par défaut à savoir 853/TCP: dnsdist va donc se mettre à faire du DoT sur le port par défaut à savoir `853/TCP` :
``` ```
Listening on [::]:853 for TLS Listening on [::]:853 for TLS
Listening on 0.0.0.0:853 for TLS Listening on 0.0.0.0:853 for TLS
``` ```
Il est compatible nativement sur mon téléphone Android et ça c'est vraiment top, ici sur un samsung par exemple Il est compatible nativement sur mon téléphone Android et ça c'est vraiment top, ici sur un samsung par exemple
@ -129,10 +127,9 @@ Et ... c'est tout côté serveur. Pour le client firefox le prend en charge, dan
![Firefox DOH](firefox_doh.png) ![Firefox DOH](firefox_doh.png)
## Conclusion ## Conclusion
Il est devenu facile avec dnsdist de se créer son propre serveur DoT et DoH, la compatibilité avec mon téléphone android (coucou l'anti pub) est ce qui m'a motivé à le mettre en place. Le besoin d'utilisation de mon vpn wireguard est vraiment remis en question car l'utilité première était la confidentialité, dans un hôtel (ahahah), en vadrouille (re hahahaha) deviens quasi nul. Il est devenu facile avec dnsdist de se créer son propre serveur DoT et DoH, la compatibilité avec mon téléphone android (coucou l'anti pub) est ce qui m'a motivé à le mettre en place. Le besoin d'utilisation de mon vpn wireguard est vraiment remis en question car l'utilité première était la confidentialité, dans un hôtel (ahahah), en vadrouille (re hahahaha) deviens quasi nul.
Si jamais il est disponible via [https://doh.verry.org](https://doh.verry.org)