La popolarità di cui godono le estensioni ad blocker come uBlock Origin, Ghostery o Adblock Plus, sempre ai primi posti nei marketplace dedicati di ogni browser, testimoniano il grado di insofferenza degli utenti nei confronti dell’eccesso di pubblicità nella propria navigazione. Pur efficaci, queste componenti non sono prive di mancanze e controindicazioni. Innanzitutto l’efficacia della protezione anti-tracking che offrono è confinata all’interno del browser: dispositivi IoT, smart TV o le singole app per smartphone continueranno a tracciare e visualizzare pubblicità. Operando poi all’interno del javascript engine del browser, intercettare ed impedire l’esecuzione del codice che implementa il tracciamento ha un costo sulla navigazione in termini di prestazioni e consumo di memoria. Infine, nel corso del tempo i siti web hanno raffinato le loro tecniche di rilevamento degli ad blocker, e le utilizzano per limitare o impedire del tutto la fruizione dei loro contenuti fino a che l’utente non inserirà il suddetto sito nella whitelist dell’estensione.
In questa guida verrà esplorata l’implementazione di Pi-hole, un sistema di anti-tracciamento e di blocco dei contenuti pubblicitari che opera ad un livello più basso dello stack di rete, quello DNS, e in grado di proteggere con un’unica installazione tutti gli host all’interno del network.
Introduzione a Pi-hole
Pi-hole è un server DNS per ambienti Linux pensato per lavorare in combinazione con multiple domain blacklist, le stesse utilizzate nelle estensioni ad-blocker. Più formalmente, Pi-hole è un blackhole DNS, un server che fornisce intenzionalmente informazioni errate.
Pi-hole utilizza questa modalità operativa strategicamente per implementare il blocco di contenuti indesiderati. In quanto server DNS, si prende carico delle richieste client per la traduzione dei nomi a dominio nei corrispondenti indirizzi IPv4 o IPv6 generate quando l’utente cerca di raggiungere una pagina web (e tutti gli assets, come immagini, font, media o script, referenziati da essa). Se un dominio non risulta essere inserito in una delle liste con cui Pi-hole è configurato, la risoluzione DNS procede nominalmente e al client viene restituito il reale indirizzo IP della risorsa. Se il dominio presenta invece una corrispondenza, la risposta DNS viene inibita o alterata per non contenere nessun indirizzo IP. La pagina web non ha dunque modo di caricare o contattare la risorsa considerata malevola.
Questo tipo di approccio risolve o mitiga i problemi riferibili ai classici metodi anti-tracciamento, inclusi quelli sopra menzionati.
- Operando a livello DNS, non richiede configurazioni e installazioni software (con relativa manutenzione e overhead prestazionale) per ogni host della propria rete.
- È valido per qualsiasi dispositivo e qualsiasi ambiente diverso dal browser che effettui comunicazioni di rete.
- Una risposta DNS alterata o bloccata è indistinguibile da un problema di rete reale, il che rende molto più complesso per i siti visitati rilevare la presenza di un meccanismo di ad-blocking e agire di conseguenza.
“Pi” nel nome Pi-hole rivela sia le origini del progetto come distribuzione specifica destinata alla RaspberryPi, sia il sistema operativo principalmente supportato. Anche se è presente il supporto ufficiale per le principali distribuzioni Linux (Ubuntu, Fedora, Debian, CentOS), i componenti del progetto sono pensati per integrarsi out-of-the-box, senza necessità di configurazioni aggiuntive, con una installazione minimale di Raspbian Jessie o Stretch.
Installazione di Pi-hole
I prerequisiti che costituiscono la base della procedura sono i seguenti:
- Una RaspberryPi 2 o superiore.
- Installazione di Raspbian Jessie Lite o Stretch Lite.
- Connessione alla rete locale e a Internet via Ethernet.
- Accesso SSH o con tastiera e mouse alla RaspberryPi.
L’installer di Pi-hole è completamente scritto in bash, ed una volta eseguito guida interattivamente l’utente attraverso una serie di domande. Il primo passo è, ovviamente, scaricarlo:
pi@pihole:~ $ wget -O basic-install.sh https://install.pi-hole.net
Affinché lo script possa portare a termine correttamente l’installazione, installando tutti i componenti e le loro dipendenze, sarà necessario avviarlo con i privilegi di root.
pi@pihole:~ $ sudo bash basic-install.sh [✓] Root user check
L’installer ci informa ora che la nostra Pi-hole dovrà essere dotata di indirizzo IP statico. Questo è necessario poiché la Pi-hole sarà configurata come server DNS nei parametri di tutti gli host della rete, e deve pertanto essere sempre raggiungibile allo stesso indirizzo, che configureremo a breve.
La prima scelta da fare è selezionare l’interfaccia di rete della RaspberryPi sul quale Pi-hole resterà in ascolto per query DNS in arrivo. Nel nostro caso si tratta di eth0.
Ora è il momento di selezionare l’Upstream DNS Provider. Pi-hole, come molti server DNS per dispositivi casalinghi, non implementa un vero e proprio DNS ricorsivo, limitandosi a un DNS forwarder. Invece di ripercorrere la gerarchia DNS per ottenere la risposta alla query del client, la inoltra a un altro server DNS e attende da esso la risposta che recapiterà poi al client originale. Possiamo scegliere quello che preferiamo tra i più utilizzati server DNS, come quelli di Google, OpenDNS, Quad9 nonché Cloudflare. Se abbiamo già implementato altrove un nostro server DNS ricorsivo, possiamo inserirlo con l’opzione Custom.
L’installer Pi-hole supporta il download diretto di alcune tra le più utilizzate blacklist di domini. Si tratta di liste redatte collaborativamente, rilasciate sotto licenza aperta. In questo passaggio è possibile selezionare quali andranno a formare l’elenco dei domini bloccati dalla nostra Pi-hole.
Select Protocol ci permette di scegliere se contattare Pi-hole con IPv4, IPv6 o entrambi. Il consiglio è, a meno che non si sia certi che il proprio router e i client abbiano IPv6 configurato correttamente, di disabilitarlo per evitare inconsistenze nel comportamento di Pi-hole.
A questo punto configuriamo effettivamente il nostro IPv4/6 statico. Raspian di default ottiene un indirizzo attraverso DHCP. L’installer di Pi-hole si offre di convertire l’attuale assegnazione automatica in una configurazione statica, oppure di specificare manualmente indirizzo, subnet mask e default gateway.
È possibile scegliere se installare o meno l’interfaccia web (basata su PHP e Bootstrap) di Pi-hole, AdminLTE. Sebbene la gestione sia possibile anche da riga di comando attraverso l’utility pihole, la comodità di un pannello web è uno dei punti di forza del progetto. L’installer si offre di installare lighttpd come server web per servire l’interfaccia, ma è possibile ignorare l’opzione e configurare successivamente Apache o nginx.
Infine, è possibile scegliere se attivare o meno il log di tutte le query inviate al sistema.
L’installazione è adesso completata, come ci conferma la schermata di riepilogo dalla quale appunteremo l’indirizzo web del pannello di controllo Pi-hole e la relativa password di login.
Conclusioni
Sono state dunque introdotte le caratteristiche di Pi-hole e la sua installazione su RaspberryPi. Domani sarà pubblicato un approfondimento che tratterà l’integrazione di Pi-hole nella rete locale esistente, l’operatività dell’interfaccia web, le opzioni disponibili in post-installazione, la manutenzione e aggiornamento.