GNU/Linux >> Znalost Linux >  >> Ubuntu

Nastavte DNS over HTTPS (DoH) Resolver na Ubuntu pomocí DNSdist

Tento tutoriál vám ukáže, jak nastavit vlastní DNS přes HTTPS (DoH)překladač na Ubuntu s DNSdist, takže vaše dotazy DNS mohou být šifrovány a chráněny před zvědavýma očima.

Co je to DNS přes HTTPS a proč je to důležité

DNS (Domain Name System) je zodpovědný za překlad doménových jmen na IP adresy. Byl navržen v roce 1987 bez ohledu na bezpečnost nebo soukromí. Ve výchozím nastavení nejsou dotazy DNS šifrovány. Jsou odesílány v prostém textu na drátě a mohou být využívány středními entitami. Například Great Firewall of China (GFW ) používá techniku ​​zvanou Jed mezipaměti DNS cenzurovat čínský internet. (Používají také jiné metody, které jsou nad rámec tohoto článku.)

GFW kontroluje každý dotaz DNS odeslaný na server DNS mimo Čínu. Vzhledem k tomu, že protokol DNS ve formátu prostého textu je založen na UDP, což je protokol bez připojení, GFW může podvrhnout IP klienta i IP server. Když GFW nalezne název domény na svém seznamu blokovaných, změní odpověď DNS. Pokud chce například čínský uživatel internetu navštívit google.com, GFW vrátí IP adresu umístěnou v Číně namísto skutečné IP adresy Google do DNS resolveru uživatele. Potom DNS resolver vrátí falešnou IP adresu do počítače uživatele, takže uživatel nemůže navštívit google.com.

HTTPS je standardní způsob šifrování webových stránek HTTP ve formátu prostého textu. Díky DNS over HTTPS (DoH) budou vaše dotazy DNS šifrovány, takže vaše dotazy DNS neuvidí žádná třetí strana.

Proč spustit svůj vlastní DoH Resolver?

Některé veřejné překladače DNS již existují, například 1.1.1.1 a 9.9.9.9 které podporují DNS přes HTTPS, takže je můžete použít, pokud nemáte dovednosti nebo čas provozovat vlastní. Počínaje Firefoxem verze 61 můžete v nastavení prohlížeče povolit DNS přes HTTPS, což je velký pokrok pro zabezpečení internetu a soukromí. Firefox ve výchozím nastavení používá překladače Cloudflare (1.1.1.1). Někteří lidé však tvrdí, že to umožňuje Cloudflare shromažďovat informace o uživatelích Firefoxu. Zdá se, že mají větší důvěru ve své ISP než Cloudflare. Ale myslím, že pokud jste paranoidní ohledně soukromí, měli byste provozovat svůj vlastní DoH resolver, aby vás Cloudflare ani váš ISP nemohli špehovat.

DoH versus DoT

Kromě DNS přes HTTPS existuje další protokol, jehož cílem je také šifrovat dotazy DNS. Říká se tomu DNS přes TLS (Tečka). Dříve jsem psal průvodce používáním DNS přes TLS na ploše Ubuntu, ale nyní přecházím na DNS přes HTTPS.

Pro lidi, kteří žijí v zemích se silnou cenzurou internetu, jako je Čína, je výhodnější používat DoH.

  • DoT funguje na portu TCP 853 , kterou lze snadno zablokovat národním firewallem.
  • DoH funguje na portu TCP 443 , což je standardní port pro webové stránky HTTPS, což velmi ztěžuje blokování DoH, protože pokud je zablokován port TCP 443, budou zablokovány také téměř všechny webové stránky HTTPS.

Můj resolver DoH běží na VPS (virtuálním soukromém serveru) umístěném mimo Čínu a Great Firewall of China nemůže zachytit mé dotazy DNS. Mohu dokonce skrýt IP adresu svého překladače DoH za Cloudflare CDN (Content Delivery Network).

Další výhodou DoH je, že umožňuje webovým aplikacím přistupovat k informacím DNS prostřednictvím existujících rozhraní API prohlížeče, takže není potřeba žádný stub resolver.

Podpora DoH v hlavních DNS Resolvers

  • BIND bude podporovat DoH ve verzi 9.17, která je stále ve vývoji. Úložiště Ubuntu 20.04 a 21.04 se dodává s BIND 9.16.
  • Uzel řešič podporuje DoH od verze 4.0.0. Aktuální nejnovější verze je 5.11. Má oficiální úložiště pro Debian, Ubuntu, CentOS, Fedora.
  • Bez závazků podporuje DoH od verze 1.12.0.
  • Rekurzor PowerDNS momentálně nepodporuje DoH.

Ve skutečnosti raději spouštím DoH resolver s DNSdist , který přidal podporu DoH ve verzi 1.4.0. Aktuální nejnovější verze je 1.5. Má oficiální úložiště pro Debian, Raspbian, Ubuntu a CentOS. DNSdist je DNS load balancer, který dokáže předávat DNS dotazy backendovému DNS resolveru, takže bez ohledu na to, jaký DNS resolver používáte, můžete DNSdist použít ke spuštění vlastního serveru DoH. DNSdist je vyvinut týmem PowerDNS.

Předpoklady

Předpokládá se, že na vašem serveru Ubuntu běží DNS resolver. Můžete použít jakýkoli DNS resolver (BIND, Knot resolver, Unbound…), já osobně používám BIND.

  • Nastavte si svůj vlastní BIND9 DNS Resolver na Ubuntu 16.04/18.04
  • Nastavte si svůj vlastní BIND9 DNS Resolver na Ubuntu 20.04

Jakmile bude váš DNS resolver spuštěn a spuštěn, postupujte podle níže uvedených pokynů.

Krok 1:Nainstalujte DNSdist na server Ubuntu

Pokud používáte Ubuntu bez LTS , musíte nainstalovat dnsdist z výchozího úložiště (sudo apt install dnsdist ). Pokud používáte Ubuntu LTS , doporučujeme nainstalovat DNSdist z upstream úložiště, takže budete mít nejnovější stabilní verzi. Nejprve musíte vytvořit soubor se seznamem zdrojů pro DNSdist.

Ubuntu 20.04

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

Ubuntu 18.04

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

Ubuntu 16.04

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

Dále vytvoříme soubor předvoleb pro DNSdist, abychom balíček připnuli, takže nebudeme omylem instalovat DNSdist z jiného úložiště.

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

Přidejte do souboru následující řádky.

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

Uložte a zavřete soubor. Poté spusťte následující příkaz pro import veřejného klíče PowerDNS, aby správce balíčků APT mohl ověřit integritu softwarových balíčků stažených z tohoto úložiště.

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

Dále aktualizujte seznam úložišť a nainstalujte DNSdist.

sudo apt update

sudo apt install dnsdist

Ve výchozím nastavení se DNSdist pokouší navázat na port 53. Protože máte existující DNS resolver jako BIND naslouchající na portu 53, dnsdist.service by se nepodařilo spustit.

Protože právě nasazujeme překladač DoH a nestaráme se o vyvažování zátěže DNS, můžeme nakonfigurovat DNSdist tak, aby naslouchal na jiném portu. Upravte konfigurační soubor DNSdist.

sudo nano /etc/dnsdist/dnsdist.conf

V tomto souboru není žádný obsah. Prozatím jednoduše přidejte do tohoto souboru následující řádek, takže DNSdist bude naslouchat na TCP a UDP portu 5353, namísto portu 53.

setLocal("127.0.0.1:5353")

Uložte a zavřete soubor. Poté restartujte DNSdist.

sudo systemctl restart dnsdist

Zkontrolujte jeho stav.

systemctl status dnsdist

Měl by být aktivní (spuštěný) .

Krok 2:Instalace klienta Let’s Encrypt Client (Certbot) na server Ubuntu

DNS over HTTPS vyžaduje instalaci certifikátu TLS na straně serveru. Získáme a nainstalujeme certifikát Let’s Encrypt. Výhodou použití certifikátu Let’s Encrypt je, že je zdarma, snáze se nastavuje a je důvěryhodný pro klientský software.

Spuštěním následujících příkazů nainstalujte klienta Let’s Encrypt (certbot) z výchozího úložiště Ubuntu.

sudo apt install certbot

Chcete-li zkontrolovat číslo verze, spusťte

certbot --version

Ukázkový výstup:

certbot 0.40.0

Krok 3:Získejte důvěryhodný certifikát TLS od společnosti Let’s Encrypt

Doporučuji používat standalone nebo webroot plugin pro získání certifikátu TLS pro dnsdist.

Samostatný plugin

Pokud na vašem serveru Ubuntu neběží žádný webový server, můžete k získání certifikátu TLS z Let’s Encrypt použít samostatný plugin. Vytvořte záznam DNS A pro subdoménu (doh.example.com) a poté spusťte následující příkaz.

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

Kde:

  • certonly :Získejte certifikát, ale neinstalujte jej.
  • --standalone :K získání certifikátu použijte samostatný plugin
  • --preferred-challenges http :Proveďte výzvu http-01 k ověření naší domény, která bude používat port 80.
  • --agree-tos :Souhlasíte s podmínkami služby Let’s Encrypt.
  • --email :E-mailová adresa se používá pro registraci a obnovení účtu.
  • -d :Zadejte název své domény.

Jak můžete vidět na následujícím snímku obrazovky, úspěšně jsem získal certifikát.

Použití pluginu webroot

Pokud má váš server Ubuntu webový server naslouchající na portu 80 a 443, pak je dobré použít k získání certifikátu plugin webroot, protože plugin webroot funguje téměř s každým webovým serverem a certifikát nemusíme instalovat. na webovém serveru.

Nejprve musíte vytvořit virtuálního hostitele pro doh.example.com.

Apache

Pokud používáte Apache, pak

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

A vložte do souboru následující řádky.

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

        DocumentRoot /var/www/dnsdist
</VirtualHost>

Uložte a zavřete soubor. Poté vytvořte kořenový webový adresář.

sudo mkdir /var/www/dnsdist

Nastavte www-data (uživatel Apache) jako vlastníka webového kořenového adresáře.

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

Povolit tohoto virtuálního hostitele.

sudo a2ensite doh.example.com

Znovu načtěte Apache, aby se změny projevily.

sudo systemctl reload apache2

Jakmile je virtuální hostitel vytvořen a povolen, spusťte následující příkaz a získejte certifikát Let’s Encrypt pomocí pluginu webroot.

sudo certbot certonly --webroot --agree-tos --email [email protected] -d doh.example.com -w /var/www/dnsdist

Nginx

Pokud používáte Nginx, pak

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

Vložte následující řádky do souboru.

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

      root /var/www/dnsdist/;

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

Uložte a zavřete soubor. Poté vytvořte kořenový webový adresář.

sudo mkdir -p /var/www/dnsdist

Nastavte www-data (uživatel Nginx) jako vlastníka webového kořenového adresáře.

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

Znovu načtěte Nginx, aby se změny projevily.

sudo systemctl reload nginx

Jakmile je virtuální hostitel vytvořen a povolen, spusťte následující příkaz a získejte certifikát Let’s Encrypt pomocí pluginu webroot.

sudo certbot certonly --webroot --agree-tos --email [email protected] -d doh.example.com -w /var/www/dnsdist

Krok 4:Povolte DoH v DNSdist

Upravte konfigurační soubor DNSdist.

sudo nano /etc/dnsdist/dnsdist.conf

Přidejte do souboru následující řádky.

-- 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"})

Uložte a zavřete soubor. DNSdist běží jako _dnsdist uživatel, takže musíme zadat _dnsdist oprávnění uživatele číst certifikát TLS pomocí následujících příkazů.

sudo apt install acl

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

Poté zkontrolujte syntaxi konfiguračního souboru.

sudo dnsdist --check-config

Pokud je syntaxe v pořádku, restartujte DNSdist.

sudo systemctl restart dnsdist

Všimněte si, že pokud webový server naslouchá na TCP portu 443, DNSdist se nerestartuje. Webový server můžete dočasně zastavit. Na konci tohoto článku vysvětlím, jak přimět webový server a DNSdist používat TCP port 443 současně.

Když Certbot obnoví certifikát TLS, musíte znovu udělit oprávnění, ale můžete přidat příkaz do souboru crontab.

sudo crontab -e

Takhle:

@daily certbot renew --quiet && setfacl -R -m u:_dnsdist:rx /etc/letsencrypt/

