GNU/Linux >> Znalost Linux >  >> Ubuntu

Jak snadno nastavit DNS přes TLS Resolver s Nginx na Ubuntu

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

Co je to DNS přes TLS 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.

DNS over TLS znamená, že dotazy DNS jsou odesílány přes zabezpečené připojení šifrované pomocí TLS, stejné technologie, která šifruje provoz HTTP.

Proč provozovat svůj vlastní DoT Resolver?

Již existují některé veřejné překladače DNS, jako jsou 1.1.1.1 a 9.9.9.9, které podporují DNS přes TLS, takže je můžete použít, pokud nemáte dovednosti nebo čas na provozování vlastního. Někteří lidé však tvrdí, že to stále umožňuje velkým poskytovatelům služeb DNS shromažďovat informace o uživatelích. Zdá se, že více důvěřují svému ISP. Ale myslím, že pokud jste paranoidní ohledně soukromí, měli byste provozovat svůj vlastní DoT resolver, aby vás nemohli špehovat ani velcí poskytovatelé služeb DNS, ani váš ISP.

V současné době ne všechny DNS resolvery (BIND, Unbound, Knot resolver, PowerDNS recursor atd.) podporují DNS přes TLS. Namísto vytvoření průvodce pro konkrétní překladač vám ukážu, jak nastavit proxy Nginx TLS pro váš stávající překladač DNS, aby poskytoval službu DoT, takže bez ohledu na to, jaký překladač DNS používáte, můžete postupovat podle tohoto návodu.

Předpoklady

Předpokládá se, že na vašem serveru Ubuntu běží DNS resolver. Můžete použít jakýkoli DNS resolver (BIND, Unbound, Knot resolver…), 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

Potřebujete také název domény, protože klienti DNS budou muset vytvořit zabezpečené spojení TLS s naším DNS resolverem. Zaregistroval jsem si název domény u NameCheap, protože cena je nízká a poskytují ochranu soukromí whois doživotně zdarma.

Jakmile splníte výše uvedené požadavky, postupujte podle pokynů níže.

Krok 1:Nainstalujte Nginx na server Ubuntu

Je to velmi snadné. Jednoduše spusťte následující příkaz.

sudo apt install nginx

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

DNS over TLS 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 získat certifikát Let’s Encrypt TLS, můžeme pomocí následujícího příkazu vytvořit virtuálního hostitele Nginx. Repalce dot.example.com s vlastním názvem domény. Nezapomeňte pro tuto subdoménu vytvořit záznam DNS A.

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

Zkopírujte následující text a vložte jej do souboru virtuálního hostitele.

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

      root /usr/share/nginx/html/;

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

Uložte a zavřete soubor. 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 dot.example.com -w /usr/share/nginx/html/

Krok 3:Vytvořte DNS přes TLS Proxy v Nginx

Upravte hlavní konfigurační soubor Nginx.

sudo nano /etc/nginx/nginx.conf

Přidejte následující řádky na konec tohoto souboru. Všimněte si, že musí být umístěny mimo http kontextu.

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

Ve výše uvedené konfiguraci zajistíme, aby Nginx ukončil TLS připojení na portu 853, poté přesměruje požadavky DNS na místní překladač DNS naslouchající na 127.0.0.1:53 .

Uložte a zavřete soubor. Poté otestujte konfiguraci Nginx a restartujte.

sudo nginx -t
sudo systemctl restart nginx

Pokud je na serveru Ubuntu spuštěna brána firewall, musíte otevřít port TCP 853. Pokud například používáte bránu firewall UFW, spusťte následující příkaz.

sudo ufw allow 853/tcp

Protože používáme DNS přes TLS, není třeba se obávat útoku na zesílení DNS.

Krok 5:Konfigurace klienta Stubby DoT na ploše Ubuntu

Stubby je open-source DNS stub resolver vyvinutý týmem getdns. Překladač stub je malý klient DNS na počítači koncového uživatele, který přijímá požadavky DNS z aplikací, jako je Firefox, a předává požadavky rekurzivnímu překladači, jako je 1.1.1.1 nebo 8.8.8.8. Stubby je speciální v tom, že podporuje DNS přes TLS. Ve výchozím nastavení bude odesílat požadavky DNS pouze zašifrované.

Nainstalujte Stubby na plochu Ubuntu z výchozího úložiště.

sudo apt install stubby

