GNU/Linux >> LINUX-Kenntnisse >  >> Debian

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

Dieses Tutorial zeigt Ihnen, wie Sie Ihr eigenes DNS über HTTPS einrichten (DoH)Resolver auf Debian mit DNSdist, damit Ihre DNS-Abfragen verschlüsselt und vor neugierigen Blicken geschützt werden können.

Was ist DNS über HTTPS 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 (GFW ) aus China verwendet eine Technik namens DNS-Cache-Gift 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.

HTTPS ist die Standardmethode zum Verschlüsseln von Klartext-HTTP-Verbindungen. Mit DNS über HTTPS (DoH) werden Ihre DNS-Abfragen verschlüsselt und kein Dritter kann Ihre DNS-Abfrage sehen.

Warum einen eigenen DoH-Resolver betreiben?

Es gibt bereits einige öffentliche DNS-Resolver wie 1.1.1.1 und 9.9.9.9 die DNS über HTTPS unterstützen, sodass Sie sie verwenden können, wenn Sie nicht über die Fähigkeiten oder die Zeit verfügen, Ihre eigenen auszuführen. Ab Firefox-Version 61 können Sie DNS über HTTPS in den Browsereinstellungen aktivieren, was ein großer Fortschritt für die Internetsicherheit und den Datenschutz ist. Firefox verwendet standardmäßig Cloudflare-Resolver (1.1.1.1). Einige Leute argumentieren jedoch, dass dies Cloudflare erlaubt, Informationen über Firefox-Benutzer zu sammeln. Sie scheinen ihrem ISP mehr zu vertrauen als Cloudflare. Ich denke, wenn Sie in Bezug auf den Datenschutz paranoid sind, sollten Sie Ihren eigenen DoH-Resolver ausführen, damit weder Cloudflare noch Ihr ISP Sie ausspionieren können.

DoH vs. DoT

Es gibt ein weiteres Protokoll, das ebenfalls darauf abzielt, DNS-Abfragen zu verschlüsseln. Es heißt DNS über TLS (Punkt). Welche Vorteile hat die Verwendung von DNS über HTTPS?

Für Menschen, die in Ländern mit strenger Internetzensur wie China leben, ist es vorteilhafter, DoH zu verwenden.

  • DoT arbeitet auf TCP-Port 853 , die leicht von einer nationalen Firewall blockiert werden kann.
  • DoH arbeitet auf TCP-Port 443 , das ist der Standardport für HTTPS-Websites, wodurch DoH sehr schwer zu blockieren ist, denn wenn TCP-Port 443 blockiert wird, werden auch fast alle HTTPS-Websites blockiert.

Mein DoH-Resolver läuft auf einem VPS (Virtual Private Server) außerhalb Chinas und die Great Firewall of China kann meine DNS-Abfragen nicht abfangen. Ich kann sogar die IP-Adresse meines DoH-Resolvers hinter Cloudflare CDN (Content Delivery Network) verbergen.

Ein weiterer Vorteil von DoH besteht darin, dass Webanwendungen über vorhandene Browser-APIs auf DNS-Informationen zugreifen können, sodass kein Stub-Resolver erforderlich ist.

DoH-Unterstützung in wichtigen DNS-Resolvern

  • BINDEN wird DoH in der noch in Entwicklung befindlichen Version 9.17 unterstützen. Debian 10 wird mit BIND 9.11 ausgeliefert.
  • Knoten Resolver unterstützt DoH seit Version 4.0.0. Die aktuell neueste Version ist 5.3.2. Es hat ein offizielles Repository für Debian, Debian, CentOS, Fedora.
  • Ungebunden unterstützt DoH seit Version 1.12.0.
  • PowerDNS-Rekursor unterstützt derzeit kein DoH.

