Pi-hole: installazione e prima configurazione

Gioxx  —  10/04/2019 — Leave a comment

Uno di quegli articoli “bibbia” per il quale potrei andare avanti a scrivere per ore, ma che mi rendo conto di non poter stendere per evitare di stendere il lettore (sembra una frase scritta da Fedez, ti chiedo scusa, non lo faccio più). Te lo avevo anticipato facendolo trasparire nell’articolo di partenza dedicato a Raspberry Pi (Raspberry Pi: la base di partenza), ora è arrivato il momento di parlarne e di capire come tu puoi creare un server DNS casalingo in grado di proteggerti da siti web pericolosi (prima di tutto) e dalla pubblicità invasiva, con particolare attenzione al filtro che puoi ulteriormente applicare per la protezione della navigazione dei minori.

Pi-hole: installazione e prima configurazione

Pi-hole

Un gran bel progetto che richiede da parte tua il minimo sforzo (dipende molto da quello che cerchi e da quanto in “profondità” vuoi andare per sfruttarne le potenzialità), open source e di libero accesso, sostenuto dalle donazioni volontarie degli utilizzatori (che ti invito a valutare). Pi-hole si definisce come “A black hole for Internet advertisements“, un buco nero per tutta la pubblicità invasiva di Internet, un concetto certamente ben identificativo del progetto, ma che a mio parere risulta un po’ restrittivo rispetto a quello che un prodotto simile può davvero fare per l’utilizzatore finale.

Secondo una definizione certamente più tecnica disponibile sulla Wiki di archlinux, Pi-hole è un:

DNS sinkhole che redige una lista di blocco di domini conosciuti per offrire pubblicità e malware da sorgenti multiple di terze parti. Pi-hole, attraverso l’uso di dnsmasq, elimina semplicemente tutte le richieste di domini nella sua lista di blocco. Questa configurazione implementa efficacemente il blocco della pubblicità a livello di rete senza dover configurare ogni singolo client. Il pacchetto offre una interfaccia web e una a riga di comando.

Se sei abituato a utilizzare Adblock Plus o un qualsivoglia prodotto che svolge lo stesso compito sul tuo browser preferito hai certamente chiaro il concetto alla base: evito alla sorgente che le risorse vengano caricate in un solo colpo e per tutti i dispositivi connessi alla rete, perché Pi-hole mi permette di intercettarle e redirigerle in maniera differente rispetto ai DNS pubblici, ovvero troncando la comunicazione con quei domini che vengono utilizzati per veicolare pubblicità invasiva (e non solo). Il grande vantaggio del prodotto sta certamente nella centralizzazione delle tue operazioni e nella possibilità di scaricare un po’ di lavoro dalle spalle del browser che potrà così rinunciare a un componente aggiuntivo spesso esoso di risorse (dipende da quello che stai utilizzando, nda).

Installazione

Tutto chiaro? D’accordo. A questo punto passiamo al succo vero dell’articolo, installiamo Pi-hole sul tuo RPi (la soluzione certamente più comoda) o su un NAS ammesso che questo ti permetta di far girare Docker, o ancora su una macchina Linux che utilizzi già per fare altro all’interno della tua rete, trovi la lista di compatibilità del prodotto all’indirizzo docs.pi-hole.net/main/prerequesites/#supported-operating-systems.

Io baso il mio articolo su Raspberry Pi (RPi), ho creato una macchina virtuale sul mio Mac con Raspbian a bordo appositamente per catturare qualche screenshot per questo articolo (l’installazione di produzione l’ho fatta ormai circa un mese fa e ho semplicemente dimenticato di crearmi delle prove fotografiche 😅). Cominciamo.

Collegati in SSH al tuo RPi e lancia la stringa di installazione curl -sSL https://install.pi-hole.net | bash esattamente come riportato in home page del sito web di Pi-hole. Dopo un rapido check di sistema (serve capire se hai già tutto a bordo o se sarà necessario installare qualcosa) ti troverai davanti alle schermate di configurazione di Pi-hole:

