GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Come configurare facilmente un DNS su TLS Resolver con Nginx su Ubuntu

Questo tutorial ti mostrerà come impostare il tuo DNS su TLS (DoT) su Ubuntu con Nginx, così le tue query DNS possono essere crittografate e protette da occhi indiscreti.

Cos'è il DNS su TLS e perché è importante

Il DNS (Domain Name System) è responsabile della traduzione dei nomi di dominio in indirizzi IP. È stato progettato nel 1987 senza alcuna sicurezza o privacy in mente. Per impostazione predefinita, le query DNS non sono crittografate. Vengono inviati in chiaro sul filo e possono essere sfruttati da entità intermedie. Ad esempio, il Great Firewall cinese (GFW ) utilizza una tecnica chiamata DNS cache poison censurare Internet cinese. (Usano anche altri metodi, che esulano dallo scopo di questo articolo.)

GFW controlla ogni query DNS inviata a un server DNS al di fuori della Cina. Poiché il protocollo DNS in testo normale si basa su UDP, che è un protocollo senza connessione, GFW può falsificare sia l'IP del client che l'IP del server. Quando GFW trova un nome di dominio nella sua lista di blocco, cambia la risposta DNS. Ad esempio, se un utente Internet cinese desidera visitare google.com, GFW restituisce un indirizzo IP situato in Cina anziché l'indirizzo IP reale di Google al risolutore DNS dell'utente. Quindi il resolver DNS restituisce l'indirizzo IP falso al computer dell'utente, quindi l'utente non può visitare google.com.

DNS su TLS significa che le query DNS vengono inviate tramite una connessione protetta crittografata con TLS, la stessa tecnologia che crittografa il traffico HTTP.

Perché eseguire il proprio risolutore DoT?

Esistono già alcuni resolver DNS pubblici come 1.1.1.1 e 9.9.9.9 che supportano DNS su TLS, quindi puoi usarli se non hai le competenze o il tempo per eseguirne uno. Tuttavia, alcune persone sostengono che ciò consente ancora ai grandi fornitori di servizi DNS di raccogliere informazioni sugli utenti. Sembrano avere più fiducia nel loro ISP. Ma penso che se sei paranoico sulla privacy, dovresti eseguire il tuo risolutore DoT, quindi né i grandi fornitori di servizi DNS né il tuo ISP possono spiarti.

Attualmente, non tutti i resolver DNS (BIND, Unbound, Knot resolver, PowerDNS recursor, ecc.) supportano DNS su TLS. Invece di creare una guida per un risolutore specifico, ti mostrerò come configurare il proxy Nginx TLS per il tuo risolutore DNS esistente per fornire il servizio DoT, quindi indipendentemente dal risolutore DNS che stai utilizzando, puoi seguire questo tutorial.

Prerequisiti

Si presume che tu abbia un risolutore DNS in esecuzione sul tuo server Ubuntu. Puoi usare qualsiasi risolutore DNS (BIND, Unbound, Knot resolver...) Io personalmente uso BIND.

  • Configura il tuo risolutore DNS BIND9 su Ubuntu 16.04/18.04
  • Configura il tuo risolutore DNS BIND9 su Ubuntu 20.04

Hai anche bisogno di un nome di dominio, perché i client DNS dovranno stabilire una connessione TLS sicura con il nostro risolutore DNS. Ho registrato il mio nome di dominio da NameCheap perché il prezzo è basso e offrono protezione della privacy di Whois gratuita per tutta la vita.

Una volta soddisfatti i requisiti di cui sopra, segui le istruzioni di seguito.

Passaggio 1:installa Nginx su Ubuntu Server

È molto facile da fare. Basta eseguire il comando seguente.

sudo apt install nginx

Passaggio 2:ottieni un certificato TLS affidabile da Let's Encrypt

DNS su TLS richiede l'installazione di un certificato TLS sul lato server. Otterremo e installeremo il certificato Let's Encrypt. Il vantaggio dell'utilizzo del certificato Let's Encrypt è che è gratuito, più facile da configurare e considerato affidabile dal software client.

Esegui i seguenti comandi per installare il client Let's Encrypt (certbot) dal repository Ubuntu predefinito.

sudo apt install certbot

Per ottenere un certificato Let's Encrypt TLS, possiamo creare un host virtuale Nginx con il seguente comando. Sostituisci dot.example.com con il tuo nome di dominio. Non dimenticare di creare un record DNS A per questo sottodominio.

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

Copia il testo seguente e incollalo nel file dell'host virtuale.

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

      root /usr/share/nginx/html/;

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

Salva e chiudi il file. Ricarica Nginx per rendere effettive le modifiche.

sudo systemctl reload nginx

Una volta creato e abilitato l'host virtuale, esegui il comando seguente per ottenere il certificato Let's Encrypt utilizzando il plug-in webroot.

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

Passaggio 3:crea DNS su proxy TLS in Nginx

Modifica il file di configurazione principale di Nginx.

sudo nano /etc/nginx/nginx.conf

Aggiungi le seguenti righe in fondo a questo file. Nota che devono essere posizionati al di fuori di http contesto.

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

Nella configurazione precedente, facciamo in modo che Nginx termini la connessione TLS sulla porta 853, quindi reindirizzerà le richieste DNS al resolver DNS locale in ascolto su 127.0.0.1:53 .

Salva e chiudi il file. Quindi prova la configurazione di Nginx e riavvia.

sudo nginx -t
sudo systemctl restart nginx

