Su TurboLab.it abbiamo già visto cosa sono i DNS, come possono essere utilizzati per tracciarci, come cambiarli (anche su Linux) per aggirare la censura e navigare più velocemente o per bloccare la pubblicità. Vediamo adesso come possiamo rendere le richieste DNS più sicure e non intercettabili.

Guida DNSCrypt 2: richieste DNS criptate anti-censura

Un limite del sistema DNS è quello di effettuare le richieste di "traduzione" del nome all'IP in chiaro. Questo le rende facilmente intercettabili (dal router o dall'ISP ma anche da qualche malintenzionato) e modificabili in modo da rispondere con un IP diverso da quello effettivamente appartenente ad un sito (in gergo si parla di DNS Spoofing, qui un test per verificare la vulnerabilità dei vostri DNS). Dato che questa vulnerabilità è ormai ben conosciuta si è pensato di porvi rimedio con una serie di specifiche, chiamate DNSSEC (Domain Name System Security Extensions) che consentono di validare la risposta del DNS; purtroppo questo sistema non è ancora molto diffuso (qui un test specifico per vedere se il vostro DNS supporta DNSSEC). Il DNSSEC, consente sì di validare la risposta del DNS ma non la richiesta, che viene comunque fatta in chiaro, e quindi sempre leggibile e intercettabile, per esempio, dal nostro ISP per censurare alcuni siti (bloccando completamente la risposta). Per ovviare anche a questo problema sono nati ultimamente diversi nuovi protocolli che criptano le richieste DNS in modo da renderle impossibile intercettarle; i più noti tra questi sono DNS over HTTPS (supportato da DNSCrypt) o DNS over TLS ma il protocollo più maturo e affidabile è quello utilizzato da DNSCrypt, arrivato alla versione 2, interamente riscritto per essere più leggero ed efficente, con la capacità di aggiornare in automatico la lista dei server DNS disponibili.

Questo si presenta come un programma (ci tengo a precisare, a sorgente aperto e disponibile per quasi ogni sistema operativo, sia esso Desktop, mobile o firmware di router!) e agisce come un proxy per le sole chiamate DNS, contattando un server abilitato a ricevere le richieste criptate (ce ne sono molti tra cui il famoso OpenDNS, qui la lista completa). Da notare che DNSCrypt non esclude DNSSEC ma anzi lo implementa, aumentando notevolmente la sicurezza di questo sistema!

Guida DNSCrypt 2: richieste DNS criptate anti-censura