Krok 5:Nakonfigurujte DoH ve webovém prohlížeči Firefox

Přejděte na Předvolby -> Obecné a přejděte dolů a nakonfigurujte Nastavení sítě . Povolte DNS přes HTTPS a nastavte si vlastní překladač DoH.

Poté můžeme doladit konfigurace DoH přechodem na about:config ve Firefoxu.

network.trr.mode

Ve výchozím nastavení network.trr.mode parametr ve Firefoxu je nastaven na 2 , což znamená, že pokud dotaz DoH selže, Firefox předá DNS dotaz hostitelskému systému. Chci vždy používat překladač DoH, takže změňte network.trr.mode3 takže hostitelský resolver nebude použit. To nám umožňuje mít snadný způsob, jak otestovat, zda váš překladač DoH funguje.

network.trr.allow-rfc1918

Toto je nastaveno na false ve výchozím nastavení, což znamená, že pokud odpověď DNS obsahuje soukromé IP adresy, bude považována za chybnou odpověď, která nebude použita. Pokud v BIND používáte zónu zásad odezvy, pravděpodobně máte některé názvy hostitelů směřující na soukromé IP adresy, pak nastavte tuto hodnotu na true .

síť.trr.bootstrapAddress

Firefox potřebuje vyhledat IP adresu překladače DoH, aby mohl odesílat dotazy DNS. Do tohoto pole můžete zadat IP adresu, abyste odstranili tento počáteční dotaz.

Testování

Nyní zadejte název domény jako linuxbabe.com v adresním řádku Firefoxu. Pokud se webová stránka načítá normálně, je to dobré znamení, že váš překladač DoH funguje. Poté přejděte do terminálové konzoly vašeho serveru DNS a zkontrolujte protokoly dotazů DNS. Používám BIND, takže zadám následující příkaz pro kontrolu protokolu dotazů DNS.

Ubuntu 20.04

sudo journalctl -eu named

Ubuntu 18.04

sudo journalctl -eu bind9

Jak můžete vidět z níže uvedeného protokolu BIND, Firefox se dotazoval na následující domény.

  • www.linuxbabe.com :můj web
  • fonts.gstatic.com :Toto zobrazuje písma Google na mém webu
  • cdn.shareaholic.net :widget pro sdílení na mém webu
  • newsletter.linuxbabe.com :moje vlastní e-mailová marketingová platforma.
  • translate.google.com :widget Google Translate na mém webu

Výše uvedený protokol dotazů mi říká, že můj překladač DNS přes HTTPS funguje. Pokud zastavím resolver BIND (sudo systemctl stop named ), Firefox mi říká, že nemůže najít tento web. A když spustím BIND, webová stránka se znovu načte.

Krok 6:Konfigurace klienta DoH na ploše Ubuntu

Vím, že v systému Linux existují 3 klienti DNS s otevřeným zdrojovým kódem, kteří podporují šifrované DNS.

  • vyřešeno systémem
  • stubby
  • dnscrypt-proxy

Aktuálně dnscrypt-proxy je nejlepší implementace klienta DoH na Linuxu, takže vám ukážu, jak ji používat. Spuštěním následujícího příkazu nainstalujte dnscrypt-proxy na ploše Ubuntu.

sudo apt install dnscrypt-proxy

Spustí se automaticky, jak můžete vidět pomocí:

sudo systemctl status dnscrypt-proxy

Pokud se nespustil, můžete jej spustit spuštěním následujícího příkazu.

sudo systemctl enable dnscrypt-proxy --now

Zkontrolujte adresu pro poslech.

sudo ss -lnptu | grep dnscrypt-proxy

Na mém počítači dnscrypt-proxy naslouchá na 127.0.2.1:53 . Existuje další služba systemd (dnscrypt-proxy-resolvconf.service ) nainstalovaný dnscrypt-proxy,

systemctl status dnscrypt-proxy-resolvconf

Toto je služba, která nastavuje 127.0.2.1 jako překladač na vašem počítači. Aktuální překladač DNS pro váš počítač můžete zkontrolovat pomocí:

cat /etc/resolv.conf

Ve výchozím nastavení dnscrypt-proxy používá Clouldflare jako upstream DoH resolver. Chcete-li použít svůj vlastní překladač DoH, upravte konfigurační soubor.

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

