GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

So richten Sie mit Nginx unter Ubuntu einfach einen DNS über TLS-Resolver ein

Dieses Tutorial zeigt Ihnen, wie Sie Ihr eigenes DNS über TLS einrichten (DoT)-Resolver auf Ubuntu mit Nginx, sodass Ihre DNS-Abfragen verschlüsselt und vor neugierigen Blicken geschützt werden können.

Was ist DNS über TLS und warum ist es wichtig

DNS (Domain Name System) ist für die Übersetzung von Domainnamen in IP-Adressen zuständig. Es wurde 1987 ohne Rücksicht auf Sicherheit oder Privatsphäre entwickelt. Standardmäßig werden DNS-Abfragen nicht verschlüsselt. Sie werden im Klartext über die Leitung gesendet und können von Mittelinstanzen ausgenutzt werden. Zum Beispiel die Great Firewall of China (GFW ) verwendet eine Technik namens DNS-Cache-Poison das chinesische Internet zu zensieren. (Sie verwenden auch andere Methoden, die den Rahmen dieses Artikels sprengen würden.)

GFW prüft jede DNS-Anfrage, die an einen DNS-Server außerhalb Chinas gesendet wird. Da das Klartext-DNS-Protokoll auf UDP basiert, einem verbindungslosen Protokoll, kann GFW sowohl die Client-IP als auch die Server-IP fälschen. Wenn GFW einen Domainnamen auf seiner Sperrliste findet, ändert es die DNS-Antwort. Wenn beispielsweise ein chinesischer Internetnutzer google.com besuchen möchte, gibt GFW anstelle der echten IP-Adresse von Google eine in China befindliche IP-Adresse an den DNS-Resolver des Nutzers zurück. Dann gibt der DNS-Resolver die gefälschte IP-Adresse an den Computer des Benutzers zurück, sodass der Benutzer google.com nicht besuchen kann.

DNS über TLS bedeutet, dass DNS-Abfragen über eine sichere Verbindung gesendet werden, die mit TLS verschlüsselt ist, der gleichen Technologie, die HTTP-Datenverkehr verschlüsselt.

Warum einen eigenen DoT-Resolver ausführen?

Es gibt bereits einige öffentliche DNS-Resolver wie 1.1.1.1 und 9.9.9.9, die DNS über TLS unterstützen, sodass Sie sie verwenden können, wenn Sie nicht über die Fähigkeiten oder die Zeit verfügen, einen eigenen auszuführen. Einige Leute argumentieren jedoch, dass dies großen DNS-Dienstanbietern immer noch erlaubt, Informationen über Benutzer zu sammeln. Sie scheinen mehr Vertrauen in ihren ISP zu haben. Aber ich denke, wenn Sie in Bezug auf den Datenschutz paranoid sind, sollten Sie Ihren eigenen DoT-Resolver betreiben, damit weder große DNS-Dienstanbieter noch Ihr ISP Sie ausspionieren können.

Derzeit unterstützen nicht alle DNS-Resolver (BIND, Unbound, Knot-Resolver, PowerDNS-Recursor usw.) DNS über TLS. Anstatt eine Anleitung für einen bestimmten Resolver zu erstellen, werde ich Ihnen zeigen, wie Sie den Nginx TLS-Proxy für Ihren vorhandenen DNS-Resolver einrichten, um den DoT-Dienst bereitzustellen. Unabhängig davon, welchen DNS-Resolver Sie verwenden, können Sie diesem Tutorial folgen.

Voraussetzungen

Es wird davon ausgegangen, dass auf Ihrem Ubuntu-Server ein DNS-Resolver ausgeführt wird. Sie können jeden DNS-Resolver verwenden (BIND, Unbound, Knot-Resolver …) Ich persönlich verwende BIND.

  • Richten Sie Ihren eigenen BIND9-DNS-Resolver auf Ubuntu 16.04/18.04 ein
  • Richten Sie Ihren eigenen BIND9-DNS-Resolver unter Ubuntu 20.04 ein

Sie benötigen auch einen Domänennamen, da DNS-Clients eine sichere TLS-Verbindung mit unserem DNS-Resolver herstellen müssen. Ich habe meinen Domainnamen bei NameCheap registriert, weil der Preis niedrig ist und sie lebenslangen Whois-Datenschutz bieten.

Wenn Sie die oben genannten Anforderungen erfüllen, befolgen Sie die nachstehenden Anweisungen.

Schritt 1:Nginx auf Ubuntu-Server installieren

Es ist sehr einfach zu tun. Führen Sie einfach den folgenden Befehl aus.