Ti riporto qui la lista dei passaggi inseriti nella galleria di immagini sopra disponibile, integrando il tutto con ciò che nella galleria non c’è:

  • L’installazione comincia. Premi invio per continuare.
  • Arriverai alla schermata informativa riguardante l’IP da assegnare alla tua installazione Pi-hole: fai in modo che questo sia sempre lo stesso (statico o tramite reservation sul DHCP).
  • Comunica a Pi-Hole che DNS pubblici utilizzare per la risoluzione dei nomi a dominio (nel mio caso ho scelto Google, 8.8.8.8 e 8.8.4.4).
  • Specifica ora che liste di blocco vuoi cominciare a utilizzare. La barra spaziatrice serve per selezionare o deselezionare una voce. Spostati con le freccette nella schermata. Quando terminato, premi invio per confermare. Non preoccuparti di questa scelta, sarà sempre modificabile in un secondo momento.
  • Seleziona entrambi i protocolli di comunicazione (IPv4 e IPv6).
  • Conferma l’indirizzo IP della macchina (RPi) e del tuo router quando richiesto.
  • Quando richiesto, conferma di voler installare l’interfaccia web amministrativa. Servirà un’ulteriore conferma successiva alla richiesta di installazione di lighttpd. Lascia che le richieste (query) vengano loggate (0 – Show everything).
  • A questo punto ti basterà attendere che l’installazione proceda autonomamente fino al termine. Ti verrà mostrata una pagina riepilogativa contenente – tra le altre cose – la password di amministrazione del tuo nuovo Pi-hole.

Puoi ora collegarti alla console di Pi-hole utilizzando l’indirizzo che ti è stato riportato nella schermata riepilogativa, esempio http://192.168.1.10/admin. Salvo errori, ti troverai davanti alla console del software, dovrai quindi fare clic sulla voce Login (nella colonna di sinistra) e inserire la password che ti è stata precedentemente fornita, solo così potrai accedere alla gestione completa del tuo nuovo giocattolo.

Pi-hole: installazione e prima configurazione 11

Utilizzo

Ci siamo, fino a qui sei stato capace di installare Pi-hole sul tuo RPi, non ti resta che utilizzarlo e metterlo in pista per tutti i client della tua rete, prima però credo sia necessario un po’ di tuning e personalizzazione.

Cosa c’è da sapere? Beh, di certo fossi in te darei un’occhiata alle Impostazioni (Settings), all’interno delle quali troverai le informazioni sull’installazione (con possibilità di lanciare alcuni comandi rapidi, come il riavvio o lo spegnimento di sistema, o il blocco dell’attività di logging), le blacklist sottoscritte, i DNS pubblici utilizzati per la risoluzione dei nomi a dominio. Pi-hole può inoltre fare da server DHCP se lo preferisci, sostituendo così una delle funzioni che un router svolge in maniera predefinita. Seppur correttamente funzionante, preferisco che questo compito continui a svolgerlo il mio Fritz!Box e che lui faccia passare le richieste DNS dal mio RPi (così da sottostare al comando di Pi-hole).

Per concludere, troverai una schermata dedicata alla modifica della console e alle API che puoi utilizzare per integrare un differente softwae con Pi-hole, ma anche la sezione Privacy (per il livello / profondità di log da utilizzare) e il Teleporter, ovvero il modulo di Pi-hole che ti permette di esportare la tua configurazione e importarla su una differente installazione (che è grosso modo ciò che fai per portare a termine le operazioni di backup e restore di qualsivoglia tuo dato).

Cosa ho modificato?

Tralasciando le blacklist delle quali ti parlo tra poco, ho certamente ritoccato la parte relativa ai DNS, obbligando Pi-hole a interrogare Google utilizzando DNSSEC (ti ho parlato di questa tecnologia in un articolo relativo a Firefox: Firefox: DNS over HTTPS (di Cloudflare, ma non solo)):

Pi-hole: installazione e prima configurazione 1

In seguito ho ritoccato la parte relativa alla console, chiedendole di non mostrarmi alcuni domini bloccati nella totalità dei casi (indirizzi utilizzati per le pubblicità invasive delle applicazioni Android, quei banner che ti portano spesso ad abbonamenti mai richiesti, nda), ma questo è certamente un comportamento che farà comodo anche a te quando inizierai ad avere dello storico di navigazione tramite Pi-hole.

