Configurare un Raspberry Pi come DNS anti pubblicità (e non solo) con Pi-Hole

· 9 min lettura
Configurare un Raspberry Pi come DNS anti pubblicità (e non solo) con Pi-Hole
Photo by Harrison Broadbent / Unsplash

Mi è arrivato questa mattina il nuovissimo Raspberry Pi Zero W 2 (un nome che riempie la bocca), seconda versione del modello ultra compatto ed economico del Raspberry Pi, con l'aggiunta dei moduli wireless (WiFi e Bluetooth).

In tutto il suo splendore

Motivo di questo acquisto è stato il desiderio di voler impostare un server locale con al suo interno installato Pi-Hole.

Cosa è un Pi-Hole

Un Pi-Hole altro non è che un Raspberry Pi configurato come server DNS locale, quindi installato sulla propria rete, al quale vengono reindirizzate tutte le richieste DNS effettuate dai dispositivi, finalizzato al non restituire alcun indirizzo IP in caso venisse richiesto un dominio di tipo pubblicitario o malevolo, a seconda delle liste configurate o scaricate.

Un Pi-Hole permette, inoltre, di monitorare le richieste di una rete, tenendo traccia di richieste DNS, domini interrogati e connessioni effettuate, il tutto abbellito da una interfaccia colorata e sicuramente user friendly.

Esempio di dashboard

Prerequisiti

  • Una scheda Raspberry Pi (qualsiasi modello va bene, in quanto Pi-Hole richiede un minimo 512MB di RAM per funzionare e qualsiasi modello ne è provvisto)
  • Micro SD da minimo 4GB
  • Qualsiasi programma di flash su dispositivi rimovibili (es. Rufus o Etcher) o, in alternativa, il programma ufficiale della Raspberry Pi Foundation, Raspberry Pi Imager

Installare il sistema base

Pi-Hole può essere installato su uno qualsiasi dei seguenti sistemi:

  • Raspberry OS (precedentemente Raspbian)
  • Ubuntu
  • Debian
  • Fedora
  • CentOS

Eventualmente, Pi-Hole può essere installato anche su un container Docker.

Per installare un'immagine sulla MicroSD, si può intraprendere un approccio per principianti/automatizzato o una procedura più macchinosa, per utenti più esperti. Io, specificatamente, ho intrapreso la via più semplice con l'Imager Raspberry Pi.

Per utenti principianti/procedura automatizzata

Scaricare il tool di scaricamento e installazione Raspberry Pi Imager, disponibile sia su Windows che MacOS e Ubuntu.

Selezionare un sistema dall'elenco fornito (Raspberry Pi OS è il più consigliato).

Selezionare la periferica dove si vorrà installare il sistema.

Infine avviare la procedura.

Impostazioni avanzate durante la scrittura

Qualora si avesse la necessità di impostare ulteriori configurazioni, come ad esempio il nome host, il servizio SSH o una rete WiFi, sarà possibile premendo la combinazione CTRL + SHIFT + X. Ciò aprirà un menù avanzato per configuarare altre eventuali impostazioni.

Per utenti più esperti

Bisognerà recarsi nella pagina di download del sistema desiderato, ovviamente se provvisto di una distribuzione compilata per processori ARM, e scaricare il file immagine.

In questo esempio scaricherò Ubuntu per ARM.

Una volta ottenuta l'immagine del sistema (dovrà essere in formato .IMG), si inserisce la MicroSD nel PC e si apre un programma di scrittura come Rufus.

Selezionato il dispositivo e l'immagine disco, basterà premere su AVVIA e iniziare il processo di scrittura.

Inizializzare il Pi

Nel mio caso specifico, non ho un monitor a cui attaccare il Pi. Più precisamente, non ho un cavo HDMI mini, quindi... Dovrò fare alla cieca.