sudo apt install nginx

Schritt 2:Erhalten Sie ein vertrauenswürdiges TLS-Zertifikat von Let’s Encrypt

DNS über TLS erfordert die Installation eines TLS-Zertifikats auf der Serverseite. Wir werden das Let’s Encrypt-Zertifikat erhalten und installieren. Der Vorteil der Verwendung des Let’s Encrypt-Zertifikats besteht darin, dass es kostenlos ist, einfacher einzurichten ist und von der Client-Software als vertrauenswürdig eingestuft wird.

Führen Sie die folgenden Befehle aus, um den Let’s Encrypt-Client (certbot) aus dem standardmäßigen Ubuntu-Repository zu installieren.

sudo apt install certbot

Um ein Let’s Encrypt TLS-Zertifikat zu erhalten, können wir mit dem folgenden Befehl einen virtuellen Nginx-Host erstellen. Ersetzen Sie dot.example.com mit eigenem Domainnamen. Vergessen Sie nicht, einen DNS-A-Eintrag für diese Subdomain zu erstellen.

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

Kopieren Sie den folgenden Text und fügen Sie ihn in die virtuelle Hostdatei ein.

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

      root /usr/share/nginx/html/;

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

Speichern und schließen Sie die Datei. Laden Sie Nginx neu, damit die Änderungen wirksam werden.

sudo systemctl reload nginx

Sobald der virtuelle Host erstellt und aktiviert ist, führen Sie den folgenden Befehl aus, um das Let’s Encrypt-Zertifikat mit dem Webroot-Plugin zu erhalten.

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

Schritt 3:DNS über TLS-Proxy in Nginx erstellen

Bearbeiten Sie die Hauptkonfigurationsdatei von Nginx.

sudo nano /etc/nginx/nginx.conf

Fügen Sie am Ende dieser Datei die folgenden Zeilen hinzu. Beachten Sie, dass sie außerhalb von http platziert werden müssen Kontext.

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;
    }
}

In der obigen Konfiguration lassen wir Nginx die TLS-Verbindung auf Port 853 beenden, dann leitet es DNS-Anfragen an den lokalen DNS-Resolver um, der 127.0.0.1:53 überwacht .

Speichern und schließen Sie die Datei. Testen Sie dann die Nginx-Konfiguration und starten Sie neu.

sudo nginx -t
sudo systemctl restart nginx

Wenn auf dem Ubuntu-Server eine Firewall läuft, müssen Sie den TCP-Port 853 öffnen. Wenn Sie beispielsweise die UFW-Firewall verwenden, führen Sie den folgenden Befehl aus.

sudo ufw allow 853/tcp

Da wir DNS über TLS verwenden, müssen Sie sich keine Gedanken über DNS-Amplification-Angriffe machen.

Schritt 5:Stubby DoT Client auf Ubuntu Desktop konfigurieren

Stubby ist ein vom getdns-Team entwickelter Open-Source-DNS-Stub-Resolver. Ein Stub-Resolver ist ein kleiner DNS-Client auf dem Computer des Endbenutzers, der DNS-Anfragen von Anwendungen wie Firefox empfängt und Anfragen an einen rekursiven Resolver wie 1.1.1.1 oder 8.8.8.8 weiterleitet. Stubby ist insofern besonders, als es DNS über TLS unterstützt. Standardmäßig werden DNS-Anfragen nur verschlüsselt gesendet.

Installieren Sie Stubby auf dem Ubuntu-Desktop aus dem Standard-Repository.

sudo apt install stubby

Einmal installiert, läuft Stubby im Hintergrund. Überprüfen Sie den Status mit:

systemctl status stubby

Stubby lauscht auf TCP- und UDP-Port 53 von localhost (127.0.0.1). Standardmäßig verwendet Stubby Drittanbieter-DNS über TLS-Resolver. Wir müssen es konfigurieren, um unser eigenes zu verwenden.

sudo nano /etc/stubby/stubby.yml

Scrollen Sie nach unten zu upstream_recursive_servers: Abschnitt und fügen Sie den folgenden Text über anderen DNS-Servern hinzu. Ersetzen Sie 12.34.56.78 durch die IP-Adresse Ihres DoT-Resolvers.

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

Suchen Sie dann die folgende Zeile:

round_robin_upstreams: 1

Ändern Sie 1 auf 0 . Dadurch verwendet Stubby immer Ihren eigenen DNS-over-TLS-Resolver. Wenn es nicht verfügbar ist, verwendet Stubby andere DNS-Server. Speichern Sie die Datei und starten Sie Stubby neu, damit die Änderungen wirksam werden.