Le blocklist

È così che le chiama Pi-hole (SettingsBlocklists). Si tratta di blacklist composte da domini dei quali puoi quasi certamente fare a meno, sono quelli che generalmente propongono banner pubblicitari invasivi ma anche pericolosi script che possono danneggiare il tuo browser (Malware Domains). Dopo aver fatto piazza pulita di alcune liste che ho inizialmente utilizzato e studiato, sono arrivato ad avere una situazione della quale sono molto soddisfatto, che “limito” in qualche maniera grazie all’utilizzo della Whitelist di Pi-hole (e di questo ne parliamo presto perché c’è una novità in pentola, promesso).

L’attuale mia situazione vede in uso queste liste:

URL listaScopo
https://raw.githubusercontent.com/lightswitch05/hosts/master/ads-and-tracking.txtUna ricca lista in grado di bloccare domini che tracciano le attività di navigazione quotidiane, valida anche per tutto ciò che riguarda le applicazioni che caricano banner su Android e iOS. Un conto sono le pubblicità (che possiamo anche sopportare), un altro sono quei contenuti che portano ad abbonamenti non graditi e mai richiesti consapevolmente.
https://www.squidblacklist.org/downloads/dg-ads.aclStesso scopo della lista poco sopra, questa viene costantemente aggiornata da squidblacklist.org (non conosci Squid? Dai un'occhiata qui).
https://raw.githubusercontent.com/StevenBlack/hosts/master/hostsSteven Black raggruppa diverse Block List (Awdware, Malware, Fraud, Scam, Spam, Tracking e Cryptomining) cercando di eliminare tutti i falsi positivi e tenendo il suo lavoro costantemente aggiornato. Se dai un'occhiata al suo spazio GitHub troverai liste per filtrare anche altri tipi di siti web.
https://raw.githubusercontent.com/hoshsadiq/adblock-nocoin-list/master/hosts.txtSulla falsa riga di quanto faccio già con la NoCoin per Adblock Plus, questa lista è già pronta (e costantemente aggiornata) per essere digerita da Pi-Hole, permette di bloccare tutti i siti web che utilizzano script di mining che mettono in difficoltà le risorse del tuo PC.
https://mirror1.malwaredomains.com/files/justdomainsCome per la NoCoin di cui ti parlavo giusto qui sopra, anche la Harmful WebSites trova una sua versione di tipo host da poter dare in pasto a Pi-Hole. Blocca quindi i domini che sono veicolo di malware. Curata da malwaredomains.com.
https://www.squidblacklist.org/downloads/dg-malicious.aclBlocca i domini che sono veicolo di malware. Curata da squidblacklist.org.
https://zeustracker.abuse.ch/blocklist.php?download=domainblocklistLista di domini potenzialmente dannosi, che possono essere bloccati in tranquillità, nasce da un progetto molto ambizioso che fornisce diversi dati in merito ai tanti abusi presenti sulla rete. Curata da abuse.ch.
http://theantisocialengineer.com/AntiSocial_Blacklist_Community_V1.txtBlocca tutti quei domini che tentano di truffare il visitatore facendogli credere di essere in tutto e per tutto su siti reali, istituzionali, di una certa rilevanza, come per esempio quelli delle banche, di Microsoft, Google, ecc.
https://phishing.army/download/phishing_army_blocklist_extended.txtUna creatura di Andrea 'Drego' Draghetti data alla luce relativamente poco tempo fa. Il sito web ufficiale lo trovi all'indirizzo phishing.army, la lista viene aggiornata spesso e sempre verificata per evitare quanto più possibile errori e falsi positivi. Ti protegge da siti web che tentano di frodarti durante la navigazione. Ti consiglio personalmente la versione estesa, contenente anche i sottodomini.

(Se vuoi copiare e incollare facilmente tutti gli URL, fai riferimento a questa pagina: github.com/gioxx/ph-whitelist/blob/master/domains/blocklists.md).

Pi-hole: installazione e prima configurazione 12

Si va così a creare un recinto di protezione più per i siti web potenzialmente pericolosi che per la pubblicità in sé. Per quel mestiere sai bene che allo stato attuale continuo a utilizzare Adblock Plus e i moduli X Files, in un futuro chissà, potrei virare verso qualcosa “Pi-hole oriented“.

