Dì addio alle pubblicità con PiHole

Sarà capitato a tutti, almeno una volta, di imbattersi in siti web o applicazioni piene di pop-up e pubblicità che ne rendono quasi impossibile l’utilizzo. Sul web esistono parecchie soluzioni per bloccare le pubblicità, come, ad esempio, le estensioni da installare nei browser web o alcune app come, ad esempio, Ad Guard. Tutte queste soluzioni, però, non ci permettono di avere la totale libertà sul tipo di pubblicità da bloccare o, ad esempio, non potremmo aggiungere domini che normalmente non vengono bloccati.

In questo articolo vedremo come creare un server dns self-hosted, grazie al quale avremo il pieno controllo su tutto ciò che succede nella nostra rete, avendo la possibilità di aggiungere blacklist di domini da bloccare, non solo di pubblicità, ma anche siti di tracciamento o siti malevoli (malware, pishing ecc.).

Se hai un vecchio pc che oramai non usi più, puoi dargli un seconda vita trasformarlo nel tuo server dns privato, in quanto i prerequisiti di sistema richiesti da pihole per funzionare correttamente sono minimi.

Per questa guida verrà utilizzato Ubuntu Server, ma il tutto può essere configurato anche su altre distro Linux come, ad esempio, Debian.

Innanzitutto, è necessario che il nostro server abbia un indirizzo ip statico. Questo perché, qualora dovesse cambiare, i dispositivi collegati nella rete locale non saranno più in grado di comunicare con esso. Per rendere l’ip statico, dobbiamo dapprima capire qual’è il nome dell’interfaccia di rete che andremo ad utilizzare per connetterci ad internet.

Verifichiamo se cloud-init è installato o meno, con il comando

$ apt-cache pkgnames | grep cloud-init

Se il comando riceve un output, allora diamo i comandi

$ sudo systemctl stop cloud-init
$ sudo systemctl disable cloud-init

Da terminale, digitiamo

$ ip a

L’output del programma dovrebbe essere simile a questo:

1: 10: <LOOPEACK, UP, LOWER _UP> mtu 65536 qdisc noqueue state UNKNOWN group default glen 1000
link/loomback 00:00:00:00:00:00 00 00:00:00:00:00:00
inet 127.0.0.1/8 scope host 10
valic_Ift forever preferred _Ift forever inet6:: 1/128 scope host
valid_ Ift forever preferred_lft forever
2: enpOs6: <BROADCAST, MULTICAST, UP ,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default glen 1000 link/ether de:c1:81:48:06:88 brd ff:ff:ff:ff:ff:ff
net 10.211.55.9/24 metric 100 brd 10.211.55.255 scope global dynamic enpose walid Ift 86341sec preferred lft 86341sec
inet6 fded:ef6d:1do6:bdee:cc1:81ff:feda:368a/64 scope global dynamic metmpadde noprefixroute
valid_ift 2591960sec preferred_Ift 604760sec inet6 fedo::cc1:81ff:fe4a:368a/64 scope link valid_Ift forever preferred_Ift forever

L’interfaccia da utilizzare sarà quella con la dicitura “state up

Nel nostro caso, il nome è “enp0s6”

Ora che abbiamo individuato il nome dell’interfaccia, dobbiamo modificare il file di configurazione di rete. Digitiamo

$ cd /etc/netplan

Con questo comando ci siamo collocati nella cartella netplan, dove sono presenti i file di configurazione del network. Ora digitiamo

$ sudo nano 00-installer-config.yaml

per aprire l’editor di testo nano e modificare il file come segue:

# This is the network config written by subiquity
network:
  ethernets: 
    enpOs6:
           addresses:
           - 192.168.1.100/24 
          nameservers:
            addresses: [1.1.1.1, 1.0.0.1]
          routes:
               - to: default 
                 via: 192.168.1.1
version: 2

Si noti come alla voce “via” sia necessario inserire l’indirizzo ip del nostro modem. Salviamo il file e digitiamo il comando

$ sudo netplan apply

per rendere persistenti le modifiche.

Ora, se digitiamo nuovamente il comando “ip a” l’output che dovremmo ricevere è il seguente

1: 10: (LOOPBACK, UF ‚LOWER_UF> mtu 65536 qdisc noqueue state UNKNOWN group default glen 1000
link/loopback 00:00:00:00:00:00 ard 00:00:00:00:00:09
inet 127.0.0.1/8 scope host 10
valid_Ift forever preferred_Ift forever inet6 :: 1/128 scove host
valid_Ift forewer preferred_Ift forever
2: eMpos6: BROADCAST, MULTICAST ,UP ,LOWER_UP> mtu 1500 qdisc prito_fast state UP group default glen 1000 linkether de:c1:81:4a:36:8a brd +*:**:**:**:**:** inet 192.166.1.100/24 brd 192.166.1.255 scope global enpose
valid_Ift forever preferred_Ift forever
inet6 2a01:e11:400c:886o:cc1:81ff:feta:368a/64 scope global dynamic mngtmpadde noprefixroute
valid_lft 86048sec preferred_Ift 86048sec inet6 fedo::cc1:81ff:fe4a:368a/64 scope link walid_Ift forever preferred_lft forever

Si noti come l’indirizzo ip assegnato sia effettivamente quello che avevamo inserito nel file di configurazione.

Finalmente ora possiamo procedere con l’installazione di pihole. Da terminale, digitiamo

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

A questo punto verranno visualizzati a schermo alcuni pop up. Rispondiamo alle domande secondo le nostre esigenze, fin quando non terminerà l’installazione e compariranno alcune infomazioni importanti, come l’indirizzo da visitare per entrare nella dashboard e la password admin:

Visitando la pagina http://pi.hole/admin e inserendo la password assegnata, possiamo finalmente accedere la alla dashboard del nostro dns server.

Per aggiungere le blacklist (liste di domini bloccati) che ci consentiranno di bloccare le pubblicità (e non solo) spostiamoci su “Adlist“.

Qui è possibile aggiungere tanti tipi di blacklist (adblock, anti tracking, anti malware ecc.) secondo le nostre esigenze. Per comodità, vi consigliamo di visitare questo link, dove troverete tutte le blacklist di cui avete bisogno:

https://navigaresenzapubblicita.altervista.org/configurazione-e-personalizzazione-di-pi-hole/

Una volta aggiunte tutte le blacklist, clicchiamo su “Tools” > “Update Gravity” per aggiornare il database dei domini

Ora è arrivato il momento di collegare i nostri dispositivi della rete locale per utilizzare il server dns. Abbiamo due opzioni:

  • Impostare il server solo sui dispositivi dove abbiamo bisogno di bloccare le pubblicità
  • Impostare il server dns direttamente nel router di casa: in questo modo, tutti i dispositivi connessi alla rete cominceranno ad utilizzare il vostro server dns di default, senza il bisogno di essere configurati uno ad uno.

Come hai detto? Non puoi utilizzare il server fuori casa?

Ebbene, abbiamo pensato anche a questo. Ovviamente, normalmente non è possibile utilizzare il server se non si è connessi alla rete locale. Ci sono diverse soluzioni per risolvere questo problema: la più gettonata consiste nel creare un tunnel vpn, di solito con il software open source OpenVpn, e instradare tutti i pacchetti della nostra connessione tramite la vpn. Ciò però, oltre ad essere abbastanza complesso da configurare, può diminuire notevolmente le performance della connessione dati, soprattutto se la nostra connessione di casa non è a banda ultra larga. La soluzione che verrà proposta in questo articolo è pressoché immediata in termini di configurazione e non influenzerà in alcun modo le performance della connessione. Il software che utilizzeremo si chiama ZeroTier: è un tool che ci permette di creare una rete virtuale privata, alla quale potremo connettere i nostri dispositivi, anche sotto indirizzi ip pubblici differenti, per consentirgli di comunicare tra loro. Inoltre, essendo un software open source, è estremamente sicuro ed utilizza una crittografia end-to-end a 256 bit.

Per utilizzare zerotier, innanzitutto rechiamoci sul sito https://my.zerotier.com/login per creare un nuovo account. Successivamente, cliccando su “create network”, otterremo un codice univoco (ID) che utilizzeremo per connettere i dispositivi alla rete virtuale.

Per installare zerotier sul server dns, digitiamo

$ curl -s https://install.zerotier.com/ | sudo bash

Una volta terminata l’installazione digitiamo

sudo zerotier-cli join network_id

Dove al posto di “network id” dovremo inserire il codice univoco della rete virtuale. Successivamente, recandoci nel panello di controllo di zeotier, sarà necessario abilitare il dispostivo selezionando il checkbox in basso

Fatto! Ora il server è connesso alla rete. Non vi resta che scaricare l’app (disponibile sia per iphone che per android) sui vostri dispositivi, connettervi alla rete virtuale e utilizzare l’indirizzo ip del server come server dns.

N.B: L’indirizzo del server non sarà più quello della rete locale, ma quello della rete virtuale alla quale è stato connesso. E’ possibile trovare tutte le informazioni nel pannello di controllo di zerotier.

Se hai configurato tutto correttamente, adesso potrai utilizzare il tuo adblock privato ovunque ti trovi!

Leave a Reply

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.