Il protocollo DNS-Over-HTTPS, spesso abbreviato in DoH, permette di incrementare sicurezza e privacy durante la navigazione Web. Nel concreto con DoH le DNS (Domain Name System) query, eseguite tramite browser o da altre applicazioni connesse alla rete, vengono inviate via HTTPS (HyperText Transfer Protocol over Secure Socket Layer).
L'implementazione di questa soluzione protegge le richieste DNS con la crittografia offerta dal protocollo TLS (Transport Layer Security), lo stesso sfruttato da tempo per la comune navigazione su Internet. Un esempio concreto: proprio grazie ad HTTPS e a TLS è possibile garantire che i pagamenti online siano eseguiti in modo sicuro, cosi come tutte le operazioni che prevedono lo scambio di dati sensibili o riservati.
DNS-Over-HTTPS è quindi un layer di sicurezza aggiuntivo che irrobustisce la protezione da minacce ed insidie presenti in rete. Ovviamente DoH non sostituisce altri sistemi di difesa come i software antivirus o i firewall, tantomeno impedisce all'utente di adottare comportamenti sconsiderati come l'installazione di software da fonti non verificate. La riservatezza dei dati non è infatti garantita unicamente dai programmi che impediscono ai cyber-criminali di violare i device o dai protocolli che criptano le informazioni veicolate. Anche l'utente deve contribuire alla propria sicurezza online.
Nella guida di oggi parleremo di come implementare DNS-Over-HTTPS in una configurazione Pi-hole che opera Raspberry Pi. Questo tutorial è rivolto a qualsiasi tipo di utente, dal più esperto fino al neofita che è da poco venuto in possesso della nota board ARM, magari acquistando il più recente modello Raspberry Pi 5.
Tale device è perfetto per questo genere di progetti. Può infatti restare acceso e connesso alla rete anche sette giorni su sette, consumando pochissima energia ed offrendo prestazioni elevate.
Requisiti hardware e prima configurazione di Raspberry Pi OS
Per questo progetto vi consigliamo di affidarvi al Raspberry Pi 4 o al più recente e potente Raspberry Pi 5. Visto che si tratta di una configurazione che riguarda l'accesso alla rete è necessario connettere la board tramite cavo ethernet cat6 direttamente al router, cosi da garantire delle performance ottimali. Inoltre, in questa guida daremo per assodato che Raspberry Pi OS sia già installato e configurato.
Se avete necessità di eseguire un primo setup del sistema operativo dovrete dotarvi anche di mouse, tastiera, monitor, microSD per ospitare la distribuzione e i software, e cavo USB-C con relativo alimentatore.
DNS-Over-HTTPS su Pi-hole e Raspberry Pi OS.
Pi-hole è sostanzialmente un DNS sinkhole sotto licenza open source che impedisce la visualizzazione e il caricamento di tutta un serie di contenuti presenti nelle pagina Web, come i banner pubblicitari, senza doversi affidare a software di terze parti da installare singolarmente su ogni device.
Pi-hole funge da server DHCP (Dynamic Host Configuration Protocol), sostituendosi a quello offerto dal router. Questa caratteristica consente al programma di filtrare tutto il traffico di rete dei device connessi alla LAN. Proprio grazie a Pi-hole è possibile implementare DNS-Over-HTTPS su tutti i programmi installati in Raspberry Pi OS.
Partiamo quindi con l'installazione di Pi-hole. Avviamo bash e digitiamo:
sudo apt install wget curl lsb-release
curl -ssl https://install.pi-hole.net | bash
git clone --depth 1 https://github.com/pi-hole/pi-hole.git Pi-hole
cd "Pi-hole/automated install/"
sudo bash basic-install.sh
wget -O basic-install.sh https://install.pi-hole.net
sudo bash basic-install.sh
Per quanto concerne la configurazione completa del software vi rimandiamo direttamente all'articolo dedicato.
Configurare il tunneling Cloudflare per gestire il Proxy DNS-Over-HTTPS
Dopo aver terminato il wizard iniziale ed aver inserito tutti i setting desiderati possiamo focalizzarci sull'implementazione di DNS-Over-HTTPS. Per farlo andiamo a sfruttare il servizio di tunneling offerto da Cloudflare. Dunque torniamo nella shell ed andiamo ad installare i pacchetti ed il demone:
curl -L https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-archive-keyring.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/cloudflare-archive-keyring.gpg] https://pkg.cloudflare.com/cloudflared $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflared.list
sudo apt update && sudo apt install cloudflared
Anche in questo caso per conoscere tutti i dettagli della configurazione del tunnelling vi consigliamo di seguire la guida specifica.
Dopo aver preparato il tutto dovremo occuparci del demone di Cloudflare. Questo componente opera come Proxy DNS-Over-HTTPS. Quindi apriamo il suo file di configurazione:
sudo nano /etc/systemd/system/cloudflared.service
e al suo interno inseriamo:
[Unit]
Description=cloudflared DNS over HTTPS proxy
After=syslog.target network-online.target
[Service]
Type=simple
User=cloudflared
ExecStart=/usr/local/bin/cloudflared proxy-dns --port 5053 --upstream https://1.1.1.1/dns-query --upstream https://1.0.0.1/dns-query
Restart=on-failure
RestartSec=10
KillMode=process
[Install]
WantedBy=multi-user.target
Salviamo le modifiche con CTRL+O e chiudiamo con CTRL+X. Adesso possiamo avviare il tutto:
sudo systemctl enable cloudflared && sudo systemctl start cloudflared
Impostare Pi-hole per utilizzare DNS-Over-HTTPS
Sposiamoci all'interno della WebGUI di Pi-hole. Per farlo digitiamo questo URL all'interno della barra degli indirizzi del browser:
http://pi.hole
In alternativa possiamo utilizzare direttamente l'indirizzo IP locale del Raspberry Pi:
http://192.168.1.12/admin
Nel caso in cui non conoscessimo l'IP locale assegnato al device basterà interrogare il sistema in questo modo:
hostname -I
Dovremmo ottenere come output l'IP del Raspberry Pi:
192.168.1.12
Dopo il login ed il caricamento dell'interfaccia di Pi-hole clicchiamo sul pannello chiamato "Setting". Successivamente, tramite il cursore del mouse selezioniamo la sezione "DNS" ed infine spuntiamo l'opzione "Custom 1 Server IPv4", reperibile sotto la voce "Upstream DNS Servers", ed inseriamo nel campo di testo sottostante questo indirizzo:
http://127.0.0.1/#5053
Assicuriamoci inoltre che la voce "Allow only local requests" sia selezionata. Se tutto dovesse essere andato a buon fine, dopo pochi secondi dovremmo visualizzare il messaggio:
The DNS setting have been updated
A questo punto avremo ultimato tutti i passaggi richiesti ed il nostro Pi-Hole server sarà pronto per utilizzare DNS-Over-HTTPS sulle diverse richieste DNS del client.