Najděte následující řádek

server_names = ['cloudflare']

Změňte jej na název hostitele překladače DoH. Všimněte si, že umístění parametrů je důležité. Neměli byste vkládat server_names parametr na jiných místech v tomto souboru.

server_names = ['doh.example.com']

Poté okomentujte [sources] sekce.

#[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 = ''

Potřebujeme přidat náš vlastní DoH resolver jako níže v dolní části tohoto souboru.

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

Razítko obsahuje název hostitele překladače DoH, IP adresu a cestu dotazu. Chcete-li získat vlastní razítko, použijte online kalkulačku razítek DNS. Jako protokol vyberte DNS-over-HTTPS a zadejte IP adresu, název hostitele a cestu dotazu. Pokud se budete řídit tímto návodem k nastavení vlastního překladače DoH, cesta by měla být nastavena pouze na / . Pokud jste na svém resolveru nepovolili DNSSEC, zrušte zaškrtnutí políčka DNSSEC.

Jakmile přidáte razítko DNS, uložte a zavřete soubor. Poté restartujte dnscrypt-proxy .

sudo systemctl restart dnscrypt-proxy

Zkontrolujte jeho stav. Ujistěte se, že běží.

systemctl status dnscrypt-proxy

Nyní můžete otestovat, zda dnscrypt-proxy funguje.

Pokud nechcete světu publikovat svůj překladač DNS přes HTTPS, můžete odstranit záznam DNS A názvu hostitele překladače DoH, protože dnscrypt-proxy má IP adresu v razítku DNS.

Konfigurace DoH v systému iOS

iOS podporuje DNS přes HTTPS od iOS 14. V iOS však neexistuje jednoduchá možnost konfigurace, jak nastavit překladač DoH. Musíte vygenerovat .mobileconfig soubor a nainstalujte jej na iOS. Je trochu komplikované vygenerovat podepsaný iOS .mobileconfig soubor.

Pokud váš resolver DoH nebude používán veřejně, můžete vygenerovat jednoduchý nepodepsaný soubor. Pomocí textového editoru vytvořte soubor s .mobileconfig rozšíření. Zkopírujte a vložte následující text. Nahraďte IP adresu a URL serveru.

<?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>

Uložte a zavřete soubor. Poté můžete soubor odeslat jako přílohu e-mailu do vašeho iOS. Otevřete e-mail na iOS a klepnutím na přílohu stáhněte konfigurační soubor. Poté přejděte do iOS Settings -> Profile Downloaded . Zobrazí se výzva k instalaci profilu.

Klepněte na tlačítko Instalovat a zadejte heslo pro iOS pro instalaci. Znovu klepněte na tlačítko Instalovat.

Po instalaci přejděte do Settings iOS -> VPN & Network . Přejděte dolů a vyberte překladač DNS pro váš systém iOS. Všimněte si, že tento překladač DoH přepíše překladač DNS poskytovaný sítí VPN, jako je ProtonVPN. Váš iOS bude vždy používat váš překladač DoH.

Pokud někdy budete chtít odstranit .mobileconfig soubor z iOS, přejděte do Settings -> General -> Profile .

Nastavte DNSdist a webový server, aby používali port 443 současně

Překladač DNS přes HTTPS se musí vázat na port 443. Pokud již Apache/Nginx naslouchá na portu 443, DNSdist se nemůže vázat na port 443. Normálně může port používat pouze jeden proces. Můžeme však použít HAproxy (High Availability Proxy) a SNI (Indikace názvu serveru), aby DNSdist a Apache/Nginx používali port 443 současně.

Konfigurace DNSdist

Upravte konfigurační soubor DNSdist.

sudo nano /etc/dnsdist/dnsdist.conf

Změňte naslouchací adresu DoH na 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 })

Uložte a zavřete soubor. Poté restartujte DNSdist.

sudo systemctl restart dnsdist

Konfigurace Nginx

Pokud používáte Nginx, upravte soubor bloku serveru.

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

V bloku serveru SSL najděte následující direktivu.

listen 443 ssl;

Změňte jej na

listen 127.0.0.2:443 ssl;