Eigentlich ziehe ich es vor, den DoH-Resolver mit DNSdist auszuführen , die DoH-Unterstützung in Version 1.4 hinzugefügt hat. Die aktuell neueste Version ist 1.6. Es hat ein offizielles Repository für Debian, Raspbian, Debian und CentOS. DNSdist ist ein DNS-Load-Balancer, der DNS-Abfragen an einen Backend-DNS-Resolver weiterleiten kann. Unabhängig davon, welchen DNS-Resolver Sie verwenden, können Sie mit DNSdist Ihren eigenen DoH-Server betreiben. DNSdist wird vom PowerDNS-Team entwickelt.

Anforderungen

Es wird davon ausgegangen, dass auf Ihrem Debian-Server ein DNS-Resolver läuft. Sie können jeden DNS-Resolver (BIND, Knot-Resolver, Unbound…) verwenden. Ich persönlich verwende BIND.

  • Richten Sie Ihren eigenen BIND9-DNS-Resolver auf Debian 10 Buster ein

Sobald Ihr DNS-Resolver betriebsbereit ist, befolgen Sie die nachstehenden Anweisungen.

Schritt 1:Installieren Sie DNSdist auf dem Debian-Server

Es wird empfohlen, DNSdist aus dem Upstream-Repository zu installieren, damit Sie die neueste stabile Version haben. Zuerst müssen Sie eine Quelllistendatei für DNSdist erstellen.

Debian 10

echo "deb [arch=amd64] http://repo.powerdns.com/debian buster-dnsdist-16 main" | sudo tee /etc/apt/sources.list.d/pdns.list

Debian 9

echo "deb [arch=amd64] http://repo.powerdns.com/debian stretch-dnsdist-15 main" | sudo tee /etc/apt/sources.list.d/pdns.list

Als Nächstes erstellen wir eine Einstellungsdatei für DNSdist, um das Paket anzuheften, damit wir DNSdist nicht versehentlich aus einem anderen Repository installieren.

sudo nano /etc/apt/preferences.d/dnsdist

Fügen Sie die folgenden Zeilen in die Datei ein.

Package: dnsdist*
Pin: origin repo.powerdns.com
Pin-Priority: 600

Speichern und schließen Sie die Datei. Führen Sie dann den folgenden Befehl aus, um den öffentlichen PowerDNS-Schlüssel zu importieren, damit der APT-Paketmanager die Interität der aus diesem Repository heruntergeladenen Softwarepakete überprüfen kann.

curl https://repo.powerdns.com/FD380FBB-pub.asc | sudo apt-key add -

Aktualisieren Sie als Nächstes die Repository-Liste und installieren Sie DNSdist.

sudo apt update

sudo apt install dnsdist

Standardmäßig versucht DNSdist, sich an Port 53 zu binden. Da Sie einen vorhandenen DNS-Resolver wie BIND haben, der Port 53 überwacht, wird dnsdist.service verwendet würde nicht starten.

Da wir nur einen DoH-Resolver bereitstellen und uns nicht um den DNS-Lastausgleich kümmern, können wir DNSdist so konfigurieren, dass es auf einem anderen Port lauscht. Bearbeiten Sie die DNSdist-Konfigurationsdatei.

sudo nano /etc/dnsdist/dnsdist.conf

Diese Datei enthält keinen Inhalt. Fügen Sie vorerst einfach die folgende Zeile in diese Datei ein, damit DNSdist auf TCP- und UDP-Port 5353 statt auf Port 53 lauscht.

setLocal("127.0.0.1:5353")

Speichern und schließen Sie die Datei. Starten Sie dann DNSdist neu.

sudo systemctl restart dnsdist

Überprüfen Sie den Status.

systemctl status dnsdist

Es sollte aktiv (laufend) sein .

Schritt 2:Installieren Sie den Let’s Encrypt Client (Certbot) auf dem Debian-Server

DNS über HTTPS 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, einfacher einzurichten 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 Debian-Repository zu installieren.

sudo apt install certbot

Um die Versionsnummer zu prüfen, führen Sie

aus
certbot --version

Beispielausgabe:

certbot 0.31.0

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

Ich empfehle die Verwendung des standalone oder webroot Plugin zum Abrufen des TLS-Zertifikats für dnsdist.

Eigenständiges Plugin

Wenn auf Ihrem Debian-Server kein Webserver läuft, können Sie das eigenständige Plugin verwenden, um ein TLS-Zertifikat von Let’s Encrypt zu erhalten. Erstellen Sie einen DNS-A-Eintrag für die Subdomain (doh.example.com) und führen Sie dann den folgenden Befehl aus.

sudo certbot certonly --standalone --preferred-challenges http --agree-tos --email [email protected] -d doh.example.com

Wo:

  • certonly :Erhalten Sie ein Zertifikat, aber installieren Sie es nicht.
  • --standalone :Verwenden Sie das eigenständige Plugin, um ein Zertifikat zu erhalten
  • --preferred-challenges http :Führen Sie eine http-01-Abfrage durch, um unsere Domäne zu validieren, die Port 80 verwendet.
  • --agree-tos :Stimmen Sie den Nutzungsbedingungen von Let’s Encrypt zu.
  • --email :Die E-Mail-Adresse wird für die Kontoregistrierung und -wiederherstellung verwendet.
  • -d :Geben Sie Ihren Domänennamen an.

Verwendung des Webroot-Plugins

Wenn Ihr Debian-Server einen Webserver hat, der Port 80 und 443 überwacht, dann ist es eine gute Idee, das Webroot-Plugin zu verwenden, um ein Zertifikat zu erhalten, da das Webroot-Plugin mit so ziemlich jedem Webserver funktioniert und wir das Zertifikat nicht installieren müssen im Webserver.

Zuerst müssen Sie einen virtuellen Host für doh.example.com erstellen.

Apache

Wenn Sie Apache verwenden, dann

sudo nano /etc/apache2/sites-available/doh.example.com.conf

Und fügen Sie die folgenden Zeilen in die Datei ein.

<VirtualHost *:80>        
        ServerName doh.example.com

        DocumentRoot /var/www/dnsdist
</VirtualHost>

Speichern und schließen Sie die Datei. Erstellen Sie dann das Web-Root-Verzeichnis.

sudo mkdir /var/www/dnsdist

Legen Sie www-data (Apache-Benutzer) als Eigentümer des Webstammverzeichnisses fest.

sudo chown www-data:www-data /var/www/dnsdist -R

Aktivieren Sie diesen virtuellen Host.

sudo a2ensite doh.example.com

Laden Sie Apache neu, damit die Änderungen wirksam werden.

sudo systemctl reload apache2

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 doh.example.com -w /var/www/dnsdist

Nginx

Wenn Sie Nginx verwenden, dann

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

Fügen Sie die folgenden Zeilen in die Datei ein.

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

      root /var/www/dnsdist/;

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

Speichern und schließen Sie die Datei. Erstellen Sie dann das Web-Root-Verzeichnis.

sudo mkdir -p /var/www/dnsdist

Legen Sie www-data (Nginx-Benutzer) als Eigentümer des Webstamms fest.

sudo chown www-data:www-data /var/www/dnsdist -R

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 doh.example.com -w /var/www/dnsdist

Schritt 4:DoH in DNSdist aktivieren

Bearbeiten Sie die DNSdist-Konfigurationsdatei.

sudo nano /etc/dnsdist/dnsdist.conf

Fügen Sie die folgenden Zeilen in die Datei ein.

-- allow query from all IP addresses
addACL('0.0.0.0/0')

-- add a DoH resolver listening on port 443 of all interfaces
addDOHLocal("0.0.0.0:443", "/etc/letsencrypt/live/doh.example.com/fullchain.pem", "/etc/letsencrypt/live/doh.example.com/privkey.pem", { "/" }, { doTCP=true, reusePort=true, tcpFastOpenSize=0 })

-- downstream resolver
newServer({address="127.0.0.1:53",qps=5, name="resolver1"})