Po instalaci stubby běží na pozadí. zkontrolujte jeho stav pomocí:

systemctl status stubby

Stubby naslouchá na TCP a UDP portu 53 localhost (127.0.0.1). Ve výchozím nastavení používá Stubby DNS třetích stran přes překladače TLS. Musíme jej nakonfigurovat, aby používal naše vlastní.

sudo nano /etc/stubby/stubby.yml

Přejděte dolů na upstream_recursive_servers: a přidejte následující text nad ostatní servery DNS. Nahraďte 12.34.56.78 IP adresou vašeho DoT resolveru.

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

Poté najděte následující řádek:

round_robin_upstreams: 1

Změňte 1 na 0 . Díky tomu bude Stubby vždy používat váš vlastní překladač DNS přes TLS. Pokud není k dispozici, stubby použije jiné servery DNS. Uložte soubor a restartujte stubby, aby se změny projevily.

sudo systemctl restart stubby

Krok 6:Konfigurace Ubuntu Desktop pro použití Stubby

Přestože Stubby běží, operační systém jej nepoužívá. Klepněte na ikonu Správce sítě v pravém horním rohu pracovní plochy. Poté vyberte nastavení kabelového připojení. (Pokud používáte Wi-Fi, vyberte Nastavení Wi-Fi.)

Klikněte na tlačítko ozubeného kola.

Vyberte IPv4 a poté v nastavení DNS přepněte na Automatic na OFF, což zabrání vašemu systému Ubuntu získat adresu serveru DNS z vašeho routeru. Zadejte 127.0.0.1 v poli DNS. Klikněte na Apply pro uložení změn.

Poté restartujte NetworkManager, aby se změny projevily.

sudo systemctl restart NetworkManager

Jakmile se znovu připojíte, můžete vidět, že váš systém Ubuntu nyní používá jako DNS server 127.0.0.1 v Details kartu.

Jak zkontrolovat, zda je váš provoz DNS šifrován

Ke sledování DNS provozu můžeme použít WireShark. Nainstalujte WireShark na plochu Ubuntu.

sudo apt install wireshark

Pokud budete dotázáni:„Měli by uživatelé, kteří nejsou superuživateli, moci zachytit pakety?“, odpovězte Ano. Po instalaci spusťte následující příkaz a přidejte svůj uživatelský účet do skupiny wireshark, abyste mohli zachycovat pakety.

sudo adduser your-username wireshark

Odhlaste se a znovu přihlaste, aby se změny projevily. Poté otevřete WireShark z nabídky aplikace a vyberte své síťové rozhraní ve WireShark. Například název mého rozhraní Ethernet je enp5s0. Poté zadejte port 853 jako zachytávací filtr. Díky tomu bude WireShark zachycovat provoz pouze na portu 853, což je port používaný DNS přes TLS.

Kliknutím na tlačítko v levém horním rohu zahájíte snímání. Poté v okně terminálu spusťte následující příkaz pro dotaz na název domény pomocí dig užitečnost. Mohu se například dotázat na záznam A názvu mé domény.

dig A linuxbabe.com

Nyní můžete vidět zachycený provoz DNS ve WireShark. Spojení byla vytvořena přes TCP a šifrována pomocí TLS, což je to, co chceme. Měli byste zkontrolovat, zda sloupec Destination obsahuje IP adresu vašeho překladače DoT.

Pokud jsou dotazy DNS odesílány bez šifrování, počítač by kontaktoval server DNS na portu 53. Pakety můžete znovu zachytit pomocí port 53 jako filtr pro zachycení, ale ve WireShark neuvidíte žádné pakety, což znamená, že stubby šifruje vaše dotazy DNS.


Ubuntu
  1. Jak nastavit DNS Nameserver na Ubuntu 20.04

  2. Jak nastavit DNS Nameservery na Ubuntu 18.04

  3. Jak nastavit Unbound DNS Resolver na Ubuntu 20.04

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

  2. Jak nastavit bloky serveru Nginx na Ubuntu 20.04

  3. Jak nainstalovat MediaWiki s Nginx na Ubuntu 16.04

  1. Jak nainstalovat Magento s Nginx na Ubuntu 15.10

  2. Jak nainstalovat Mailpile s Nginx na Ubuntu 15.10

  3. Jak nainstalovat Redmine 3 s Nginx na Ubuntu 15.10