Tento tutoriál vám ukáže, jak chránit vaše soukromí DNS na ploše Ubuntu 20.04/18.04 pomocí DNS přes TLS . Použijeme nástroj zvaný stubby abychom toho dosáhli. Nejprve vám ale řeknu, proč není DNS bezpečný.
Chyba zabezpečení DNS
DNS je nejistý, protože dotazy DNS nejsou ve výchozím nastavení šifrovány, což mohou prostřední entity zneužít. Jed mezipaměti DNS je jedním ze zneužití DNS, který je široce používán Velkým čínským firewallem (GFW) k cenzuře čínského internetu. 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, čínský velký firewall vrátí do DNS resolveru IP adresu umístěnou v Číně namísto skutečné IP adresy Google. Potom DNS resolver vrátí falešnou IP adresu do počítače uživatele.
Co je DNS přes TLS? Jak chrání vaše soukromí?
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, takže vaše dotazy DNS nemohou vidět žádné třetí strany. Společně s HTTPS a šifrovaným SNI (Server Name Indication) je vaše historie prohlížení plně chráněna před špehováním ISP.
Stubby je open-source DNS stub resolver vyvinutý týmem getdns. Používá knihovnu getdns. Překladač stub je malý klient DNS v 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é. Existuje další open-source stub resolver s názvem cloudflared
který podporuje DNS přes HTTPS, ale stubby je již v úložišti Ubuntu 20.04/18.04 a je velmi snadno použitelný.
Jak nainstalovat a používat Stubby na Ubuntu 20.04/18.04 Desktop
Stubby je v úložišti Ubuntu 20.04/18.04. Otevřete okno terminálu a spusťte následující příkaz pro jeho instalaci.
sudo apt install stubby
Tím se nainstaluje stubby a getdns
knihovna. Po instalaci stubby běží na pozadí. Jeho stav zkontrolujete pomocí:
systemctl status stubby
Stubby naslouchá na TCP a UDP portu 53 localhost (127.0.0.1), jak můžete vidět spuštěním tohoto příkazu:
sudo netstat -lnptu | grep stubby
Výchozí stub resolver poskytovaný systemd-resolved
naslouchá na TCP a UDP portu 53 z 127.0.0.53.
sudo netstat -lnptu | grep systemd-resolv
Poznámka:Pokud dnsmasq naslouchá na portu TCP 53 z 127.0.0.1, bude Stubby naslouchat pouze na portu UDP 53 z 127.0.0.1.
Hlavní konfigurační soubor je /etc/stubby/stubby.yml
. Normálně v něm není potřeba provádět změny, pokud nechcete použít jiný nebo svůj vlastní rekurzivní překladač. Dovolte mi vysvětlit některé výchozí konfigurace. Soubor můžete otevřít pomocí:
sudo nano /etc/stubby/stubby.yml
Následující řádek způsobí, že stubby běží jako stub resolver namísto plného rekurzivního resolveru, proto se nazývá stubby.
resolution_type: GETDNS_RESOLUTION_STUB
Následující konfigurace umožňuje stubby odesílat dotazy DNS šifrované pomocí TLS. Nebude odesílat dotazy v prostém textu.
dns_transport_list: - GETDNS_TRANSPORT_TLS
Tento následující řádek vyžaduje platný certifikát TLS na vzdáleném rekurzivním překladači.
tls_authentication: GETDNS_AUTHENTICATION_REQUIRED
Následující řádky nastavují adresy naslouchání pro démona stubby. Ve výchozím nastavení jsou povoleny protokoly IPv4 i IPv6.
listen_addresses: - 127.0.0.1 - 0::1
Následující řádek vytváří hloupé rekurzivní překladače dotazů v režimu round-robin. Pokud je nastaveno na 0
, Stubby bude používat každý upstream server postupně, dokud nebude dostupný, a poté přejde k použití dalšího.
round_robin_upstreams: 1
Ve výchozím nastavení jsou v konfiguračním souboru stubby povoleny 3 rekurzivní překladače. Provozují je nemotorní vývojáři a podporují DNS přes TLS. Úplný seznam doporučených serverů si můžete prohlédnout na webu DNS Privacy.
dnsovertls.sinodun.com 145.100.185.15 dnsovertls1.sinodun.com 145.100.185.16 getdnsapi.net 185.49.141.37
V Additional Servers
jsou další servery DNS sekce, které jsou ve výchozím nastavení zakázány.
dns.quad9.net unicast.censurfridns.dk dnsovertls3.sinodun.com (supporting TLS1.2 and TLS 1.3) dnsovertls2.sinodun.com dns.cmrg.net dns.larsdebruin.net ......
Existují také servery DNS naslouchající na portu 443. Pokud je port 853 ve vaší síti blokován, můžete pro použití těchto serverů zrušit komentář.
dnsovertls.sinodun.com dnsovertls1.sinodun.com dns.cmrg.net dns.neutopia.org
Nyní můžete ukončit nano textový editor stisknutím Ctrl+X
.
Přepnutí na Stubby
Úprava souboru /etc/resolve.conf
soubor pro změnu jmenného serveru se již nedoporučuje. Chcete-li systemd-resolved
, postupujte podle pokynů níže odesílat dotazy DNS na stubby.
Plocha GNOME
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.
Plocha Unity
Doporučená literatura:jak nainstalovat desktopové prostředí Unity na Ubuntu 20.04/18.04.
Klikněte na ikonu Správce sítě v pravém horním rohu plochy a poté klikněte na edit connections
.
Vyberte název připojení a klikněte na ikonu ozubeného kola.
Vyberte kartu Nastavení IPv4, změňte metodu z Automatic(DHCP)
na Automatic(DHCP) addresses only
, což zabrání vašemu systému Ubuntu získat adresu serveru DNS z vašeho routeru. Poté zadejte server DNS (127.0.0.1). Stubby poslouchá na 127.0.0.1.
Uložte změny. Poté restartujte NetworkManager, aby se změny projevily.
sudo systemctl restart NetworkManager
Jakmile budete znovu připojeni, klikněte znovu na ikonu Network Manager a vyberte connection information
. Můžete vidět, že váš systém Ubuntu nyní používá jako DNS server 127.0.0.1.
Změna serveru DNS z příkazového řádku
Ke změně serveru DNS můžete použít níže uvedený způsob, pokud vaše desktopové prostředí používá NetworkManager.
Otevřete okno terminálu a přejděte do adresáře profilu připojení Network Manager.
cd /etc/NetworkManager/system-connections/
Poté vypište názvy připojení, která jsou k dispozici ve vašem systému.
ls
Jak můžete vidět, mám v systému několik připojení, z nichž jedno je kabelové připojení. Některá jsou bezdrátová připojení a jedna je připojení VPN. Protože je můj stolní počítač připojen k routeru pomocí ethernetového kabelu, musím upravit profil kabelového připojení pomocí nano
textový editor příkazového řádku.
sudo nano 'Wired connection 1'
Pokud je váš počítač připojen přes Wi-Fi, musíte upravit profil bezdrátového připojení. V tomto souboru najděte [ipv4]
konfigurace. Ve výchozím nastavení by to mělo vypadat takto:
[ipv4] dns-search= method=auto
Chcete-li, aby váš systém používal Stubby, změňte konfigurace na následující.
[ipv4] dns=127.0.0.1; dns-search= ignore-auto-dns=true method=auto
Chcete-li soubor uložit v textovém editoru Nano, stiskněte Ctrl+O
a poté stiskněte Enter pro potvrzení. Stiskněte Ctrl+X
k východu. Poté restartujte Network Manager, aby se změny projevily.
sudo systemctl restart NetworkManager
Nyní můžete zkontrolovat svůj aktuální server DNS spuštěním následujícího příkazu:
systemd-resolve --status
Ukázkový výstup:
Link 2 (enp5s0) Current Scopes: DNS LLMNR setting: yes MulticastDNS setting: no DNSSEC setting: no DNSSEC supported: no DNS Servers: 127.0.0.1
Pokud je jako server DNS uveden 127.0.0.1, pak váš systém používá Stubby.
Ignorujte nastavení DNS poskytovaná serverem DHCP
Pokud používáte serverovou edici Ubuntu , můžete nakonfigurovat systemd ignorovat nastavení DNS poskytovaná serverem DHCP, takže váš systém nebude náhodně používat nesprávný server DNS.
Nejprve zkontrolujte stav síťového rozhraní.
networkctl status enp5s0
Zobrazí se vám síťový soubor pro toto rozhraní. Upravte tento síťový soubor.
sudo nano /run/systemd/network/10-netplan-enp5s0.network
Najděte [DHCP]
a přidejte následující řádek.
UseDNS=false
Takhle:
[DHCP] RouteMetric=100 UseMTU=true UseDNS=false
Uložte a zavřete soubor. Poté restartujte systemd-netweorkd.service
aby se změna projevila.
sudo systemctl restart systemd-networkd
Spuštěním následujícího příkazu zkontrolujte servery DNS pro každé síťové rozhraní. Pokud je vše v pořádku, neuvidíte server DNS poskytovaný vaším serverem DHCP.
resolvectl status
Změny v síťovém souboru lze přepsat novou aktualizací balíčku. Pokud váš server používá netplan pro správu síťového připojení můžete také nakonfigurovat síťový plán tak, aby ignoroval nastavení DHCP DNS.
sudo nano /etc/netplan/50-cloud-init.yaml
Přidejte do souboru následující dva řádky.
dhcp4-overrides: use-dns: no
Takhle:
network: ethernets: eth0: dhcp4: true dhcp4-overrides: use-dns: no optional: true set-name: eth0 nameservers: search: [ invalid ] addresses: 127.0.0.1 version: 2
Uložte a zavřete soubor. Poté použijte změny.
sudo netplan apply
Jak zkontrolovat, zda je váš provoz DNS šifrován
Ke sledování DNS provozu můžeme použít WireShark. Nainstalujte WireShark z úložiště Ubuntu 20.04/18.04.
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. Jak vidíte, můj dotaz DNS byl odeslán na adresu 185.49.141.37
, 145.100.185.15
a 145.100.185.16
, což jsou 3 výchozí překladače DNS definované v konfiguračním souboru stubby. Připojení byla vytvořena přes TCP a šifrována pomocí TLS, což je to, co chci.
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 zachytávací filtr, ale ve WireShark neuvidíte žádné pakety, což znamená, že stubby šifruje vaše dotazy DNS.
Jak přidat CloudFlare DNS do Stubby
Zjistil jsem, že mezi mým počítačem a 3 výchozími servery DNS je vysoká latence (přes 200 ms), zatímco servery CloudFlare DNS (1.1.1.1, 1.0.0.1) mi poskytují velmi nízkou latenci (méně než 20 ms). CloudFlare také podporuje DNS přes TLS. Chcete-li přidat server DNS CloudFlare, upravte konfigurační soubor stubby.
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.
#CloudFlare servers - address_data: 1.1.1.1 tls_auth_name: "cloudflare-dns.com" - address_data: 1.0.0.1 tls_auth_name: "cloudflare-dns.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 server DNS CloudFlare. Pokud CloudFlare není k dispozici, stubby použije jiné servery DNS. Uložte soubor a restartujte stubby, aby se změny projevily.
sudo systemctl restart stubby
Podpora DNS přes HTTPS
Stubby bude podporovat DNS přes HTTPS ve verzi 0.3. Ubuntu 20.10 se dodává s verzí 0.2.6. Chcete-li zkontrolovat verzi Stubby, spusťte
stubby -V