Speichern und schließen Sie die Datei. DNSdist wird als _dnsdist ausgeführt user, also müssen wir den _dnsdist angeben Benutzerberechtigung zum Lesen des TLS-Zertifikats mit den folgenden Befehlen.

sudo apt install acl

sudo setfacl -R -m u:_dnsdist:rx /etc/letsencrypt/

Überprüfen Sie dann die Syntax der Konfigurationsdatei.

sudo dnsdist --check-config

Wenn die Syntax in Ordnung ist, starten Sie DNSdist neu.

sudo systemctl restart dnsdist

Beachten Sie, dass DNSdist nicht neu gestartet werden kann, wenn ein Webserver TCP-Port 443 überwacht. Sie können den Webserver vorübergehend stoppen. Ich werde am Ende dieses Artikels erklären, wie man den Webserver und DNSdist dazu bringt, den TCP-Port 443 gleichzeitig zu verwenden.

Schritt 5:Konfigurieren Sie DoH im Firefox-Webbrowser

Gehen Sie zu Einstellungen -> Allgemein und scrollen Sie nach unten, um die Netzwerkeinstellungen zu konfigurieren . Aktivieren Sie DNS über HTTPS und richten Sie Ihren eigenen DoH-Resolver ein.

Wir können dann die DoH-Konfigurationen feinabstimmen, indem wir zu about:config gehen Registerkarte in Firefox.

network.trr.mode

Standardmäßig ist der network.trr.mode Parameter in Firefox ist auf 2 gesetzt , was bedeutet, wenn die DoH-Abfrage fehlschlägt, leitet Firefox die DNS-Abfrage an das Hostsystem weiter. Ich möchte immer den DoH-Resolver verwenden, also ändern Sie den network.trr.mode bis 3 Der Host-Resolver wird also nicht verwendet. Auf diese Weise können wir auf einfache Weise testen, ob Ihr DoH-Resolver funktioniert.

network.trr.allow-rfc1918

Dies wird auf false gesetzt standardmäßig, d. h. wenn die DNS-Antwort private IP-Adressen enthält, wird sie als falsche Antwort angesehen, die nicht verwendet wird. Wenn Sie die Antwortrichtlinienzone in BIND verwenden, haben Sie wahrscheinlich einige Hostnamen, die auf private IP-Adressen verweisen, dann setzen Sie diesen Wert auf true .

network.trr.bootstrapAddress

Firefox muss die IP-Adresse des DoH-Resolvers nachschlagen, um DNS-Anfragen zu senden. Sie können die IP-Adresse in dieses Feld eingeben, um diese anfängliche Abfrage zu vermeiden.

Testen

Geben Sie nun einen Domainnamen wie linuxbabe.com ein in der Firefox-Adressleiste. Wenn die Webseite normal geladen wird, ist dies ein gutes Zeichen dafür, dass Ihr DoH-Resolver funktioniert. Gehen Sie dann zur Terminalkonsole Ihres DNS-Servers und überprüfen Sie die DNS-Abfrageprotokolle. Ich verwende BIND, also gebe ich den folgenden Befehl ein, um das DNS-Abfrageprotokoll zu überprüfen.

sudo journalctl -eu bind9

Wie Sie dem BIND-Protokoll unten entnehmen können, hat Firefox die folgenden Domänen abgefragt.

  • www.linuxbabe.com :meine Website
  • fonts.gstatic.com :Dies dient Google Fonts auf meiner Website
  • cdn.shareaholic.net :ein Sharing-Widget auf meiner Website
  • newsletter.linuxbabe.com :meine selbst gehostete E-Mail-Marketing-Plattform.
  • translate.google.com :das Google Übersetzer-Widget auf meiner Website

Das obige Abfrageprotokoll sagt mir, dass mein DNS-über-HTTPS-Resolver funktioniert. Wenn ich den BIND-Resolver stoppe (sudo systemctl stop named ), sagt mir Firefox, dass es diese Seite nicht finden kann. Und wenn ich BIND starte, lädt die Webseite erneut.