Se c'è un firewall in esecuzione sul server Ubuntu, devi aprire la porta TCP 853. Ad esempio, se usi il firewall UFW, esegui il comando seguente.

sudo ufw allow 853/tcp

Poiché utilizziamo DNS su TLS, non è necessario preoccuparsi dell'attacco di amplificazione DNS.

Passaggio 5:Configura il client Stubby DoT su Ubuntu Desktop

Stubby è un risolutore stub DNS open source sviluppato dal team getdns. Un risolutore stub è un piccolo client DNS sul computer dell'utente finale che riceve richieste DNS da applicazioni come Firefox e inoltra le richieste a un risolutore ricorsivo come 1.1.1.1 o 8.8.8.8. Stubby è speciale in quanto supporta DNS su TLS. Per impostazione predefinita, invierà solo richieste DNS crittografate.

Installa Stubby sul desktop di Ubuntu dal repository predefinito.

sudo apt install stubby

Una volta installato, stubby viene eseguito in background. controlla il suo stato con:

systemctl status stubby

Stubby è in ascolto sulla porta TCP e UDP 53 di localhost (127.0.0.1). Per impostazione predefinita, Stubby utilizza DNS di terze parti su risolutori TLS. Dobbiamo configurarlo per utilizzare il nostro.

sudo nano /etc/stubby/stubby.yml

Scorri verso il basso fino a upstream_recursive_servers: sezione e aggiungi il testo seguente sopra altri server DNS. Sostituisci 12.34.56.78 con l'indirizzo IP del tuo risolutore DoT.

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

Quindi trova la seguente riga:

round_robin_upstreams: 1

Modifica 1 a 0 . Questo farà sì che Stubby utilizzi sempre il tuo DNS su TLS. Se non è disponibile, stubby utilizzerà altri server DNS. Salva il file e riavvia stubby per rendere effettive le modifiche.

sudo systemctl restart stubby

Passaggio 6:Configura Ubuntu Desktop per utilizzare Stubby

Sebbene Stubby sia in esecuzione, non viene utilizzato dal sistema operativo. Fare clic sull'icona Network Manager nell'angolo in alto a destra del desktop. Quindi seleziona le impostazioni cablate. (Se utilizzi il Wi-Fi, seleziona Impostazioni Wi-Fi.)

Fai clic sul pulsante a forma di ingranaggio.

Seleziona IPv4 scheda, quindi nelle impostazioni DNS, cambia Automatic su OFF, che impedirà al tuo sistema Ubuntu di ottenere l'indirizzo del server DNS dal tuo router. Inserisci 127.0.0.1 nel campo DNS. Fai clic su Apply pulsante per salvare le modifiche.

Quindi riavvia NetworkManager per rendere effettive le modifiche.

sudo systemctl restart NetworkManager

Una volta riconnesso, puoi vedere che il tuo sistema Ubuntu ora sta usando 127.0.0.1 come server DNS in Details scheda.

Come verificare se il tuo traffico DNS è crittografato

Possiamo usare WireShark per monitorare il traffico DNS. Installa WireShark sul desktop Ubuntu.

sudo apt install wireshark

Se ti viene chiesto "I non superutenti dovrebbero essere in grado di acquisire pacchetti?", rispondi Sì. Una volta installato, esegui il comando seguente per aggiungere il tuo account utente al gruppo wireshark in modo da poter acquisire i pacchetti.

sudo adduser your-username wireshark

Esci e riconnettiti per rendere effettive le modifiche. Quindi apri WireShark dal menu dell'applicazione, seleziona la tua interfaccia di rete in WireShark. Ad esempio, il nome della mia interfaccia Ethernet è enp5s0. Quindi inserisci port 853 come filtro di acquisizione. Ciò consentirà a WireShark di acquisire solo il traffico sulla porta 853, che è la porta utilizzata da DNS su TLS.

Fare clic sul pulsante nell'angolo in alto a sinistra per avviare l'acquisizione. Dopodiché, nella finestra del terminale, esegui il seguente comando per interrogare il nome di dominio usando il dig utilità. Ad esempio, posso interrogare il record A del mio nome di dominio.

dig A linuxbabe.com

Ora puoi vedere il traffico DNS catturato in WireShark. Le connessioni sono state effettuate su TCP e crittografate con TLS, che è quello che vogliamo. Dovresti controllare se la colonna Destinazione include l'indirizzo IP del tuo risolutore DoT.

Se le query DNS vengono inviate senza crittografia, il computer contatterà il server DNS sulla porta 53. Puoi acquisire nuovamente i pacchetti con port 53 come filtro di acquisizione, ma non vedrai alcun pacchetto in WireShark, il che significa che stubby sta crittografando le tue query DNS.


Ubuntu
  1. Come impostare il server dei nomi DNS su Ubuntu 20.04

  2. Come impostare i server dei nomi DNS su Ubuntu 18.04

  3. Come configurare un firewall con UFW su Ubuntu 20.04

  4. Come configurare i blocchi del server Nginx su Ubuntu 20.04

  5. Come configurare un risolutore DNS non legato su Ubuntu 20.04

Configura il risolutore DNS su HTTPS (DoH) su Ubuntu con DNSdist

Come abilitare facilmente TLS 1.3 in Nginx su Ubuntu 20.04, 18.04, 16.04

Configura un risolutore DNS locale su Ubuntu 18.04, 16.04 con BIND9

Configura il risolutore DNS locale su Ubuntu 20.04 con BIND9

Come installare Nginx con Let's Encrypt TLS/SSL su Ubuntu 20.04

Come configurare un server Seafile con Nginx su Ubuntu 18.04