Ce tutoriel vous montrera comment protéger votre confidentialité DNS sur le bureau Ubuntu 20.04/18.04 avec DNS sur TLS . Nous allons utiliser un outil appelé stubby pour y parvenir. Mais d'abord, laissez-moi vous expliquer pourquoi le DNS n'est pas sécurisé.
Vulnérabilité DNS
Le DNS n'est pas sécurisé car, par défaut, les requêtes DNS ne sont pas chiffrées, ce qui peut être exploité par des entités intermédiaires. Le poison du cache DNS est l'un des abus du DNS largement utilisé par le Grand pare-feu de Chine (GFW) pour censurer l'Internet chinois. GFW vérifie chaque requête DNS envoyée à un serveur DNS en dehors de la Chine. Étant donné que le protocole DNS en texte brut est basé sur UDP, qui est un protocole sans connexion, GFW peut usurper à la fois l'IP du client et l'IP du serveur. Lorsque GFW trouve un nom de domaine sur sa liste de blocage, il modifie la réponse DNS. Par exemple, si un internaute chinois souhaite visiter google.com, le Grand pare-feu de Chine renvoie au résolveur DNS une adresse IP située en Chine au lieu de la véritable adresse IP de Google. Ensuite, le résolveur DNS renvoie la fausse adresse IP à l'ordinateur de l'utilisateur.
Qu'est-ce que DNS sur TLS ? Comment protège-t-il votre vie privée ?
DNS sur TLS signifie que les requêtes DNS sont envoyées via une connexion sécurisée cryptée avec TLS, la même technologie qui crypte le trafic HTTP, afin qu'aucun tiers ne puisse voir vos requêtes DNS. Avec HTTPS et SNI crypté (indication du nom du serveur), votre historique de navigation est entièrement protégé contre l'espionnage des FAI.
Stubby est un résolveur de stub DNS open source développé par l'équipe getdns. Il utilise la bibliothèque getdns. Un résolveur de stub est un petit client DNS sur l'ordinateur de l'utilisateur final qui reçoit les requêtes DNS d'applications telles que Firefox et transmet les requêtes à un résolveur récursif comme 1.1.1.1 ou 8.8.8.8. Stubby est spécial en ce sens qu'il prend en charge DNS sur TLS. Par défaut, il n'enverra que des requêtes DNS cryptées. Il existe un autre résolveur de stub open-source appelé cloudflared
qui prend en charge DNS sur HTTPS mais stubby est déjà dans le référentiel Ubuntu 20.04/18.04 et est très facile à utiliser.
Comment installer et utiliser Stubby sur le bureau Ubuntu 20.04/18.04
Stubby est dans le référentiel Ubuntu 20.04/18.04. Ouvrez une fenêtre de terminal et exécutez la commande suivante pour l'installer.
sudo apt install stubby
Cela installera stubby et le getdns
bibliothèque. Une fois installé, stubby s'exécute en arrière-plan. Vous vérifiez son statut avec :
systemctl status stubby
Stubby écoute sur les ports TCP et UDP 53 de localhost (127.0.0.1), comme on peut le voir en exécutant cette commande :
sudo netstat -lnptu | grep stubby
Le résolveur de stub par défaut fourni par systemd-resolved
écoute sur le port TCP et UDP 53 de 127.0.0.53.
sudo netstat -lnptu | grep systemd-resolv
Remarque :Si dnsmasq écoute sur le port TCP 53 de 127.0.0.1, Stubby n'écoutera que sur le port UDP 53 de 127.0.0.1.
Le fichier de configuration principal est /etc/stubby/stubby.yml
. Normalement, il n'est pas nécessaire d'y apporter des modifications, sauf si vous souhaitez en utiliser un autre ou votre propre résolveur récursif. Laissez-moi vous expliquer quelques configurations par défaut. Vous pouvez ouvrir le fichier avec :
sudo nano /etc/stubby/stubby.yml
La ligne suivante fait fonctionner stubby comme un résolveur de stub au lieu d'un résolveur récursif complet, c'est pourquoi il est nommé stubby.
resolution_type: GETDNS_RESOLUTION_STUB
La configuration suivante permet à stubby d'envoyer des requêtes DNS chiffrées avec TLS. Il n'enverra pas de requêtes en texte brut.
dns_transport_list: - GETDNS_TRANSPORT_TLS
La ligne suivante nécessite un certificat TLS valide sur le résolveur récursif distant.
tls_authentication: GETDNS_AUTHENTICATION_REQUIRED
Les lignes suivantes définissent les adresses d'écoute pour le démon stubby. Par défaut, IPv4 et IPv6 sont tous deux activés.
listen_addresses: - 127.0.0.1 - 0::1
La ligne suivante crée des résolveurs récursifs de requêtes tronquées de manière circulaire. Si défini sur 0
, Stubby utilisera chaque serveur en amont de manière séquentielle jusqu'à ce qu'il devienne indisponible, puis passera à l'utilisation du suivant.
round_robin_upstreams: 1
Par défaut, 3 résolveurs récursifs sont activés dans le fichier de configuration stubby. Ils sont gérés par des développeurs tronqués et prennent en charge DNS sur TLS. Vous pouvez consulter la liste complète des serveurs recommandés sur le site Web DNS Privacy.
dnsovertls.sinodun.com 145.100.185.15 dnsovertls1.sinodun.com 145.100.185.16 getdnsapi.net 185.49.141.37
Il existe d'autres serveurs DNS dans les Additional Servers
section qui sont désactivées par défaut.
dns.quad9.net unicast.censurfridns.dk dnsovertls3.sinodun.com (supporting TLS1.2 and TLS 1.3) dnsovertls2.sinodun.com dns.cmrg.net dns.larsdebruin.net ......
Il existe également des serveurs DNS qui écoutent sur le port 443. Si le port 853 est bloqué sur votre réseau, vous pouvez les décommenter pour utiliser ces serveurs.
dnsovertls.sinodun.com dnsovertls1.sinodun.com dns.cmrg.net dns.neutopia.org
Vous pouvez maintenant quitter l'éditeur de texte nano en appuyant sur Ctrl+X
.
Passer à Stubby
Modification du /etc/resolve.conf
fichier pour changer de serveur de noms n'est plus recommandé. Suivez les instructions ci-dessous pour rendre systemd-resolved
envoyer des requêtes DNS à stubby.
Bureau GNOME
Cliquez sur l'icône Network Manager dans le coin supérieur droit de votre bureau. Sélectionnez ensuite les paramètres filaires. (Si vous utilisez le Wi-Fi, sélectionnez Paramètres Wi-Fi.)
Cliquez sur le bouton d'engrenage.
Sélectionnez IPv4
puis dans les paramètres DNS, basculez sur Automatic
sur OFF, ce qui empêchera votre système Ubuntu d'obtenir l'adresse du serveur DNS de votre routeur. Saisissez 127.0.0.1
dans le champ DNS. Cliquez sur Apply
bouton pour enregistrer vos modifications.
Redémarrez ensuite NetworkManager pour que les modifications prennent effet.
sudo systemctl restart NetworkManager
Une fois que vous êtes reconnecté, vous pouvez voir que votre système Ubuntu utilise maintenant 127.0.0.1 comme serveur DNS dans les Details
onglet.
Bureau Unity
Lecture recommandée :comment installer l'environnement de bureau Unity sur Ubuntu 20.04/18.04.
Cliquez sur l'icône Network Manager dans le coin supérieur droit de votre bureau, puis cliquez sur edit connections
.
Sélectionnez votre nom de connexion et cliquez sur l'icône d'engrenage.
Sélectionnez l'onglet Paramètres IPv4, changez la méthode de Automatic(DHCP)
vers Automatic(DHCP) addresses only
, ce qui empêchera votre système Ubuntu d'obtenir l'adresse du serveur DNS de votre routeur. Spécifiez ensuite un serveur DNS (127.0.0.1). Stubby écoute sur 127.0.0.1.
Enregistrez vos modifications. Redémarrez ensuite NetworkManager pour que les modifications prennent effet.
sudo systemctl restart NetworkManager
Une fois reconnecté, cliquez à nouveau sur l'icône Network Manager et sélectionnez connection information
. Vous pouvez voir que votre système Ubuntu utilise maintenant 127.0.0.1 comme serveur DNS.
Modifier le serveur DNS à partir de la ligne de commande
Vous pouvez utiliser la méthode ci-dessous pour changer de serveur DNS tant que votre environnement de bureau utilise NetworkManager.
Ouvrez une fenêtre de terminal et accédez au répertoire des profils de connexion de Network Manager.
cd /etc/NetworkManager/system-connections/
Répertoriez ensuite les noms de connexion disponibles sur votre système.
ls
Comme vous pouvez le voir, j'ai plusieurs connexions sur mon système, dont une est une connexion filaire. Certaines sont des connexions sans fil et une est une connexion VPN. Parce que mon ordinateur de bureau est connecté à mon routeur via un câble Ethernet, je dois donc modifier le profil de connexion filaire avec le nano
éditeur de texte en ligne de commande.
sudo nano 'Wired connection 1'
Si votre ordinateur est connecté via Wi-Fi, vous devez modifier le profil de connexion sans fil. Dans ce fichier, recherchez le [ipv4]
configurations. Par défaut, cela devrait ressembler à ceci :
[ipv4] dns-search= method=auto
Pour que votre système utilise Stubby, modifiez les configurations comme suit.
[ipv4] dns=127.0.0.1; dns-search= ignore-auto-dns=true method=auto
Pour enregistrer le fichier dans l'éditeur de texte Nano, appuyez sur Ctrl+O
, puis appuyez sur Entrée pour confirmer. Appuyez sur Ctrl+X
pour quitter. Redémarrez ensuite Network Manager pour que les modifications prennent effet.
sudo systemctl restart NetworkManager
Vous pouvez maintenant vérifier votre serveur DNS actuel en exécutant la commande suivante :
systemd-resolve --status
Exemple de sortie :
Link 2 (enp5s0) Current Scopes: DNS LLMNR setting: yes MulticastDNS setting: no DNSSEC setting: no DNSSEC supported: no DNS Servers: 127.0.0.1
Si 127.0.0.1 est répertorié comme serveur DNS, votre système utilise Stubby.
Ignorer les paramètres DNS fournis par le serveur DHCP
Si vous utilisez l'édition serveur Ubuntu , vous pouvez configurer systemd pour ignorer les paramètres DNS fournis par le serveur DHCP, afin que votre système n'utilise pas accidentellement le mauvais serveur DNS.
Tout d'abord, vérifiez l'état de votre interface réseau.
networkctl status enp5s0
Il vous montrera le fichier réseau pour cette interface. Modifiez ce fichier réseau.
sudo nano /run/systemd/network/10-netplan-enp5s0.network
Trouvez le [DHCP]
section et ajoutez la ligne suivante.
UseDNS=false
Comme ceci :
[DHCP] RouteMetric=100 UseMTU=true UseDNS=false
Enregistrez et fermez le fichier. Redémarrez ensuite systemd-netweorkd.service
pour que le changement prenne effet.
sudo systemctl restart systemd-networkd
Exécutez la commande suivante pour vérifier les serveurs DNS pour chaque interface réseau. Si tout est correct, vous ne verrez pas le serveur DNS fourni par votre serveur DHCP.
resolvectl status
Les modifications apportées au fichier réseau peuvent être remplacées par une nouvelle mise à jour du package. Si votre serveur utilise netplan pour gérer la connexion réseau, vous pouvez également configurer netplan pour ignorer les paramètres DNS DHCP.
sudo nano /etc/netplan/50-cloud-init.yaml
Ajoutez les deux lignes suivantes au fichier.
dhcp4-overrides: use-dns: no
Comme ceci :
network: ethernets: eth0: dhcp4: true dhcp4-overrides: use-dns: no optional: true set-name: eth0 nameservers: search: [ invalid ] addresses: 127.0.0.1 version: 2
Enregistrez et fermez le fichier. Appliquez ensuite les modifications.
sudo netplan apply
Comment vérifier si votre trafic DNS est chiffré
Nous pouvons utiliser WireShark pour surveiller le trafic DNS. Installez WireShark à partir du référentiel Ubuntu 20.04/18.04.
sudo apt install wireshark
Si on vous demande « Les non-superutilisateurs devraient-ils pouvoir capturer des paquets ? », répondez Oui. Une fois installé, exécutez la commande suivante pour ajouter votre compte d'utilisateur au groupe wireshark afin de pouvoir capturer des paquets.
sudo adduser your-username wireshark
Déconnectez-vous et reconnectez-vous pour que les modifications prennent effet. Ouvrez ensuite WireShark à partir du menu de votre application, sélectionnez votre interface réseau dans WireShark. Par exemple, le nom de mon interface Ethernet est enp5s0. Saisissez ensuite port 853
comme filtre de capture. Ainsi, WireShark ne capturera que le trafic sur le port 853, qui est le port utilisé par DNS sur TLS.
Cliquez sur le bouton dans le coin supérieur gauche pour commencer la capture. Après cela, dans la fenêtre du terminal, exécutez la commande suivante pour interroger le nom de domaine en utilisant le dig
utilitaire. Par exemple, je peux interroger l'enregistrement A de mon nom de domaine.
dig A linuxbabe.com
Vous pouvez maintenant voir le trafic DNS capturé dans WireShark. Comme vous pouvez le voir, ma requête DNS a été envoyée au 185.49.141.37
, 145.100.185.15
et 145.100.185.16
, qui sont les 3 résolveurs DNS par défaut définis dans le fichier de configuration stubby. Les connexions ont été établies via TCP et chiffrées avec TLS, ce que je veux.
Si les requêtes DNS sont envoyées sans cryptage, l'ordinateur contactera le serveur DNS sur le port 53. Vous pouvez à nouveau capturer des paquets avec le port 53
comme filtre de capture, mais vous ne verrez aucun paquet dans WireShark, ce qui signifie que stubby chiffre vos requêtes DNS.
Comment ajouter un DNS CloudFlare à Stubby
J'ai constaté qu'il y a une latence élevée (plus de 200 ms) entre mon ordinateur et les 3 serveurs DNS par défaut, alors que les serveurs DNS CloudFlare (1.1.1.1, 1.0.0.1) me donnent une latence très faible (inférieure à 20 ms). CloudFlare prend également en charge DNS sur TLS. Pour ajouter un serveur DNS CloudFlare, modifiez le fichier de configuration stubby.
sudo nano /etc/stubby/stubby.yml
Faites défiler jusqu'à upstream_recursive_servers:
section et ajoutez le texte suivant au-dessus des autres serveurs DNS.
#CloudFlare servers - address_data: 1.1.1.1 tls_auth_name: "cloudflare-dns.com" - address_data: 1.0.0.1 tls_auth_name: "cloudflare-dns.com"
Recherchez ensuite la ligne suivante :
round_robin_upstreams: 1
Modifier 1
à 0
. Cela obligera Stubby à toujours utiliser le serveur DNS CloudFlare. Si CloudFlare n'est pas disponible, stubby utilisera d'autres serveurs DNS. Enregistrez le fichier et redémarrez stubby pour que les modifications prennent effet.
sudo systemctl restart stubby
Support DNS sur HTTPS
Stubby prendra en charge DNS sur HTTPS dans la version 0.3. Ubuntu 20.10 est livré avec la version 0.2.6. Pour vérifier la version de Stubby, exécutez
stubby -V