Schritt 6:Konfigurieren Sie den DoH-Client auf dem Debian-Desktop

Ich weiß, dass es unter Linux 3 Open-Source-DNS-Clients gibt, die verschlüsseltes DNS unterstützen.

  • systemd-aufgelöst
  • stummelig
  • dnscrypt-proxy

Derzeit dnscrypt-proxy (Version 2.x) ist die beste DoH-Client-Implementierung unter Linux, also werde ich Ihnen zeigen, wie man sie benutzt. Führen Sie den folgenden Befehl aus, um dnscrypt-proxy zu installieren auf Ihrem Debian-Desktop.

sudo apt install dnscrypt-proxy

Es wird automatisch gestartet, wie Sie sehen können mit:

sudo systemctl status dnscrypt-proxy

Wenn es nicht gestartet wurde, können Sie den folgenden Befehl ausführen, um es zu starten.

sudo systemctl enable dnscrypt-proxy --now

Überprüfen Sie die Abhöradresse.

sudo ss -lnptu | grep dnscrypt-proxy

Auf meinem Computer lauscht dnscrypt-proxy auf 127.0.2.1:53 . Es gibt einen weiteren systemd-Dienst (dnscrypt-proxy-resolvconf.service ) installiert von dnscrypt-proxy,

systemctl status dnscrypt-proxy-resolvconf

Dies ist ein Dienst, der 127.0.2.1 festlegt als Resolver auf Ihrem Computer. Sie können den aktuellen DNS-Resolver für Ihren Computer überprüfen mit:

cat /etc/resolv.conf

Standardmäßig verwendet dnscrypt-proxy Clouldflare als Upstream-DoH-Resolver. Um Ihren eigenen DoH-Resolver zu verwenden, bearbeiten Sie die Konfigurationsdatei.

sudo nano /etc/dnscrypt-proxy/dnscrypt-proxy.toml

Suchen Sie die folgende Zeile

server_names = ['cloudflare']

Ändern Sie ihn in Ihren DoH-Resolver-Hostnamen. Beachten Sie, dass die Position der Parameter wichtig ist. Sie sollten die server_names nicht angeben Parameter an anderen Stellen in dieser Datei.

server_names = ['doh.example.com']

Kommentieren Sie dann [sources] aus Abschnitt.

#[sources]
#  [sources.'public-resolvers']
#  url = 'https://download.dnscrypt.info/resolvers-list/v2/public-resolvers.md'
#  cache_file = '/var/cache/dnscrypt-proxy/public-resolvers.md'
#  minisign_key = 'RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3'
#  refresh_delay = 72
#  prefix = ''

Wir müssen unseren eigenen DoH-Resolver wie unten am Ende dieser Datei hinzufügen.

[static]  
  [static.'doh.example.com']
  stamp = 'sdns://AgUAAAAAAAAAAAAOZG5zLmdvb2dsZS5jb20NL2V4cGVyaW1lbnRhbA'

Der Stempel enthält Ihren DoH-Resolver-Hostnamen, Ihre IP-Adresse und Ihren Abfragepfad. Um Ihren eigenen Stempel zu erhalten, verwenden Sie den Online-DNS-Stempelrechner. Wählen Sie DNS-over-HTTPS als Protokoll und geben Sie die IP-Adresse, den Hostnamen und den Abfragepfad ein. Wenn Sie diesem Tutorial folgen, um Ihren eigenen DoH-Resolver einzurichten, sollte der Pfad nur auf / gesetzt werden . Wenn Sie DNSSEC auf Ihrem Resolver nicht aktiviert haben, deaktivieren Sie das Kontrollkästchen DNSSEC.

Nachdem Sie Ihren DNS-Stempel hinzugefügt haben, speichern und schließen Sie die Datei. Starten Sie dann dnscrypt-proxy neu .

sudo systemctl restart dnscrypt-proxy

Überprüfen Sie seinen Status. Stellen Sie sicher, dass es ausgeführt wird.

systemctl status dnscrypt-proxy