Una funzione "collaterale" di DNSCrypt è la capacità di filtraggio attraverso una blacklist che può contenere, in distinti file di configurazione, una lista di IP (sia IPv4 che IPv6) o domini, questi ultimi identificabili anche solo da un pattern comune, senza quindi dover esplicare ogni singolo sotto dominio (come necessario per esempio con l'hosts file). È anche possibile inserire alcuni domini che non vogliamo far tradurre da DNSCrypt, funzione molto utile in caso di rete locale e tenere traccia di tutte le chiamate DNS o solo di quelle bloccate.

Vediamo ora come avvalerci di DNSCrypt nella maniera più semplice sui principali sistemi operativi.

WINDOWS

Guida DNSCrypt 2: richieste DNS criptate anti-censura - simplednscrypt_256

DNSCrypt si presenta come un'utility da riga di comando. È possibile scaricare l'eseguibile e installarlo tramite Power Shell, ma il sistema più semplice per utilizzare DNSCrypt su Windows è quello di utilizzare un programma che, oltre ad avere il servizio integrato, comprenda anche una comoda interfaccia, permettendo così di gestire la configurazione nel modo più semplice possibile. Per questo consiglio Simple DNSCrypt davvero un semplice programma per gestire DNSCrypt!

Una volta scaricato il file di installazione dell'ultima versione disponibile e installato il programma tramite la solita procedura, possiamo avviarlo.

Guida DNSCrypt 2: richieste DNS criptate anti-censura

Nella prima tab (Menù Principale) ci sono alcune semplici configurazioni da selezionare o deselezionare (ricordiamoci di cliccare su applica impostazioni dopo ogni modifica!), un comodo switch per attivare il servizio e le interfacce di rete disponibile sulla macchina (dovremo selezionare quella su cui vogliamo attivare DNSCrypt!).

Guida DNSCrypt 2: richieste DNS criptate anti-censura

Nella tad Resolver ci sono i server disponibili; per impostazione predefinita è attiva la Modalità Automatica che lascia scegliere i server più veloci da utilizzare direttamente a SimpleDNSCrypt ma se questo non ci piace, possiamo sempre sceglierne uno o più a nostro piacimento (meglio sceglierne almeno un paio!). Nella tab Opzioni Avanzate avremo la possibilità di scegliere quali indirizzi IP il servizio dovrà monitorare per intercettare le chiamate DNS, attivare la Cache DNS (che consente di velocizzare la risposta in caso di visite ravvicinare allo stesso dominio), Bloccare IPv6 (se non utilizzato, velocizza la risoluzione dei nomi di dominio), forzare la connessione TCP (più lenta, ma più affidabile) anziché l'UDP (normalmente utilizzata per i DNS), rendere SimpleDNSCrypt come Resolver Globale all'interno di una LAN, per esempio e selezionare un servizio DNS normale come riserva in caso di problemi a DNSCrypt. È presente anche un tasto per la disinstallazione del servizio.

Guida DNSCrypt 2: richieste DNS criptate anti-censura

Nell'ultima tab Query Log, se attivata con l'apposito switch, è possibile vedere tutte le chiamate DNS eseguite dal sistema (molto utile in caso si voglia bloccare qualche programma che "telefona a casa"... ).

Un'altra cosa da prendere in considerazione è la piccola icona di un ingranaggio, posta in alto a destra; se cliccata apre una piccola finestra di Impostazioni che consente fra le altre cose di attivare gli aggiornamenti automatici e l'utilissima funzione Blacklist.

MAC OSX

Per utilizzare DNSCrypt su MacOs, possiamo farlo in maniera molto semplice avvalendoci di due utilissimi strumenti: Homebrew e BitBar.

Con il primo potremo installare il binario dnscrypt-proxy e attivare il servizio come scritto nelle note di post-installazione tramite il comando:

sudo brew service start dnscrypt-proxy

Guida DNSCrypt 2: richieste DNS criptate anti-censura - install_dnscrypt_mac_2

Mentre utilizzeremo BitBar con il plugin dnscrypt-proxy switcher per cambiare facilmente i DNS utilizzati direttamente dalla barra del nostro Mac OS!

Guida DNSCrypt 2: richieste DNS criptate anti-censura - install_dnscrypt_mac_1

LINUX

Ogni distro linux ormai ha DNSCrypt nei propri repository, già configurato al meglio per cui dobbiamo solo installarlo con i consueti modi. In questo caso non si hanno interfacce grafiche disponibili per la configurazione rapida ma dobbiamo andare ad editare a mano il file /etc/dnscrypt-proxy/dnscrypt-proxy.toml. Detto file è molto ben commentato ed è il caso di leggerlo attentamente perché qui potremo cambiare o inserire i nostri server preferiti (sempre se non vogliamo la scelta automatica fra tutti quelli disponibili) o attivare blacklist o whitelist decommentando le righe che specificano il path, rispettivamente, ai file (che dovremo editare a mano) /etc/dnscrypt-proxy/blacklist.txt (per i domini o /etc/dnscrypt-proxy/ip-blacklist.txt per gli IP) e /etc/dnscrypt-proxy/whitelist.txt. Il servizio dovrebbe attivarsi e avviarsi in automatico, ma se non lo facesse, dovremo farlo manualmente:

  • sudo systemctl start dnscrypt-proxy
  • sudo systemctl enable dnscrypt-proxy

Controlliamo adesso che il file /etc/resolv.conf contenga la seguente stringa:

  • nameserver 127.0.0.1

Se abbiamo una configurazione di rete dinamica, gestita da DHCP, il demone di questo servizio potrebbe sovrascrivere questo file. Per ovviare a questo, nella maggior parte dei casi, è sufficiente aggiungere la seguente riga al file /etc/dhcpd.conf:

  • nohook resolv.conf

Se invece il nostro sistema utilizza systemd-resolved dovremo editare il file /etc/systemd/resolved.conf specificando l'indirizzo 127.0.0.1 alla voce DNS= e rimuovendo l'eventuale simbolo di commento (il cancelletto #) davanti a questa voce e riavviando il servizio incriminato dopo aver aggiornato la configurazione dei servizi:

  • sudo systemctl daemon-reload
  • sudo systemctl restart systemd-resolved

ATTENZIONE: su Ubuntu e qualche derivata, il pacchetto dnscrypt-proxy potrebbe non essere ancora aggiornato alla versione 2; in caso di installazione da repository quindi potrebbe non funzionare! Una soluzione al problema è l'installazione manuale...

Android

Ci sono alcune app che consentono di utilizzare DNSCrypt anche su Android senza necessità di essere root, ma non mi sento di consigliarle dato che sono a sorgente chiuso (e devono dirigere tutto il traffico internet del nostro dispositivo!) e quasi tutte sono a pagamento o contengono banner pubblicitari. Una di quelle che ritengo più affidabile è l'app AdGuard per Android. Questa app (oltre ad essere a sorgente chiuso) offre un periodo di prova di soli 7 giorni dopodiché richiede un pagamento (abbonamento da 0,75€/mese o licenza a vita da 22,44€). Considerando che la funzione principale di questa app è quella di bloccare le pubblicità e dato che esistono validissime soluzioni free vi consiglio, per il momento, di fare a meno di DNSCrypt sul vostro smartphone...

Per gli utenti root invece le soluzioni non mancano!

Chi utilizza Magisk, puoi installre l'apposito modulo per abilitare DNSCrypt (attenzione: richiede anche un app per gestire il firewall iptables come, per esempio, AFWall+). È possibile anche l'installazione manuale ma decisamente non è alla portata di tutti. Molto più semplice invece installate una sola app: YourFriendlyDNS. Questa app è disponibile anche per tutte le altre piattaforme già viste fin qui ma la mensiono solo adesso perché è il modo più semplice per avere DNSCrypt su Android con root. Il motivo per cui non ho scritto prima di questa app, dal funzionamento impeccabile, è che ha un grosso limite: l' "estetica", per così dire. Se per molti potrebbe non essere un problema, si deve tener conto che, sui "piccoli" schermi dei nostri cellulari, può rendere difficoltoso l'utilizzo in quanto, a seconda dell'orientamento e della definizione dello schermo, alcuni tasti o menù possono non essere leggibili o addirittura diventare inaccessibili. Un vero peccato perché, ripeto, il funzionamento è ineccepibile.

Guida DNSCrypt 2: richieste DNS criptate anti-censura

Da ricordare infine che dalla versione 9 di Android (nome in codice Pie), le richieste DNS saranno criptate di default con il protocollo DNS over TLS. E sembra anche che Google ci lascerà scegliere i nostri DNS preferiti!

iOS

Per i dispositivi iOS (sia iPhone che iPad) è disponibile l'app DNSCloak. Mi limito a segnalarla perché non ho possibilità di provarla.

COME VERIFICARE CHE TUTTO FUNZIONI CORRETTAMENTE?

Per verificare quale DNS è in funzione possiamo visitare uno dei tanti siti che consentono di ricavare questa informazione (come questo, per esempio). Se utilizziamo Linux, possiamo fare una prova fermando temporaneamente il servizio relativo a dnscrypt e provando a fare il ping di un sito: se la risposta è un errore significa che il proxy DNS è correttamente configurato.

Se però vogliamo essere certi che le chiamate DNS sono criptate possiamo farlo facilmente se, per esempio, abbiamo scelto i dns di OpenDNS (adesso sotto il nome Cisco, nella lista dei servizi DNS disponibili!). Con questi, infatti, la verifica si fa facilmente tramite terminale (anche su Windows 10 con l'installazione del WLS), digitando il seguente comando:

  • drill txt debug.opendns.com

tale comando dovrebbe riportare un risultato come quello dell'immagine sotto, dove si può leggere chiaramente dnscrypt enabled.

Guida DNSCrypt 2: richieste DNS criptate anti-censura

Se utilizziamo un diverso server DNS, la verifica è molto più complessa; per avere la certezza che le chiamate DNS siano criptate, occorre monitorare il traffico di rete con programmi come Wireshark.

» Leggi: Come analizzare il traffico di una rete con Wireshark per scoprire connessioni sospette o indirizzi non sicuri