Tentokrát to posloucháme na 127.0.0.2:443 protože 127.0.0.1:443 je již pořízen DNSdist. Uložte a zavřete soubor. Hlavní konfigurační soubor Nginx /etc/nginx/nginx.conf a výchozí blok serveru /etc/nginx/sites-enabled/default může obsahovat výchozí virtuální hostitel naslouchající na 443, takže možná budete muset upravit i tento soubor.

Poté restartujte Nginx.

sudo systemctl restart nginx

Konfigurace Apache

Pokud používáte webový server Apache, upravte soubor virtuálního hostitele.

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

Ve virtuálním hostiteli SSL změňte

<VirtualHost *:443>

Komu

<VirtualHost 127.0.0.2:443>

Tentokrát to posloucháme na 127.0.0.2:443 protože 127.0.0.1:443 je již pořízen DNSdist. Uložte a zavřete soubor. Poté upravte /etc/apache2/ports.conf soubor.

sudo nano /etc/apache2/ports.conf

Změnit

Listen 443

Komu

Listen 127.0.0.2:443

Uložte a zavřete soubor. Restartujte Apache.

sudo systemctl restart apache2

Konfigurace HAProxy

Nyní nainstalujte HAproxy.

sudo apt install haproxy

Spusťte HAProxy

sudo systemctl start haproxy

Upravit konfigurační soubor.

sudo nano /etc/haproxy/haproxy.cfg

Pokud používáte Nginx , zkopírujte a vložte následující řádky na konec souboru. Nahraďte 12.34.56.78 s veřejnou IP adresou vašeho serveru. Nahraďte doh.example.com s názvem domény používaný DNSdist a www.example.com s názvem domény používané vaším webovým serverem.

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

Pokud používáte Apache , zkopírujte a vložte následující řádky na konec souboru. Nahraďte 12.34.56.78 s veřejnou IP adresou vašeho serveru. Nahraďte doh.example.com s názvem domény používaný DNSdist a www.example.com s názvem domény používané vaším webovým serverem.

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

Uložte a zavřete soubor. Poté restartujte HAproxy.

sudo systemctl restart haproxy

Ve výše uvedené konfiguraci jsme použili funkci SNI (Server Name Indication) v TLS k rozlišení provozu VPN a běžného provozu HTTPS.

  • Když doh.example.com je v klientovi TLS Dobrý den, HAProxy přesměruje provoz na backend DNSdist.
  • Když www.example.com je v klientovi TLS Dobrý den, HAProxy přesměruje provoz na backend Apache/nginx.
  • Pokud klient neuvede název serveru v TLS Client Hello, pak HAproxy použije výchozí backend (DNSdist).

Toto nastavení můžete otestovat pomocí openssl nářadí. Nejprve spusťte následující příkaz několikrát.

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

Ve výše uvedeném příkazu jsme nespecifikovali název serveru, takže HAproxy vždy předá požadavek výchozímu backendu (DNSdist) a jeho certifikát bude odeslán klientovi. Dále spusťte následující dva příkazy.

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

Nyní jsme v příkazech zadali název serveru, takže HAproxy bude předávat požadavky podle pravidel SNI, která jsme definovali.

Při obnově certifikátu Let’s Encrypt pro váš web se doporučuje použít http-01 výzva namísto tls-alpn-01 problém, protože HAproxy naslouchá na portu 443 veřejné IP adresy, takže může rušit proces obnovy.

sudo certbot renew --preferred-challenges http-01

Ubuntu
  1. Jak nastavit bránu firewall s UFW na Ubuntu 18.04

  2. Jak nastavit Local DNS Resolver pomocí Dnsmasq na Ubuntu 20.04

  3. Jak nastavit Unbound DNS Resolver na Ubuntu 20.04

  1. Jak zabezpečit Nginx pomocí Lets Encrypt na Ubuntu 20.04 / 18.04

  2. Jak nastavit DNS Nameserver na Ubuntu 20.04

  3. Jak nastavit DNS Nameservery na Ubuntu 18.04

  1. Jak nastavit bránu firewall s UFW na Ubuntu 20.04

  2. Nastavte DNS over HTTPS (DoH) Resolver v Debianu pomocí DNSdist

  3. Nastavte si svůj vlastní DNS Resolver na Debian 10 Buster s BIND9