sudo systemctl restart stubby

Schritt 6:Konfigurieren Sie Ubuntu Desktop für die Verwendung von Stubby

Obwohl Stubby ausgeführt wird, wird es nicht vom Betriebssystem verwendet. Klicken Sie auf das Network Manager-Symbol in der oberen rechten Ecke Ihres Desktops. Wählen Sie dann kabelgebundene Einstellungen. (Wenn Sie Wi-Fi verwenden, wählen Sie Wi-Fi-Einstellungen.)

Klicken Sie auf das Zahnradsymbol.

Wählen Sie IPv4 und wechseln Sie dann in den DNS-Einstellungen zu Automatic auf OFF, wodurch verhindert wird, dass Ihr Ubuntu-System die DNS-Serveradresse von Ihrem Router erhält. Geben Sie 127.0.0.1 ein im DNS-Feld. Klicken Sie auf Apply Schaltfläche, um Ihre Änderungen zu speichern.

Starten Sie anschließend NetworkManager neu, damit die Änderungen wirksam werden.

sudo systemctl restart NetworkManager

Sobald Sie wieder verbunden sind, können Sie in den Details sehen, dass Ihr Ubuntu-System jetzt 127.0.0.1 als DNS-Server verwendet Registerkarte.

So überprüfen Sie, ob Ihr DNS-Verkehr verschlüsselt ist

Wir können WireShark verwenden, um den DNS-Verkehr zu überwachen. Installieren Sie WireShark auf dem Ubuntu-Desktop.

sudo apt install wireshark

Wenn Sie gefragt werden „Sollten Nicht-Superuser in der Lage sein, Pakete zu erfassen?“, antworten Sie mit Ja. Führen Sie nach der Installation den folgenden Befehl aus, um Ihr Benutzerkonto zur Wireshark-Gruppe hinzuzufügen, damit Sie Pakete erfassen können.

sudo adduser your-username wireshark

Melden Sie sich ab und wieder an, damit die Änderungen wirksam werden. Öffnen Sie dann WireShark über Ihr Anwendungsmenü und wählen Sie Ihre Netzwerkschnittstelle in WireShark aus. Beispielsweise lautet der Name meiner Ethernet-Schnittstelle enp5s0. Geben Sie dann port 853 ein als Fangfilter. Dadurch erfasst WireShark nur Datenverkehr auf Port 853, dem Port, der von DNS über TLS verwendet wird.

Klicken Sie auf die Schaltfläche in der oberen linken Ecke, um mit der Aufnahme zu beginnen. Führen Sie danach im Terminalfenster den folgenden Befehl aus, um den Domänennamen mit dig abzufragen Nützlichkeit. Beispielsweise kann ich den A-Eintrag meines Domainnamens abfragen.

dig A linuxbabe.com

Jetzt können Sie den erfassten DNS-Verkehr in WireShark sehen. Verbindungen wurden über TCP hergestellt und mit TLS verschlüsselt, was wir wollen. Sie sollten überprüfen, ob die Spalte Ziel die IP-Adresse Ihres DoT-Resolvers enthält.

Wenn DNS-Anfragen unverschlüsselt gesendet werden, würde der Computer den DNS-Server auf Port 53 kontaktieren. Sie können Pakete erneut mit port 53 erfassen als Erfassungsfilter, aber Sie sehen keine Pakete in WireShark, was bedeutet, dass Stubby Ihre DNS-Abfragen verschlüsselt.


Ubuntu
  1. So stellen Sie den DNS-Nameserver unter Ubuntu 20.04 ein

  2. So legen Sie DNS-Nameserver unter Ubuntu 18.04 fest

  3. So richten Sie eine Firewall mit UFW unter Ubuntu 20.04 ein

  4. So richten Sie Nginx-Serverblöcke unter Ubuntu 20.04 ein

  5. So richten Sie einen ungebundenen DNS-Resolver unter Ubuntu 20.04 ein

Richten Sie DNS über HTTPS (DoH) Resolver auf Ubuntu mit DNSdist ein

So aktivieren Sie TLS 1.3 einfach in Nginx unter Ubuntu 20.04, 18.04, 16.04

Richten Sie einen lokalen DNS-Resolver auf Ubuntu 18.04, 16.04 mit BIND9 ein

Richten Sie den lokalen DNS-Resolver unter Ubuntu 20.04 mit BIND9 ein

So installieren Sie Nginx mit Let’s Encrypt TLS/SSL unter Ubuntu 20.04

So richten Sie einen Seafile-Server mit Nginx unter Ubuntu 18.04 ein