Jetzt können Sie testen, ob dnscrypt-proxy funktioniert.

Wenn Sie Ihren DNS-über-HTTPS-Resolver nicht weltweit veröffentlichen möchten, können Sie den DNS-A-Eintrag Ihres DoH-Resolver-Hostnamens löschen, da dnscrypt-proxy die IP-Adresse im DNS-Stempel enthält.

DoH auf iOS konfigurieren

iOS unterstützt DNS über HTTPS seit iOS 14. Es gibt jedoch keine einfache Konfigurationsoption auf iOS, um den DoH-Resolver einzustellen. Sie müssen eine .mobileconfig generieren Datei und installieren Sie sie auf iOS. Es ist etwas kompliziert, eine signierte iOS .mobileconfig zu generieren Datei.

Wenn Ihr DoH-Resolver nicht öffentlich verwendet wird, können Sie eine einfache unsignierte Datei generieren. Verwenden Sie einen Texteditor, um eine Datei mit .mobileconfig zu erstellen Verlängerung. Kopieren Sie den folgenden Text und fügen Sie ihn ein. Ersetzen Sie die IP-Adresse und die Server-URL.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>PayloadContent</key>
        <array>
                <dict>
                        <key>DNSSettings</key>
                        <dict>
                                <key>DNSProtocol</key>
                                <string>HTTPS</string>
                                <key>ServerAddresses</key>
                                <array>
                                        <string>12.34.56.78</string>
                                </array>
                                <key>ServerURL</key>
                                <string>https://doh.example.com/</string>
                        </dict>
                        <key>PayloadDescription</key>
                        <string>Configures device to use Encrypted DNS over HTTPS</string>
                        <key>PayloadDisplayName</key>
                        <string>My own DNS over HTTPS Resolver</string>
                        <key>PayloadIdentifier</key>
                        <string>com.apple.dnsSettings.managed.9d6e5fdf-e404-4f34-ae94-27ed2f636ac4</string>
                        <key>PayloadType</key>
                        <string>com.apple.dnsSettings.managed</string>
                        <key>PayloadUUID</key>
                        <string>35d5c8a0-afa6-4b36-a9fe-099a997b44ad</string>
                        <key>PayloadVersion</key>
                        <integer>1</integer>
                        <key>ProhibitDisablement</key>
                        <false/>
                </dict>
        </array>
        <key>PayloadDescription</key>
        <string>Adds self-hosted DoH resolver to Big Sur and iOS 14 based systems</string>
        <key>PayloadDisplayName</key>
        <string>My own DNS over HTTPS</string>
        <key>PayloadIdentifier</key>
        <string>com.example.doh</string>
        <key>PayloadRemovalDisallowed</key>
        <false/>
        <key>PayloadType</key>
        <string>Configuration</string>
        <key>PayloadUUID</key>
        <string>A4475135-633A-4F15-A79B-BE15093DC97A</string>
        <key>PayloadVersion</key>
        <integer>1</integer>
</dict>
</plist>

Speichern und schließen Sie die Datei. Anschließend können Sie die Datei als E-Mail-Anhang an Ihr iOS senden. Öffnen Sie die E-Mail auf iOS und tippen Sie auf den Anhang, um die Konfigurationsdatei herunterzuladen. Gehen Sie danach zu iOS Settings -> Profile Downloaded . Sie werden aufgefordert, das Profil zu installieren.

Tippen Sie auf die Schaltfläche Installieren und geben Sie Ihr iOS-Passwort ein, um es zu installieren. Tippen Sie erneut auf die Schaltfläche Installieren.

Gehen Sie nach der Installation zu iOS Settings -> VPN & Network . Scrollen Sie nach unten, um den DNS-Resolver für Ihr iOS-System auszuwählen. Beachten Sie, dass dieser DoH-Resolver den DNS-Resolver überschreibt, der von einem VPN wie ProtonVPN bereitgestellt wird. Ihr iOS verwendet immer Ihren DoH-Resolver.

Wenn Sie jemals die .mobileconfig entfernen möchten Datei von iOS, gehen Sie zu Settings -> General -> Profile .

Machen Sie DNSdist und Webserver gleichzeitig Port 443 verwenden

Ein DNS-über-HTTPS-Resolver muss sich an Port 443 binden. Wenn Apache/Nginx bereits Port 443 überwacht, kann DNSdist sich nicht an Port 443 binden. Normalerweise kann ein Port nur von einem Prozess verwendet werden. Wir können jedoch HAproxy (High Availability Proxy) und SNI (Server Name Indication) verwenden, damit DNSdist und Apache/Nginx gleichzeitig Port 443 verwenden.

DNSdist-Konfiguration

Bearbeiten Sie die DNSdist-Konfigurationsdatei.

sudo nano /etc/dnsdist/dnsdist.conf

Ändern Sie die DoH-Listening-Adresse in 127.0.0.1 .

addDOHLocal("127.0.0.1:443", "/etc/letsencrypt/live/doh.example.com/fullchain.pem", "/etc/letsencrypt/live/doh.example.com/privkey.pem", { "/" }, { doTCP=true, reusePort=true, tcpFastOpenSize=0 })

Speichern und schließen Sie die Datei. Starten Sie dann DNSdist neu.

sudo systemctl restart dnsdist

Nginx-Konfiguration

Wenn Sie Nginx verwenden, bearbeiten Sie die Serverblockdatei.

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

Suchen Sie im SSL-Serverblock die folgende Direktive.

listen 443 ssl;

Ändern Sie es in

listen 127.0.0.2:443 ssl;

Dieses Mal lassen wir es auf 127.0.0.2:443 lauschen weil 127.0.0.1:443 wird bereits von DNSdist belegt. Speichern und schließen Sie die Datei. Die Hauptkonfigurationsdatei von Nginx /etc/nginx/nginx.conf und den Standardserverblock /etc/nginx/sites-enabled/default könnte einen standardmäßigen virtuellen Host enthalten, der auf 443 lauscht, daher müssen Sie diese Datei möglicherweise auch bearbeiten.

Starten Sie dann Nginx neu.

sudo systemctl restart nginx

Apache-Konfiguration

Wenn Sie den Apache-Webserver verwenden, bearbeiten Sie Ihre virtuelle Hostdatei.

sudo nano /etc/apache2/sites-enabled/example.com.conf

Ändern Sie im virtuellen SSL-Host

<VirtualHost *:443>

An

<VirtualHost 127.0.0.2:443>

Dieses Mal lassen wir es auf 127.0.0.2:443 lauschen weil 127.0.0.1:443 wird bereits von DNSdist belegt. Speichern und schließen Sie die Datei. Bearbeiten Sie dann die /etc/apache2/ports.conf Datei.

sudo nano /etc/apache2/ports.conf

Ändern

Listen 443

An

Listen 127.0.0.2:443

Speichern und schließen Sie die Datei. Starten Sie Apache neu.

sudo systemctl restart apache2

HAProxy-Konfiguration

Installieren Sie jetzt HAproxy.

sudo apt install haproxy

Starten Sie HAProxy

sudo systemctl start haproxy

Konfigurationsdatei bearbeiten.

sudo nano /etc/haproxy/haproxy.cfg

Wenn Sie Nginx verwenden , kopieren Sie die folgenden Zeilen und fügen Sie sie am Ende der Datei ein. Ersetzen Sie 12.34.56.78 mit der öffentlichen IP-Adresse Ihres Servers. Ersetzen Sie doh.example.com mit dem von DNSdist verwendeten Domänennamen und www.example.com mit dem von Ihrem Webserver verwendeten Domainnamen.

frontend https
   bind 12.34.56.78:443
   mode tcp
   tcp-request inspect-delay 5s
   tcp-request content accept if { req_ssl_hello_type 1 }

   use_backend dnsdist if { req_ssl_sni -i doh.example.com }
   use_backend nginx if { req_ssl_sni -i www.example.com }
   use_backend nginx if { req_ssl_sni -i example.com }

   default_backend dnsdist

backend dnsdist
   mode tcp
   option ssl-hello-chk
   server dnsdist 127.0.0.1:443

backend nginx
   mode tcp
   option ssl-hello-chk
   server nginx 127.0.0.2:443 check

Wenn Sie Apache verwenden , kopieren Sie die folgenden Zeilen und fügen Sie sie am Ende der Datei ein. Ersetzen Sie 12.34.56.78 mit der öffentlichen IP-Adresse Ihres Servers. Ersetzen Sie doh.example.com mit dem von DNSdist verwendeten Domänennamen und www.example.com mit dem von Ihrem Webserver verwendeten Domainnamen.

frontend https
   bind 12.34.56.78:443
   mode tcp
   tcp-request inspect-delay 5s
   tcp-request content accept if { req_ssl_hello_type 1 }

   use_backend dnsdist if { req_ssl_sni -i doh.example.com }
   use_backend apache if { req_ssl_sni -i www.example.com }
   use_backend apache if { req_ssl_sni -i example.com }

   default_backend dnsdist

backend dnsdist
   mode tcp
   option ssl-hello-chk
   server dnsdist 127.0.0.1:443

backend apache
    mode tcp
    option ssl-hello-chk
    server apache 127.0.0.2:443 check

Speichern und schließen Sie die Datei. Starten Sie dann HAproxy neu.

sudo systemctl restart haproxy

In der obigen Konfiguration haben wir die SNI-Funktion (Server Name Indication) in TLS verwendet, um VPN-Verkehr und normalen HTTPS-Verkehr zu unterscheiden.

  • Wenn doh.example.com ist im TLS-Client Hallo, HAProxy leitet Datenverkehr an das DNSdist-Backend um.
  • Wenn www.example.com befindet sich im TLS-Client. Hallo, HAProxy leitet den Datenverkehr an das Apache/nginx-Backend um.
  • Wenn der Client den Servernamen nicht in TLS Client Hello angibt, verwendet HAproxy das Standard-Backend (DNSdist).

Sie können dieses Setup mit dem openssl testen Werkzeug. Führen Sie zuerst den folgenden Befehl mehrmals aus.

echo | openssl s_client -connect your-server-IP:443 | grep subject

Wir haben im obigen Befehl keinen Servernamen angegeben, daher leitet HAproxy die Anfrage immer an das Standard-Backend (DNSdist) weiter und sein Zertifikat wird an den Client gesendet. Führen Sie als Nächstes die folgenden beiden Befehle aus.

echo | openssl s_client -servername www.example.com -connect your-server-IP:443 | grep subject

echo | openssl s_client -servername doh.example.com -connect your-server-IP:443 | grep subject

Jetzt haben wir den Servernamen in den Befehlen angegeben, damit HAproxy Anfragen gemäß den von uns definierten SNI-Regeln weiterleitet.

Wenn Sie das Let’s Encrypt-Zertifikat für Ihre Website erneuern, wird empfohlen, dass Sie den http-01 verwenden Challenge anstelle von tls-alpn-01 herausfordern, da HAproxy auf Port 443 der öffentlichen IP-Adresse lauscht, sodass es den Erneuerungsprozess stören kann.

sudo certbot renew --preferred-challenges http-01

Debian
  1. So richten Sie eine Firewall mit UFW unter Debian 10 ein

  2. So richten Sie eine Firewall mit UFW unter Debian 9 ein

  3. So stellen Sie einen dynamischen DNS-Server mit Docker unter Debian 10 bereit

  4. So richten Sie einen Mailserver mit PostfixAdmin unter Debian 11 ein

  5. Richten Sie einen Mailserver mit PostfixAdmin auf Debian 9 ein

Richten Sie Ihren eigenen DNS-Resolver auf Debian 10 Buster mit BIND9 ein

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

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

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 richten Sie eine Firewall mit UFW unter Debian 11 ein