Liste predefinite e altri progetti

Se ti interessa verificare o recuperare in qualche maniera le liste proposte di default in fase di installazione di Pi-hole, trovi qui un riferimento ufficiale su GitHub: github.com/pi-hole/pi-hole/wiki/Customising-sources-for-ad-lists.

Noterai che oltre queste, su Internet esistono una quantità non meglio definita di progetti che vogliono in qualche maniera alimentare il già ricchissimo database di domini dai quali stare bene alla larga. Io cerco sempre di dare un’occhiata a liste e curatori per capire quante e quali di loro si può meglio occupare dell’aggiornamento delle regole del mio Pi-hole, per evitare spiacevoli inconvenienti durante la quotidiana navigazione dei client di casa e dei dispositivi accesi e connessi h24. C’è a tal proposito un progetto molto corposo al quale ho dato un’occhiata ma che allo stato attuale ho abbandonato a causa di liste non ben controllate: blocklist.site/app, una vera e propria vetrina che mette a disposizione liste per ogni necessità. Magari tu ne conosci altri che vuoi condividere (mi farebbe piacere), l’area commenti è a tua disposizione.

Aggiornamenti giornalieri

Alcune liste che ti ho suggerito nella tabella qui sopra vengono aggiornate quotidianamente. Per questo motivo ho personalmente deciso di modificare il comportamento di Pi-Hole chiedendogli di fare un aggiornamento completo delle sottoscrizioni ogni 24h. Il comportamento predefinito del software indica che questa azione viene compiuta una volta ogni settimana (vedi: discourse.pi-hole.net/t/updating-blocklist-every-day/16853).

Lo puoi vedere tu stesso da Terminale: more /etc/cron.d/pihole. Una riga simile a questa dovrebbe indicarti quando viene eseguito l’aggiornamento del modulo Gravity:

7 3 * * 7 root PATH="$PATH:/usr/local/bin/" pihole updateGravity >/var/log/pihole_updateGravity.log || cat /var/log/pihole_updateGravity.log

Se non sai interpretare la prima parte della stringa non preoccuparti, si tratta di una sequenza che riporta minuto-ora-arco del mese-mesi-giorno leggibile da Crontab. Vuoi capire meglio per cosa sta? Eccoti servito: crontab.guru/#7_3_*_*_7. Per eseguire un aggiornamento quotidiano ho modificato il file tramite comando sudo nano /etc/cron.d/pihole, commentando la riga sopra riportata (basta inserire il simbolo del cancelletto # a inizio riga) e riportando subito sotto questo:

7 3 * * 0-6 root PATH="$PATH:/usr/local/bin/" pihole updateGravity >/var/log/pihole_updateGravity.log || cat /var/log/pihole_updateGravity.log

Noti nulla di diverso? Esatto. L’ultima parte indica al Crontab di eseguire il lavoro dal giorno 0 al giorno 6, ovvero dalla domenica al sabato (crontab.guru/#7_3_*_*_0-6).

Salva la modifica con la combinazione CTRL + X da tastiera, seguita da S per indicare sì quando Nano chiederà se scrivere le modifiche sul file.

In conclusione

Difficile concludere quando in realtà c’è altro da dire, ma l’articolo è davvero diventato troppo lungo e pesante. Nella “prossima puntata” ti parlerò di Whitelist e della possibilità di automatizzare l’aggiornamento di quest’ultima anche se nativamente non previsto. La novità esiste già e sono certo che ti piacerà (se l’argomento Pi-hole ti ha interessato, chiaramente), dovrai solo pazientare una manciata di giorni ancora.

In generale c’è ancora molto da approfondire riguardo l’argomento RPi 🙂

Nel frattempo se hai qualsiasi dubbio o domanda in merito a quanto scritto, l’area commenti è a tua totale disposizione (anche senza registrazione a Disqus). Spero di aver stuzzicato la tua curiosità e che tu possa suggerirmi ulteriori fonti da consultare in merito al progetto.


Crediti:
Condividi l'articolo con i tuoi contatti: