GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Comment configurer facilement un résolveur DNS sur TLS avec Nginx sur Ubuntu

Ce didacticiel vous montrera comment configurer votre propre DNS sur TLS (DoT) sur Ubuntu avec Nginx, afin que vos requêtes DNS puissent être cryptées et protégées des regards indiscrets.

Qu'est-ce que le DNS sur TLS et pourquoi est-ce important ?

DNS (Domain Name System) est responsable de la traduction des noms de domaine en adresses IP. Il a été conçu en 1987 sans souci de sécurité ni de confidentialité. Par défaut, les requêtes DNS ne sont pas chiffrées. Ils sont envoyés en clair sur le fil et peuvent être exploités par des entités intermédiaires. Par exemple, le Grand Firewall de Chine (GFW ) utilise une technique appelée poison de cache DNS pour censurer l'Internet chinois. (Ils utilisent également d'autres méthodes, qui sortent du cadre de cet article.)

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, GFW renvoie une adresse IP située en Chine au lieu de l'adresse IP réelle de Google, au résolveur DNS de l'utilisateur. Ensuite, le résolveur DNS renvoie la fausse adresse IP à l'ordinateur de l'utilisateur, de sorte que l'utilisateur ne peut pas visiter google.com.

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.

Pourquoi exécuter votre propre résolveur DoT ?

Il existe déjà des résolveurs DNS publics tels que 1.1.1.1 et 9.9.9.9 qui prennent en charge DNS sur TLS, vous pouvez donc les utiliser si vous n'avez pas les compétences ou le temps pour exécuter le vôtre. Cependant, certaines personnes affirment que cela permet toujours aux grands fournisseurs de services DNS de collecter des informations sur les utilisateurs. Ils semblent avoir plus confiance en leur FAI. Mais je pense que si vous êtes paranoïaque à propos de la confidentialité, vous devriez utiliser votre propre résolveur DoT, afin que ni les grands fournisseurs de services DNS ni votre FAI ne puissent vous espionner.

Actuellement, tous les résolveurs DNS (BIND, Unbound, Knot resolver, PowerDNS recursor, etc.) ne prennent pas en charge DNS sur TLS. Au lieu de faire un guide pour un résolveur spécifique, je vais vous montrer comment configurer le proxy Nginx TLS pour votre résolveur DNS existant afin de fournir le service DoT, donc quel que soit le résolveur DNS que vous utilisez, vous pouvez suivre ce tutoriel.

Prérequis

Il est supposé que vous avez un résolveur DNS en cours d'exécution sur votre serveur Ubuntu. Vous pouvez utiliser n'importe quel résolveur DNS (BIND, Unbound, Knot resolver…) J'utilise personnellement BIND.

  • Configurez votre propre résolveur DNS BIND9 sur Ubuntu 16.04/18.04
  • Configurez votre propre résolveur DNS BIND9 sur Ubuntu 20.04

Vous avez également besoin d'un nom de domaine, car les clients DNS devront établir une connexion TLS sécurisée avec notre résolveur DNS. J'ai enregistré mon nom de domaine auprès de NameCheap parce que le prix est bas et qu'ils offrent une protection de la confidentialité whois gratuite à vie.

Une fois que vous remplissez les conditions ci-dessus, suivez les instructions ci-dessous.

Étape 1 :Installez Nginx sur le serveur Ubuntu

C'est très facile à faire. Exécutez simplement la commande suivante.

sudo apt install nginx

Étape 2 :Obtenir un certificat TLS de confiance auprès de Let's Encrypt

Le DNS sur TLS nécessite l'installation d'un certificat TLS côté serveur. Nous obtiendrons et installerons le certificat Let’s Encrypt. L'avantage d'utiliser le certificat Let's Encrypt est qu'il est gratuit, plus facile à configurer et approuvé par le logiciel client.

Exécutez les commandes suivantes pour installer le client Let's Encrypt (certbot) à partir du référentiel Ubuntu par défaut.

sudo apt install certbot

Pour obtenir un certificat Let's Encrypt TLS, nous pouvons créer un hôte virtuel Nginx avec la commande suivante. Remplacer dot.example.com avec votre propre nom de domaine. N'oubliez pas de créer un enregistrement DNS A pour ce sous-domaine.

sudo nano /etc/nginx/conf.d/dot.example.com.conf

Copiez le texte suivant et collez-le dans le fichier de l'hôte virtuel.