Questo mi pone in una condizione decisamente scomoda, in quanto dovrò configurare il Pi prima di poterlo accendere per la prima volta, in modo che automaticamente si colleghi al WiFi con almeno il servizio SSH abilitato.

Grazie alle impostazioni avanzate della procedura di scrittura, ho attivato il servizio di SSH e ho configurato automaticamente la rete WiFi, ma vediamo come avrei dovuto fare se non fossi stato in grado di farlo così.

Attivare il servizio SSH

Abilitare il servizio SSH su un Raspberry Pi è estremamente semplice: basterà creare un file vuoto, nominato ssh (senza alcuna estensione), all'interno della partizione /boot.

Configurare una rete WiFi

Per configurare la connessione ad una rete WiFi sarà necessario creare un file chiamato wpa_supplicant.conf e inserire all'interno le informazioni della rete.
È possibile copiare questo codice e modificare solo le informazioni della propria rete:

country=IT
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
ap_scan=1

update_config=1
network={
	ssid="inserire qui il nome rete"
	psk="inserire qui la password di rete"
	key_mgmt=WPA-PSK
}

Dove i campi stanno a significare:

  • country: Il paese dove si risiede, in formato country code (esempio, l'Italia sarà IT. Il Regno Unito GB e così via). Il motivo per cui si deve specificare il country code è perché ogni paese ha regolamentazioni differenti in merito alle specifiche WiFi permesse a norma di legge (per esempio, la potenza per ogni Access Point o il numero di canali)
  • crl_interface: Dove è posizionata, all'interno del sistema, l'interfaccia di controllo per l'applicazione wpa_supplicant
  • ap_scan: Flag impostato a 0 o 1 a seconda se si voglia effettuare una continua scansione degli Access Point e delle informazioni (ESSID, BSSID, frequenza, sicurezza...)
  • update_config: Flag impostato a 0 o 1 a seconda se si voglia aggiornare la configurazione attuale in un file localizzato in /etc/wpa_supplicant
  • network: Informazioni riguardo le reti/la rete a cui ci si può connettere
  • ssid: Nome della rete WiFi
  • psk: Password della rete WiFi, sia in formato testo sia in formato PSK Raw Key

La partizione /boot sarà formattata in FAT32, perciò essa risulterà leggibile se la MicroSD verrà inserita all'interno di un PC Windows.

Contenuto della partizione /boot. All'interno andranno copiati entrambi i file ssh e wpa_supplicant.conf

Collegarsi al Pi

Consiglio di aprire una pagina con le impostazioni del proprio router, in modo da sapere quando il Raspberry si sarà connesso correttamente.

Per collegarsi al proprio router/gateway, si dovrà innanzitutto scoprire quale indirizzo IP esso avrà. Di solito gli viene assegnato l'indirizzo 192.168.1.1, ma per essere sicuri, si dovrà aprire un terminale, digitare ipconfig (Windows) o ifconfig (Linux) e ottenere l'indirizzo di gateway.

Una volta dentro il pannello di controllo del router, bisognerà ottenere l'indirizzo IP del Raspberry.

Il PiHole è caratterizzato dal nome host impostato durante la scrittura del sistema Raspbian

Dopo aver ottenuto l'indirizzo IP e il nome host, sarà possibile stabilire una connessione in SSH al Pi.

Una connessione SSH funziona anche con il nome host

Et voilà! Ora sarà possibile accedere con le credenziali impostate durante la configurazione iniziale o con le credenziali di default, ossia pi:raspberry.

Preparazione

Come best practice è buona cosa aggiornare il sistema prima di ogni installazione.

sudo apt update && sudo apt upgrade sono d'obbligo

Installazione Pi-Hole

Secondo la guida di Pi-Hole, per installare il software sarà possibile installare tutto in maniera automatizzata con uno script preconfezionato, altrimenti sarà possibile scaricare la repository di Pi-Hole e installare tutti i pacchetti manualmente.

Installare Pi-Hole tramite script

Eseguire da terminale questa sola riga di comando:

curl -sSL https://install.pi-hole.net | bash

Una volta eseguito il comando, verranno effettuate tutte le procedure di verifica e installazione dei pacchetti necessari.

Successivamente, il wizard proporrà dei disclaimer e delle impostazioni da dover confermare. Sono le seguenti:

Finita la sbrodolata di disclaimer e impostazioni, l'installazione procederà con le ultime verifiche...

... ed infine l'installazione vera e propria del software.

Dopo pochi minuti (trattandosi di un Pi Zero W 2 ci è voluto davvero poco, probabilmente con un qualsiasi altro Pi ci avrebbe messo ancora meno) sarà mostrata una schermata di riepilogo con link al pannello di controllo e password di accesso.

Alla fine di tutto, il Pi-Hole sarà pronto all'uso e accessibile da interfaccia web!

⚙️
Pannello di controllo raggiungibile all'indirizzo:https://<hostname>/admin

Cambio della password

Come si può vedere dalla schermata di termine installazione, viene generata una password casuale, che può essere cambiata da linea di comando.

Tutto quello che si deve fare è eseguire questo comando:

sudo pihole -a -p

Verrà chiesta una nuova password e la conferma.

Impostare il Pi-Hole come DNS

Lo scopo del Pi-Hole era quello di funzionare come server DNS, perciò, una volta configurato, bisogna impostarlo come tale!

Dalle impostazioni del proprio router, ognuna differente l'una dall'altra, bisognerà cercare le impostazioni del DHCP, ossia tutte quelle impostazioni che vengono assegnate ai dispositivi, vecchi o nuovi, quando si connettono alla nostra rete.

Completata la configurazione, si dovrà riavviare il proprio router, per rendere effettive le modifiche.

Si aggiorna la dashboard Pi-Hole...

E tutto funziona! Le query vengono registrate!

Configurare blocklist aggiuntive

Il Pi-Hole viene fornito di una blocklist di tutto rispetto, consultabile qui:

GitHub - StevenBlack/hosts: 🔒 Consolidating and extending hosts files from several well-curated sources. Optionally pick extensions for porn, social media, and other categories.
🔒 Consolidating and extending hosts files from several well-curated sources. Optionally pick extensions for porn, social media, and other categories. - GitHub - StevenBlack/hosts: 🔒 Consolidating a...

Qualora si volesse aggiungere una blocklist personalizzata o fornita da un servizio terzo, si dovrà solamente andare nel menù di lato, nella sezione "Group Management" e selezionare il sottomenu "AdLists".

Dentro la dashboard del sottomenu, vi sarà come da default una sola lista da importare.

Personalmente suggerisco di implementare anche alcune liste fornite dai servizi Firebog.net, Phishing.Army e EasyList, reperibili qui:

The Big Blocklist Collection
Pi-hole compatible blocklists for you to have a more enjoyable online presence
Phishing Army | The Blocklist to filter Phishing!
The Blocklist to filter Phishing domain! Compatible with Pi-Hole, AdAway, Blokada and any other Host/DNS filtering system.
EasyList - Overview

Selezionato il collegamento alle liste (attenzione, non la home page, ma il collegamento reale della lista contenente i domini da bloccare!) basterà incollare la risorsa dentro l'apposito campo.

Terminati gli inserimenti delle liste, esse andranno scaricate e la lista dei domini andrà aggiornata, nonché unificata in caso di doppioni.

Bisognerà recarsi, quindi, alla pagina di aggiornamento di Gravity, lo script responsabile della creazione del database di domini blacklistati.

E aggiornare manualmente l'inserimento delle liste nel database.

Per verificare il corretto inserimento in database, basterà tornare nella dashboard Pi-Hole e controllare se il numero di host bloccati è aumentato.

Goodbye, moonman! (cit.)

In una scala da 1€ a 10€

Quanto è stato interessante questo articolo?

Fammelo sapere!