server {
      listen 80;
      server_name dot.example.com;

      root /usr/share/nginx/html/;

      location ~ /.well-known/acme-challenge {
         allow all;
      }
}

Enregistrez et fermez le fichier. Rechargez Nginx pour que les modifications prennent effet.

sudo systemctl reload nginx

Une fois l'hôte virtuel créé et activé, exécutez la commande suivante pour obtenir le certificat Let's Encrypt à l'aide du plug-in Webroot.

sudo certbot certonly --webroot --agree-tos --email [email protected] -d dot.example.com -w /usr/share/nginx/html/

Étape 3 :Créer un proxy DNS sur TLS dans Nginx

Modifiez le fichier de configuration principal de Nginx.

sudo nano /etc/nginx/nginx.conf

Ajoutez les lignes suivantes au bas de ce fichier. Notez qu'ils doivent être placés en dehors du http contexte.

stream {
    # DNS upstream pool
    upstream dns {
        zone dns 64k;
        server 127.0.0.1:53;
    }

   # DoT server for decryption
   server {
        listen 853 ssl;
        ssl_certificate /etc/letsencrypt/live/dot.example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/dot.example.com/privkey.pem;
        proxy_pass dns;
    }
}

Dans la configuration ci-dessus, nous faisons en sorte que Nginx termine la connexion TLS sur le port 853, puis il redirigera les requêtes DNS vers le résolveur DNS local écoutant sur 127.0.0.1:53 .

Enregistrez et fermez le fichier. Testez ensuite la configuration de Nginx et redémarrez.

sudo nginx -t
sudo systemctl restart nginx

Si un pare-feu s'exécute sur le serveur Ubuntu, vous devez ouvrir le port TCP 853. Par exemple, si vous utilisez le pare-feu UFW, exécutez la commande suivante.

sudo ufw allow 853/tcp

Puisque nous utilisons DNS sur TLS, il n'y a pas lieu de s'inquiéter de l'attaque par amplification DNS.

Étape 5 :Configurer le client Stubby DoT sur le bureau Ubuntu

Stubby est un résolveur de stub DNS open source développé par l'équipe 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.

Installez Stubby sur le bureau Ubuntu à partir du référentiel par défaut.

sudo apt install stubby

Une fois installé, stubby s'exécute en arrière-plan. vérifiez son statut avec :

systemctl status stubby

Stubby écoute sur le port TCP et UDP 53 de localhost (127.0.0.1). Par défaut, Stubby utilise des DNS tiers sur des résolveurs TLS. Nous devons le configurer pour utiliser le nôtre.

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. Remplacez 12.34.56.78 par l'adresse IP de votre résolveur DoT.

# My Own DNS over TLS resolver
  - address_data: 12.34.56.78
    tls_auth_name: "dot.example.com"

Recherchez ensuite la ligne suivante :

round_robin_upstreams: 1

Modifier 1 à 0 . Ainsi, stubby utilisera toujours votre propre résolveur DNS sur TLS. S'il 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

Étape 6 :Configurer Ubuntu Desktop pour utiliser Stubby

Bien que Stubby soit en cours d'exécution, il n'est pas utilisé par le système d'exploitation. 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.

Comment vérifier si votre trafic DNS est chiffré

Nous pouvons utiliser WireShark pour surveiller le trafic DNS. Installez WireShark sur le bureau Ubuntu.

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. Les connexions ont été établies via TCP et cryptées avec TLS, ce que nous voulons. Vous devez vérifier si la colonne Destination inclut l'adresse IP de votre résolveur DoT.

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.


Ubuntu
  1. Comment configurer le serveur de noms DNS sur Ubuntu 20.04

  2. Comment définir des serveurs de noms DNS sur Ubuntu 18.04

  3. Comment configurer un pare-feu avec UFW sur Ubuntu 20.04

  4. Comment configurer les blocs de serveur Nginx sur Ubuntu 20.04

  5. Comment configurer un résolveur DNS non lié sur Ubuntu 20.04

Configurer le résolveur DNS sur HTTPS (DoH) sur Ubuntu avec DNSdist

Comment activer facilement TLS 1.3 dans Nginx sur Ubuntu 20.04, 18.04, 16.04

Configurer un résolveur DNS local sur Ubuntu 18.04, 16.04 avec BIND9

Configurer le résolveur DNS local sur Ubuntu 20.04 avec BIND9

Comment installer Nginx avec Let's Encrypt TLS/SSL sur Ubuntu 20.04

Comment configurer un serveur Seafile avec Nginx sur Ubuntu 18.04