23 novembre 2018

tutorial: come filtrare il web (content filter, parental control, ads blocker) con raspberry pi


Benvenuti!
Questo tutorial vi fornirà una guida su come implementare un filtro a più livelli per bloccare contenuti sensibili, ads e proteggere le ricerche online. Il tutto sfruttando un Raspberry Pi a mo' di router in cascata sulla propria connessione domestica.

Nota: il presente articolo contiene una infarinatura generale ed alcuni dettagli sono stati tralasciati. Se volete approfondire, non esitate a lasciare un commento o a contattarmi sui canali social.

Prima di addentrarci, vi riporto il video di supporto a questa guida che ho pubblicato sul mio canale YouTube:


Inoltre vi segnalo che nella pagina dedicata troverete tutti i tutorial da me pubblicati.


1. l'attrezzatura minima per iniziare


Per portare a termine il progetto occorrono:
  • un Raspberry Pi che abbia doppia connettività: Ethernet (o un dongle WiFi USB aggiuntivo) per la connessione verso il router, e WiFi per consentire agli altri dispositivi di collegarsi ad esso + una microSD + un alimentatore da almeno 2.1A
  • Raspbian OS Lite
  • un PC per accedere via SSH al Pi per la configurazione
  • un router (e quindi una connessione ad Internet) a cui collegare in cascata il Pi
Per quanto riguarda il primo punto non occorre altro hardware aggiuntivo in quanto tutte le configurazioni vanno fatte in SSH. Sarà in ogni caso indispensabile avere un alimentatore che eroghi in uscita almeno 2.1A di corrente (oppure se il router ha delle porte USB 3.0, collegarlo direttamente lì).
Raspbian OS Lite è la scelta migliore poiché è un sistema leggero, consuma poche risorse ed ha la possibilità di far installare dai repository tutto il necessario.
Il PC sarà lo strumento con cui configurare da remoto il Pi, mentre il router è ovviamente necessario per poter collegare il Pi in cascata e per fornire connettività di rete.


2. l'architettura ed i passi base


L'idea è quella di posizionare il Raspberry Pi tra il router (e quindi il Web) ed i vari dispositivi che vogliono connettersi ad Internet. Inoltre, si vuole tenere il router libero da ogni possibile intralcio cosicché i device connessi direttamente ad esso possano continuare a navigare senza blocchi, a differenza degli altri che passeranno per il Pi.


La figura sintetizza il risultato a cui si vuole arrivare, ma la guida consentirà di "fermarsi" a diversi livelli, in base alle proprie necessità.
Nota: è chiaro che in una struttura così configurata è indispensabile avere password più che robuste per impedire accessi indesiderati al router e alla configurazione stessa del Pi o dei tool su di esso installati.
Nota 2: sarà necessario installare e configurare diversi software, si richiede un minimo di conoscenze del mondo *nix.

Per iniziare va scaricato Raspbian OS Lite dal sito ufficiale della fondazione inglese (link diretto al download), scompattato ed installato su microSD con le tipiche procedure di scrittura (es: via etcher.io). Una volta completata la scrittura dell'immagine su microSD, prima di inserirla sul Pi, assicurarsi di aver creato un file (anche vuoto, il contenuto non è importante) chiamato semplicemente ssh (senza alcuna estensione) da posizionare all'interno della partizione denominata boot: questo file consentirà l'abilitazione della connessione remota SSH fin dal primo avvio e senza alcuna altra operazione aggiuntiva.

Completati i due step iniziali ed inserita la microSD nel Pi, connetterlo al router via cavo Ethernet ed alimentarlo con l'alimentatore (oppure via USB 3.0 del router, se presente). A questo punto, da PC, sarà possibile collegarsi via SSH (es: con putty o altre utility su Windows, oppure via shell/terminale su Linux/macOS) all'indirizzo IP assegnato dal router al Pi.
Nota: l'indirizzo IP sarà mostrato in una pagina dedicata ai dispositivi connessi all'interno della app di amministrazione del router, web app solitamente raggiungibile con il browser alla URL http://192.168.0.1/ oppure http://192.168.1.1/  
Nota 2: l'IP sarà del tipo 192.168.yyy.XXX, dove usualmente yyy varrà 0 o 1 (ma può arrivare fino a 255) ed XXX un numero compreso da 2 e 255. Una volta scovato l'IP del Pi, il comando per collegarsi ad esso è: ssh pi@192.168.yyy.XXX e richiederà l'accettazione del certificato più la password di accesso che di default è raspberry

Una volta connessi in SSH al Pi, il primo passo è quello di cambiare la password dell'utente pi, così da rendere l'accesso un po' più robusto. Per far ciò è sufficiente digitare passwd ed inserire la vecchia password (raspberry) quindi digitare la nuova desiderata e ripeterla alla successiva richiesta.
Ora conviene assicurarsi che il sistema sia aggiornato lanciando il comando sudo apt update seguito da sudo apt upgrade && sudo apt dist-upgrade che si occuperà di prelevare e configurare gli eventuali nuovi pacchetti rilevati.
Infine, è eventualmente possibile cambiare il locale e le altre impostazioni di base tramite l'utility di configurazione richiamabile con sudo raspi-config (qui la documentazione ufficiale).


Terminate queste operazioni preliminari, si è pronti per configurare l'architettura.


2. hotspot


La prima cosa da fare è trasformare il Raspberry Pi in un hotspot cosicché il Pi stesso possa consentire a device terzi di collegarsi via WiFi al router, e da lì al Web. In pratica il Pi si trasformerà in un secondo router wireless posto in cascata rispetto a quello che ha accesso alla rete dati.

Per raggiungere tale scopo è sufficiente installare (e configurare) hostapd attivandolo su di un bridge di rete. L'idea è quella di far transitare i dati in entrata (sull'interfaccia di rete wlan0) verso il router (a cui il Pi è collegato tramite l'interfaccia di rete eth0).
Nota: questa configurazione permette al router di continuare ad assegnare gli indirizzi di rete interni ai dispositivi che potranno quindi continuare a dialogare senza difficoltà tra loro (anche con quelli connessi per via diretta al router)
Nota 2: tale configurazione permette di centralizzare sul Pi tutte le configurazioni che i device a lui connessi "erediteranno"


L'occorrente per la creazione di un hotspot è facilmente installabile con il comando sudo apt install hostapd bridge-utils il quale si occuperà di prelevare tutto il necessario. Una volta terminata l'installazione, digitare sudo systemctl stop hostapd per interrompere il servizio hostapd che va dapprima configurato.


Il primo step, come anticipato, è quello di creare il bridge tra le interfacce eth0 e wlan0. Per fare ciò digitare in sequenza i comandi:

     sudo brctl addbr br0
     sudo brctl addif br0 eth0 wlan0 (ignorare eventuali messaggi di errore).

A questo punto occorre istruire il sistema della presenza della nuova interfaccia di rete br0, modificando con sudo nano /etc/network/interfaces e aggiungendo alla fine del file le seguenti istruzioni:

        iface eth0 inet manual
        iface eth0 inet6 manual
        iface wlan0 inet manual
        iface wlan0 inet6 manual

        auto br0
        iface br0 inet manual
            bridge_ports eth0 wlan0

Nota: premere CTRL + X, digitare Y e quindi premere invio per uscire dall'editor e salvare le modifiche apportate. Questa sequenza di comandi andrà fatta ogni qual volta si utilizzerà nano per editare file sul Pi

A questo punto occorre forzare il blocco dell'assegnazione di indirizzi IP alle interfacce di rete wlan0 ed eth0 poiché l'unica attiva resterà br0. E a quest'ultima va assegnato un indirizzo IP statico. Digitare sudo nano /etc/dhcpcd.conf ed inserire alla fine del file le seguenti istruzioni:

        denyinterfaces eth0 wlan0

        interface br0
        static ip_address=192.168.1.200/24
        static routers=192.168.1.1
        static domain_name_servers=192.168.1.1 8.8.8.8

Nota: in grassetto sono indicati gli indirizzi IP del gateway (il router, 192.168.1.1) e quello statico da assegnare al Pi (192.1681.200). Vanno modificati in base allo schema utilizzato dal router in uso e all'IP che si vuole assegnare al Raspberry Pi 
Nota 2: per il momento si utilizzeranno come server DNS per la risoluzione delle URL l'IP del router (e di conseguenza quelli del nostro ISP di rete) e 8.8.8.8 che è il DNS fornito da Google (come secondario da usare in caso quelli di base non dovessero funzionare)

Terminate le impostazioni di rete, tocca ad hostapd editando con il comando sudo nano /etc/hostapd/hostapd.conf il file di configurazione ed inserendo le seguenti istruzioni:

        interface=wlan0
        bridge=br0
        #driver=nl80211
        ssid=[nome desiderato della rete, es: SecureNetwork]
        hw_mode=g
        channel=7
        wmm_enabled=0
        macaddr_acl=0
        auth_algs=1
        ignore_broadcast_ssid=0
        wpa=2
        wpa_passphrase=[password della rete]
        wpa_key_mgmt=WPA-PSK
        wpa_pairwise=TKIP
        rsn_pairwise=CCMP

Nota: da notare che si sta indicando di creare l'hotspot sull'interfaccia wlan0 tramite il bridge br0 
Nota 2: in ssid va indicato il nome della rete (quella a cui i device si connetteranno) e in wpa_passphrase la password di autenticazione

Salvato il file, esso va specificato nella configurazione generale di hostapd cosicché possa essere utilizzato correttamente. Lanciare il comando sudo nano /etc/default/hostapd ed inserire sotto la riga #DAEMON_CONF l'istruzione DAEMON_CONF="/etc/hostapd/hostapd.conf" che specifica appunto di utilizzare quel file di configurazione creato poc'anzi. Riavviare il servizio con il comando sudo service hostapd start e provare a collegarsi alla rete appena creata (che dovrebbe apparire nella scansione delle reti WiFi circostanti). Inserita la password di autenticazione, provare a navigare su https://www.google.com/ per accertasi del funzionamento del hotspot.


Complimenti: il primo passo è stato completato. Riavviare con il comando sudo reboot -n il Raspberry Pi.


3. content filtering


Il Raspberry Pi funge ora da hotspot e chiunque può collegarsi tramite di lui ad Internet: è giunto il momento di iniziare ad investigare il contenuto delle richieste che passano, ed eventualmente limitare l'accesso a determinate risorse. Il Pi ora ha anche un IP statico, quindi per collegarsi ad esso via SSH sarà sufficiente digitare su PC il comando ssh pi@192.168.1.200 (se questo è l'IP statico che è stato impostato nel punto 2 nel file dhcpcd.conf).

Ci sono più livelli di controllo che è possibile ottenere: uno generico analizzando le richieste passanti ed uno più specifico inibendo l'accesso a quei domini classificati come "non sicuri". Ad aiutarci a raggiungere lo scopo ci sono due tool, e2guardian (sito ufficiale) ed i DNS FamilyShield di openDNS (sito ufficiale).

Per installare e2guardian basta lanciare il comando sudo apt install e2guardian squid che si occuperà di scaricare il suddetto tool ed il cache server squid (utilizzato da e2guardian per velocizzare i controlli nel corso del tempo). E visto che per qualche motivo e2guardian "dimentica" di attivarsi in automatico in caso di riavvio del Raspberry Pi, è importante forzarne l'avvio durante il boot di sistema. Lanciare il comando sudo nano /etc/rc.local e aggiungere prima dell'istruzione finale exit 0 l'istruzione sudo service e2guardian restart che forzerà appunto l'avvio automatico di e2guardian ad ogni accensione del Pi.
Il tool di filtering è già auto configurato per funzionare con squid e non necessita (né lui, né il cache server) di alcuna configurazione aggiuntiva, ad eccezione dell'inserimento di eventuali regole personalizzate.

Le regole di e2guardian sono definite all'interno dell'alberatura /etc/e2guardian/lists in diversi file che gestiscono domini, pagine, IP, parole e così via. Ad esempio, se si volesse impedire l'accesso a Facebook, basterà lanciare il comando sudo nano bannedsitelist ( dopo essere entrati nella cartella su indicata con cd /etc/e2guardian/lists ) e sotto al blocco #Blanket SSL/CONNECT Block aggiungere:

        facebook.com
        m.facebook.com

Riavvare il tool con sudo service e2guardian restart e impostate sul client connesso all'hotspot il Proxy di rete inserendo come indirizzo l'IP statico del Pi e come porta la 8080 (per tutti i protocolli). Provando a navigare verso facebook.com tale sito risulterà irraggiungibile. Se non viene impostato il proxy il sito si aprirà correttamente.


Per utilizzare, invece, i DNS FamilyShield di openDNS che impediscono l'accesso a siti porno, siti di phishing, siti malevoli e quant'altro (censiti automaticamente e tenuti aggiornati da Cisco), sarà sufficiente lanciare il comando sudo nano /etc/dhcpcd.conf e modificare la riga static domain_name_servers sostituendo gli IP presenti (ci sono quelli del router e quello del DNS di  Google che erano stati inseriti nel punto 2) con gli IP forniti da openDNS, ottenendo la stringa finale static domain_name_servers=208.67.222.123 208.67.220.123 che punta proprio ai DNS FamilyShield.

Ora sarà sufficiente lanciare il comando sudo service dhcpcd restart per riavviare il client dhcp e provare a collegarsi all'hotspot. A questo punto come nel caso precedente, ci sono due scenari possibili: accedendo alla URL https://welcome.opendns.com/ si ottiene un avviso che informa che non si stanno utilizzando i DNS di FamilyShield, invece impostando un proxy sulla connessione verso l'indirizzo IP 192.168.1.200 porta 8080 (per tutti i protocolli presenti) e riaccendendo alla stessa URL si otterrà un messaggio di successo.
Nota: il proxy va impostato su ogni dispositivo che si collegherà all'hotspot, la sua impostazione è indispensabile per passare attraverso e2guardian (che è esposto sulla porta 8080) e sfruttare quindi i DNS FamilyShield 
Nota 2: disattivando il proxy sul client si uscirà fuori dal controllo di e2guardian e dei DNS FamilyShield, questo significa che qualsiasi dispositivo non imposti il proxy fondamentalmente navigherà senza blocchi esattamente come fosse collegato direttamente al router. Nei punti successivi si impedirà questo scenario!

Complimenti: il secondo passo è stato completato. Riavviare con il comando sudo reboot -n il Raspberry Pi.


4. abilitare le ricerche sicure e la restrizione dei contenuti


Arrivati a questo punto è possibile collegarsi al Web tramite l'hotspot creato dal Pi e, impostando il proxy su ogni client connesso, limitare il traffico verso determinati siti considerati malevoli o "non adatti" a tutte le tipologie di utenti. In più, personalizzando e2guardian sarà anche possibile aggiungere maggiori restrizioni, anche temporanee, verso specifici domini (es: Social Network) o pagine web con URL che contengono parole indesiderate (e quindi, in teoria, che trattano argomenti che non si vogliono rendere disponibili).

Questo significa che cercando parole "sensibili" sui motori di ricerca (es: Google) oppure cliccando su link trovati online, si potranno comunque ottenere risultati indesiderati (magari sotto forma di foto e video). Risultati che se cliccati saranno poi filtrati dai DNS di FamilyShiled oppure da e2guardian. Fatto sta che si può fare di più ed istruire almeno i motori di ricerca a non mostrare contenuti considerati unsafe.

Per ottenere questo scopo, si deve configurare il Raspberry Pi affinché forzi le richieste a domini come Google, YouTube, Bing, DuckDuckGo, etc, verso le loro rispettive URL di safesearch. E fare ciò significa costruirsi un proprio DNS interno capace di fare questa sovrascrittura e poi rigirare la nuova URL verso il Web.

Dopo essersi collegati al Pi via SSH da PC con il comando ssh pi@192.168.1.200 (se questo è l'IP statico impostato nel punto 2 nel file dhcpcd.conf), un possibile strumento capace di costruire un DNS personale è bind9, facilmente installabile con il comando sudo apt install bind9 dnsutils che oltre al tool installa anche delle utility da utilizzare per verificare la correttezza delle impostazioni che saranno effettuate.

La configurazione di bind9 prevede la creazione di un DNS con delle policy di "zona" le quali istruiranno la riscrittura delle chiamate verso le varianti sicure dei domini (es: restrict.youtube.com invece che youtube.com e forcesafesearch.google.com invece che google.com). Per fare ciò lanciare il comando sudo nano /etc/bind/named.conf.options e modificare i seguenti punti:

        al di sotto della riga // forwarders inserire:

            forwarders {
                208.67.222.123;
                208.67.220.123;
            };

        commentare con // la riga dnssec-validation auto;

        inserire dnssec-validation no;

        commentare con // la riga listen-on-v6 { any; };

        aggiungere listen-on { 192.168.1.200; };
        (dove 192.168.1.200 è l'indirizzo IP statico del Raspberry Pi)

        aggiungere a seguire response-policy { zone "safesearch"; };


Salvato il file, lanciare il comando sudo nano /etc/bind/named.conf.local inserendo al suo interno le istruzioni:

        zone "safesearch" IN {
            type master;
            file "/etc/bind/safesearch.zone";
            allow-query { none; };
        };

e salvato anch'esso, eseguire sudo nano /etc/bind/safesearch.zone in cui inserire tutto il seguente blocco di codice:

$ORIGIN safesearch.
$TTL 1H
@       IN       SOA       localhost. root.localhost. (
                           7
                           1H
                           15m
                           30d
                           2h )
                           NS LOCALHOST.

www.duckduckgo.com        IN CNAME safe.duckduckgo.com.

www.youtube.com           IN CNAME restrict.youtube.com.
m.youtube.com             IN CNAME restrict.youtube.com.
youtubei.googleapis.com   IN CNAME restrict.youtube.com.
youtube.googleapis.com    IN CNAME restrict.youtube.com.
www.youtube-nocookie.com  IN CNAME restrict.youtube.com.

google.com                IN CNAME forcesafesearch.google.com.
google.com.uk             IN CNAME forcesafesearch.google.com.
google.ad                 IN CNAME forcesafesearch.google.com.
google.ae                 IN CNAME forcesafesearch.google.com.
google.com.af             IN CNAME forcesafesearch.google.com.
google.com.ag             IN CNAME forcesafesearch.google.com.
google.com.ai             IN CNAME forcesafesearch.google.com.
google.al                 IN CNAME forcesafesearch.google.com.
google.am                 IN CNAME forcesafesearch.google.com.
google.co.ao              IN CNAME forcesafesearch.google.com.
google.com.ar             IN CNAME forcesafesearch.google.com.
google.as                 IN CNAME forcesafesearch.google.com.
google.at                 IN CNAME forcesafesearch.google.com.
google.com.au             IN CNAME forcesafesearch.google.com.
google.az                 IN CNAME forcesafesearch.google.com.
google.ba                 IN CNAME forcesafesearch.google.com.
google.com.bd             IN CNAME forcesafesearch.google.com.
google.be                 IN CNAME forcesafesearch.google.com.
google.bf                 IN CNAME forcesafesearch.google.com.
google.bg                 IN CNAME forcesafesearch.google.com.
google.com.bh             IN CNAME forcesafesearch.google.com.
google.bi                 IN CNAME forcesafesearch.google.com.
google.bj                 IN CNAME forcesafesearch.google.com.
google.com.bn             IN CNAME forcesafesearch.google.com.
google.com.bo             IN CNAME forcesafesearch.google.com.
google.com.br             IN CNAME forcesafesearch.google.com.
google.bs                 IN CNAME forcesafesearch.google.com.
google.bt                 IN CNAME forcesafesearch.google.com.
google.co.bw              IN CNAME forcesafesearch.google.com.
google.by                 IN CNAME forcesafesearch.google.com.
google.com.bz             IN CNAME forcesafesearch.google.com.
google.ca                 IN CNAME forcesafesearch.google.com.
google.cd                 IN CNAME forcesafesearch.google.com.
google.cf                 IN CNAME forcesafesearch.google.com.
google.cg                 IN CNAME forcesafesearch.google.com.
google.ch                 IN CNAME forcesafesearch.google.com.
google.ci                 IN CNAME forcesafesearch.google.com.
google.co.ck              IN CNAME forcesafesearch.google.com.
google.cl                 IN CNAME forcesafesearch.google.com.
google.cm                 IN CNAME forcesafesearch.google.com.
google.cn                 IN CNAME forcesafesearch.google.com.
google.com.co             IN CNAME forcesafesearch.google.com.
google.co.cr              IN CNAME forcesafesearch.google.com.
google.com.cu             IN CNAME forcesafesearch.google.com.
google.cv                 IN CNAME forcesafesearch.google.com.
google.com.cy             IN CNAME forcesafesearch.google.com.
google.cz                 IN CNAME forcesafesearch.google.com.
google.de                 IN CNAME forcesafesearch.google.com.
google.dj                 IN CNAME forcesafesearch.google.com.
google.dk                 IN CNAME forcesafesearch.google.com.
google.dm                 IN CNAME forcesafesearch.google.com.
google.com.do             IN CNAME forcesafesearch.google.com.
google.dz                 IN CNAME forcesafesearch.google.com.
google.com.ec             IN CNAME forcesafesearch.google.com.
google.ee                 IN CNAME forcesafesearch.google.com.
google.com.eg             IN CNAME forcesafesearch.google.com.
google.es                 IN CNAME forcesafesearch.google.com.
google.com.et             IN CNAME forcesafesearch.google.com.
google.fi                 IN CNAME forcesafesearch.google.com.
google.com.fj             IN CNAME forcesafesearch.google.com.
google.fm                 IN CNAME forcesafesearch.google.com.
google.fr                 IN CNAME forcesafesearch.google.com.
google.ga                 IN CNAME forcesafesearch.google.com.
google.ge                 IN CNAME forcesafesearch.google.com.
google.gg                 IN CNAME forcesafesearch.google.com.
google.com.gh             IN CNAME forcesafesearch.google.com.
google.com.gi             IN CNAME forcesafesearch.google.com.
google.gl                 IN CNAME forcesafesearch.google.com.
google.gm                 IN CNAME forcesafesearch.google.com.
google.gp                 IN CNAME forcesafesearch.google.com.
google.gr                 IN CNAME forcesafesearch.google.com.
google.com.gt             IN CNAME forcesafesearch.google.com.
google.gy                 IN CNAME forcesafesearch.google.com.
google.com.hk             IN CNAME forcesafesearch.google.com.
google.hn                 IN CNAME forcesafesearch.google.com.
google.hr                 IN CNAME forcesafesearch.google.com.
google.ht                 IN CNAME forcesafesearch.google.com.
google.hu                 IN CNAME forcesafesearch.google.com.
google.co.id              IN CNAME forcesafesearch.google.com.
google.ie                 IN CNAME forcesafesearch.google.com.
google.co.il              IN CNAME forcesafesearch.google.com.
google.im                 IN CNAME forcesafesearch.google.com.
google.co.in              IN CNAME forcesafesearch.google.com.
google.iq                 IN CNAME forcesafesearch.google.com.
google.is                 IN CNAME forcesafesearch.google.com.
google.it                 IN CNAME forcesafesearch.google.com.
google.je                 IN CNAME forcesafesearch.google.com.
google.com.jm             IN CNAME forcesafesearch.google.com.
google.jo                 IN CNAME forcesafesearch.google.com.
google.co.jp              IN CNAME forcesafesearch.google.com.
google.co.ke              IN CNAME forcesafesearch.google.com.
google.com.kh             IN CNAME forcesafesearch.google.com.
google.ki                 IN CNAME forcesafesearch.google.com.
google.kg                 IN CNAME forcesafesearch.google.com.
google.co.kr              IN CNAME forcesafesearch.google.com.
google.com.kw             IN CNAME forcesafesearch.google.com.
google.kz                 IN CNAME forcesafesearch.google.com.
google.la                 IN CNAME forcesafesearch.google.com.
google.com.lb             IN CNAME forcesafesearch.google.com.
google.li                 IN CNAME forcesafesearch.google.com.
google.lk                 IN CNAME forcesafesearch.google.com.
google.co.ls              IN CNAME forcesafesearch.google.com.
google.lt                 IN CNAME forcesafesearch.google.com.
google.lu                 IN CNAME forcesafesearch.google.com.
google.lv                 IN CNAME forcesafesearch.google.com.
google.com.ly             IN CNAME forcesafesearch.google.com.
google.co.ma              IN CNAME forcesafesearch.google.com.
google.md                 IN CNAME forcesafesearch.google.com.
google.me                 IN CNAME forcesafesearch.google.com.
google.mg                 IN CNAME forcesafesearch.google.com.
google.mk                 IN CNAME forcesafesearch.google.com.
google.ml                 IN CNAME forcesafesearch.google.com.
google.com.mm             IN CNAME forcesafesearch.google.com.
google.mn                 IN CNAME forcesafesearch.google.com.
google.ms                 IN CNAME forcesafesearch.google.com.
google.com.mt             IN CNAME forcesafesearch.google.com.
google.mu                 IN CNAME forcesafesearch.google.com.
google.mv                 IN CNAME forcesafesearch.google.com.
google.mw                 IN CNAME forcesafesearch.google.com.
google.com.mx             IN CNAME forcesafesearch.google.com.
google.com.my             IN CNAME forcesafesearch.google.com.
google.co.mz              IN CNAME forcesafesearch.google.com.
google.com.na             IN CNAME forcesafesearch.google.com.
google.com.nf             IN CNAME forcesafesearch.google.com.
google.com.ng             IN CNAME forcesafesearch.google.com.
google.com.ni             IN CNAME forcesafesearch.google.com.
google.ne                 IN CNAME forcesafesearch.google.com.
google.nl                 IN CNAME forcesafesearch.google.com.
google.no                 IN CNAME forcesafesearch.google.com.
google.com.np             IN CNAME forcesafesearch.google.com.
google.nr                 IN CNAME forcesafesearch.google.com.
google.nu                 IN CNAME forcesafesearch.google.com.
google.co.nz              IN CNAME forcesafesearch.google.com.
google.com.om             IN CNAME forcesafesearch.google.com.
google.com.pa             IN CNAME forcesafesearch.google.com.
google.com.pe             IN CNAME forcesafesearch.google.com.
google.com.pg             IN CNAME forcesafesearch.google.com.
google.com.ph             IN CNAME forcesafesearch.google.com.
google.com.pk             IN CNAME forcesafesearch.google.com.
google.pl                 IN CNAME forcesafesearch.google.com.
google.pn                 IN CNAME forcesafesearch.google.com.
google.com.pr             IN CNAME forcesafesearch.google.com.
google.ps                 IN CNAME forcesafesearch.google.com.
google.pt                 IN CNAME forcesafesearch.google.com.
google.com.py             IN CNAME forcesafesearch.google.com.
google.com.qa             IN CNAME forcesafesearch.google.com.
google.ro                 IN CNAME forcesafesearch.google.com.
google.ru                 IN CNAME forcesafesearch.google.com.
google.rw                 IN CNAME forcesafesearch.google.com.
google.com.sa             IN CNAME forcesafesearch.google.com.
google.com.sb             IN CNAME forcesafesearch.google.com.
google.sc                 IN CNAME forcesafesearch.google.com.
google.se                 IN CNAME forcesafesearch.google.com.
google.com.sg             IN CNAME forcesafesearch.google.com.
google.sh                 IN CNAME forcesafesearch.google.com.
google.si                 IN CNAME forcesafesearch.google.com.
google.sk                 IN CNAME forcesafesearch.google.com.
google.com.sl             IN CNAME forcesafesearch.google.com.
google.sn                 IN CNAME forcesafesearch.google.com.
google.so                 IN CNAME forcesafesearch.google.com.
google.sm                 IN CNAME forcesafesearch.google.com.
google.sr                 IN CNAME forcesafesearch.google.com.
google.st                 IN CNAME forcesafesearch.google.com.
google.com.sv             IN CNAME forcesafesearch.google.com.
google.td                 IN CNAME forcesafesearch.google.com.
google.tg                 IN CNAME forcesafesearch.google.com.
google.co.th              IN CNAME forcesafesearch.google.com.
google.com.tj             IN CNAME forcesafesearch.google.com.
google.tk                 IN CNAME forcesafesearch.google.com.
google.tl                 IN CNAME forcesafesearch.google.com.
google.tm                 IN CNAME forcesafesearch.google.com.
google.tn                 IN CNAME forcesafesearch.google.com.
google.to                 IN CNAME forcesafesearch.google.com.
google.com.tr             IN CNAME forcesafesearch.google.com.
google.tt                 IN CNAME forcesafesearch.google.com.
google.com.tw             IN CNAME forcesafesearch.google.com.
google.co.tz              IN CNAME forcesafesearch.google.com.
google.com.ua             IN CNAME forcesafesearch.google.com.
google.co.ug              IN CNAME forcesafesearch.google.com.
google.com.uy             IN CNAME forcesafesearch.google.com.
google.co.uz              IN CNAME forcesafesearch.google.com.
google.com.vc             IN CNAME forcesafesearch.google.com.
google.co.ve              IN CNAME forcesafesearch.google.com.
google.vg                 IN CNAME forcesafesearch.google.com.
google.co.vi              IN CNAME forcesafesearch.google.com.
google.com.vn             IN CNAME forcesafesearch.google.com.
google.vu                 IN CNAME forcesafesearch.google.com.
google.ws                 IN CNAME forcesafesearch.google.com.
google.rs                 IN CNAME forcesafesearch.google.com.
google.co.za              IN CNAME forcesafesearch.google.com.
google.co.zm              IN CNAME forcesafesearch.google.com.
google.co.zw              IN CNAME forcesafesearch.google.com.
google.cat                IN CNAME forcesafesearch.google.com.

www.google.com                IN CNAME forcesafesearch.google.com.
www.google.co.uk              IN CNAME forcesafesearch.google.com.
www.google.ad                 IN CNAME forcesafesearch.google.com.
www.google.ae                 IN CNAME forcesafesearch.google.com.
www.google.com.af             IN CNAME forcesafesearch.google.com.
www.google.com.ag             IN CNAME forcesafesearch.google.com.
www.google.com.ai             IN CNAME forcesafesearch.google.com.
www.google.al                 IN CNAME forcesafesearch.google.com.
www.google.am                 IN CNAME forcesafesearch.google.com.
www.google.co.ao              IN CNAME forcesafesearch.google.com.
www.google.com.ar             IN CNAME forcesafesearch.google.com.
www.google.as                 IN CNAME forcesafesearch.google.com.
www.google.at                 IN CNAME forcesafesearch.google.com.
www.google.com.au             IN CNAME forcesafesearch.google.com.
www.google.az                 IN CNAME forcesafesearch.google.com.
www.google.ba                 IN CNAME forcesafesearch.google.com.
www.google.com.bd             IN CNAME forcesafesearch.google.com.
www.google.be                 IN CNAME forcesafesearch.google.com.
www.google.bf                 IN CNAME forcesafesearch.google.com.
www.google.bg                 IN CNAME forcesafesearch.google.com.
www.google.com.bh             IN CNAME forcesafesearch.google.com.
www.google.bi                 IN CNAME forcesafesearch.google.com.
www.google.bj                 IN CNAME forcesafesearch.google.com.
www.google.com.bn             IN CNAME forcesafesearch.google.com.
www.google.com.bo             IN CNAME forcesafesearch.google.com.
www.google.com.br             IN CNAME forcesafesearch.google.com.
www.google.bs                 IN CNAME forcesafesearch.google.com.
www.google.bt                 IN CNAME forcesafesearch.google.com.
www.google.co.bw              IN CNAME forcesafesearch.google.com.
www.google.by                 IN CNAME forcesafesearch.google.com.
www.google.com.bz             IN CNAME forcesafesearch.google.com.
www.google.ca                 IN CNAME forcesafesearch.google.com.
www.google.cd                 IN CNAME forcesafesearch.google.com.
www.google.cf                 IN CNAME forcesafesearch.google.com.
www.google.cg                 IN CNAME forcesafesearch.google.com.
www.google.ch                 IN CNAME forcesafesearch.google.com.
www.google.ci                 IN CNAME forcesafesearch.google.com.
www.google.co.ck              IN CNAME forcesafesearch.google.com.
www.google.cl                 IN CNAME forcesafesearch.google.com.
www.google.cm                 IN CNAME forcesafesearch.google.com.
www.google.cn                 IN CNAME forcesafesearch.google.com.
www.google.com.co             IN CNAME forcesafesearch.google.com.
www.google.co.cr              IN CNAME forcesafesearch.google.com.
www.google.com.cu             IN CNAME forcesafesearch.google.com.
www.google.cv                 IN CNAME forcesafesearch.google.com.
www.google.com.cy             IN CNAME forcesafesearch.google.com.
www.google.cz                 IN CNAME forcesafesearch.google.com.
www.google.de                 IN CNAME forcesafesearch.google.com.
www.google.dj                 IN CNAME forcesafesearch.google.com.
www.google.dk                 IN CNAME forcesafesearch.google.com.
www.google.dm                 IN CNAME forcesafesearch.google.com.
www.google.com.do             IN CNAME forcesafesearch.google.com.
www.google.dz                 IN CNAME forcesafesearch.google.com.
www.google.com.ec             IN CNAME forcesafesearch.google.com.
www.google.ee                 IN CNAME forcesafesearch.google.com.
www.google.com.eg             IN CNAME forcesafesearch.google.com.
www.google.es                 IN CNAME forcesafesearch.google.com.
www.google.com.et             IN CNAME forcesafesearch.google.com.
www.google.fi                 IN CNAME forcesafesearch.google.com.
www.google.com.fj             IN CNAME forcesafesearch.google.com.
www.google.fm                 IN CNAME forcesafesearch.google.com.
www.google.fr                 IN CNAME forcesafesearch.google.com.
www.google.ga                 IN CNAME forcesafesearch.google.com.
www.google.ge                 IN CNAME forcesafesearch.google.com.
www.google.gg                 IN CNAME forcesafesearch.google.com.
www.google.com.gh             IN CNAME forcesafesearch.google.com.
www.google.com.gi             IN CNAME forcesafesearch.google.com.
www.google.gl                 IN CNAME forcesafesearch.google.com.
www.google.gm                 IN CNAME forcesafesearch.google.com.
www.google.gp                 IN CNAME forcesafesearch.google.com.
www.google.gr                 IN CNAME forcesafesearch.google.com.
www.google.com.gt             IN CNAME forcesafesearch.google.com.
www.google.gy                 IN CNAME forcesafesearch.google.com.
www.google.com.hk             IN CNAME forcesafesearch.google.com.
www.google.hn                 IN CNAME forcesafesearch.google.com.
www.google.hr                 IN CNAME forcesafesearch.google.com.
www.google.ht                 IN CNAME forcesafesearch.google.com.
www.google.hu                 IN CNAME forcesafesearch.google.com.
www.google.co.id              IN CNAME forcesafesearch.google.com.
www.google.ie                 IN CNAME forcesafesearch.google.com.
www.google.co.il              IN CNAME forcesafesearch.google.com.
www.google.im                 IN CNAME forcesafesearch.google.com.
www.google.co.in              IN CNAME forcesafesearch.google.com.
www.google.iq                 IN CNAME forcesafesearch.google.com.
www.google.is                 IN CNAME forcesafesearch.google.com.
www.google.it                 IN CNAME forcesafesearch.google.com.
www.google.je                 IN CNAME forcesafesearch.google.com.
www.google.com.jm             IN CNAME forcesafesearch.google.com.
www.google.jo                 IN CNAME forcesafesearch.google.com.
www.google.co.jp              IN CNAME forcesafesearch.google.com.
www.google.co.ke              IN CNAME forcesafesearch.google.com.
www.google.com.kh             IN CNAME forcesafesearch.google.com.
www.google.ki                 IN CNAME forcesafesearch.google.com.
www.google.kg                 IN CNAME forcesafesearch.google.com.
www.google.co.kr              IN CNAME forcesafesearch.google.com.
www.google.com.kw             IN CNAME forcesafesearch.google.com.
www.google.kz                 IN CNAME forcesafesearch.google.com.
www.google.la                 IN CNAME forcesafesearch.google.com.
www.google.com.lb             IN CNAME forcesafesearch.google.com.
www.google.li                 IN CNAME forcesafesearch.google.com.
www.google.lk                 IN CNAME forcesafesearch.google.com.
www.google.co.ls              IN CNAME forcesafesearch.google.com.
www.google.lt                 IN CNAME forcesafesearch.google.com.
www.google.lu                 IN CNAME forcesafesearch.google.com.
www.google.lv                 IN CNAME forcesafesearch.google.com.
www.google.com.ly             IN CNAME forcesafesearch.google.com.
www.google.co.ma              IN CNAME forcesafesearch.google.com.
www.google.md                 IN CNAME forcesafesearch.google.com.
www.google.me                 IN CNAME forcesafesearch.google.com.
www.google.mg                 IN CNAME forcesafesearch.google.com.
www.google.mk                 IN CNAME forcesafesearch.google.com.
www.google.ml                 IN CNAME forcesafesearch.google.com.
www.google.com.mm             IN CNAME forcesafesearch.google.com.
www.google.mn                 IN CNAME forcesafesearch.google.com.
www.google.ms                 IN CNAME forcesafesearch.google.com.
www.google.com.mt             IN CNAME forcesafesearch.google.com.
www.google.mu                 IN CNAME forcesafesearch.google.com.
www.google.mv                 IN CNAME forcesafesearch.google.com.
www.google.mw                 IN CNAME forcesafesearch.google.com.
www.google.com.mx             IN CNAME forcesafesearch.google.com.
www.google.com.my             IN CNAME forcesafesearch.google.com.
www.google.co.mz              IN CNAME forcesafesearch.google.com.
www.google.com.na             IN CNAME forcesafesearch.google.com.
www.google.com.nf             IN CNAME forcesafesearch.google.com.
www.google.com.ng             IN CNAME forcesafesearch.google.com.
www.google.com.ni             IN CNAME forcesafesearch.google.com.
www.google.ne                 IN CNAME forcesafesearch.google.com.
www.google.nl                 IN CNAME forcesafesearch.google.com.
www.google.no                 IN CNAME forcesafesearch.google.com.
www.google.com.np             IN CNAME forcesafesearch.google.com.
www.google.nr                 IN CNAME forcesafesearch.google.com.
www.google.nu                 IN CNAME forcesafesearch.google.com.
www.google.co.nz              IN CNAME forcesafesearch.google.com.
www.google.com.om             IN CNAME forcesafesearch.google.com.
www.google.com.pa             IN CNAME forcesafesearch.google.com.
www.google.com.pe             IN CNAME forcesafesearch.google.com.
www.google.com.pg             IN CNAME forcesafesearch.google.com.
www.google.com.ph             IN CNAME forcesafesearch.google.com.
www.google.com.pk             IN CNAME forcesafesearch.google.com.
www.google.pl                 IN CNAME forcesafesearch.google.com.
www.google.pn                 IN CNAME forcesafesearch.google.com.
www.google.com.pr             IN CNAME forcesafesearch.google.com.
www.google.ps                 IN CNAME forcesafesearch.google.com.
www.google.pt                 IN CNAME forcesafesearch.google.com.
www.google.com.py             IN CNAME forcesafesearch.google.com.
www.google.com.qa             IN CNAME forcesafesearch.google.com.
www.google.ro                 IN CNAME forcesafesearch.google.com.
www.google.ru                 IN CNAME forcesafesearch.google.com.
www.google.rw                 IN CNAME forcesafesearch.google.com.
www.google.com.sa             IN CNAME forcesafesearch.google.com.
www.google.com.sb             IN CNAME forcesafesearch.google.com.
www.google.sc                 IN CNAME forcesafesearch.google.com.
www.google.se                 IN CNAME forcesafesearch.google.com.
www.google.com.sg             IN CNAME forcesafesearch.google.com.
www.google.sh                 IN CNAME forcesafesearch.google.com.
www.google.si                 IN CNAME forcesafesearch.google.com.
www.google.sk                 IN CNAME forcesafesearch.google.com.
www.google.com.sl             IN CNAME forcesafesearch.google.com.
www.google.sn                 IN CNAME forcesafesearch.google.com.
www.google.so                 IN CNAME forcesafesearch.google.com.
www.google.sm                 IN CNAME forcesafesearch.google.com.
www.google.sr                 IN CNAME forcesafesearch.google.com.
www.google.st                 IN CNAME forcesafesearch.google.com.
www.google.com.sv             IN CNAME forcesafesearch.google.com.
www.google.td                 IN CNAME forcesafesearch.google.com.
www.google.tg                 IN CNAME forcesafesearch.google.com.
www.google.co.th              IN CNAME forcesafesearch.google.com.
www.google.com.tj             IN CNAME forcesafesearch.google.com.
www.google.tk                 IN CNAME forcesafesearch.google.com.
www.google.tl                 IN CNAME forcesafesearch.google.com.
www.google.tm                 IN CNAME forcesafesearch.google.com.
www.google.tn                 IN CNAME forcesafesearch.google.com.
www.google.to                 IN CNAME forcesafesearch.google.com.
www.google.com.tr             IN CNAME forcesafesearch.google.com.
www.google.tt                 IN CNAME forcesafesearch.google.com.
www.google.com.tw             IN CNAME forcesafesearch.google.com.
www.google.co.tz              IN CNAME forcesafesearch.google.com.
www.google.com.ua             IN CNAME forcesafesearch.google.com.
www.google.co.ug              IN CNAME forcesafesearch.google.com.
www.google.com.uy             IN CNAME forcesafesearch.google.com.
www.google.co.uz              IN CNAME forcesafesearch.google.com.
www.google.com.vc             IN CNAME forcesafesearch.google.com.
www.google.co.ve              IN CNAME forcesafesearch.google.com.
www.google.vg                 IN CNAME forcesafesearch.google.com.
www.google.co.vi              IN CNAME forcesafesearch.google.com.
www.google.com.vn             IN CNAME forcesafesearch.google.com.
www.google.vu                 IN CNAME forcesafesearch.google.com.
www.google.ws                 IN CNAME forcesafesearch.google.com.
www.google.rs                 IN CNAME forcesafesearch.google.com.
www.google.co.za              IN CNAME forcesafesearch.google.com.
www.google.co.zm              IN CNAME forcesafesearch.google.com.
www.google.co.zw              IN CNAME forcesafesearch.google.com.
www.google.cat                IN CNAME forcesafesearch.google.com.

www.bing.com              IN CNAME strict.bing.com.


A questo punto riavviare bind9 con il comando sudo service bind9 restart e verificare con il comando sudo named-checkconf -z /etc/bind/named.conf che non ci siano errori di configurazione.

Il passo seguente con il comando sudo nano /etc/dhcpcd.conf è nuovamente quello di modificare gli indirizzi IP del DNS facendoli puntare a bind9, editando la riga static domain_name_servers=192.168.1.200 così da farla puntare all'indirizzo IP statico del Pi (e quindi bind9). Infine con un sudo service dhcpcd restart riavviare il client dhcp (ed eventualmente forzare con sudo systemctl daemon-reload l'aggiornamento).

Per verificare che venga rispettata la nostra zona "sicura", verificare con i comandi seguenti:

    nslookup www.google.com
    nslookup www.youtube.com
    nslookup www.bing.com

che vengano restituiti rispettivamente i domini

        canonical name = forcesafesearch.google.com.
        canonical name = restrict.youtube.com.
        canonical name = strict.bing.com.

E collegando un dispositivo all'hotspot (impostando il proxy) accedendo alla URL https://welcome.opendns.com/ dovrà apparire il messaggio di successo. Invece, cercando su Google parole "sensibili" (es: https://www.google.it/search?q=porn) non dovranno apparire risultati indesiderati (e soprattutto né immagini o video), oppure provando ad accedere a siti non affidabili o considerati non adatti a tutti gli utenti (es: https://www.pornhub.com/) openDNS (o e2guardian) dovranno continuare a bloccarli.

Complimenti: il terzo passo è stato completato. Riavviare con il comando sudo reboot -n il Raspberry Pi.


5. bloccare le connessioni fuori dal proxy


Come detto, finora ogni client connesso all'hotspot senza impostazione del proxy può navigare sul Web senza passare per tutte le configurazioni di sicurezza fatte. L'idea è quella di bloccare le richieste libere e forzare l'impostazione del suddetto proxy.

Ancora una volta, dopo essersi collegati al Pi via SSH da PC con il comando ssh pi@192.168.1.200 (se questo è l'IP statico impostato nel punto 2 nel file dhcpcd.conf), si dovrà installare il tool ebtables con il comando sudo apt install ebtables poiché non presente sul sistema.
Completata l'installazione, eseguire in sequenza i 5 comandi:

    sudo ebtables -t broute -A BROUTING -p IPv4 --ip-protocol 6 --ip-destination-port 80 -j redirect --redirect-target ACCEPT

    sudo ebtables -t broute -A BROUTING -p IPv4 --ip-protocol 6 --ip-destination-port 443 -j redirect --redirect-target ACCEPT


    sudo iptables -t nat -A PREROUTING -i br0 -p tcp --dport 80 -j REDIRECT --to-port 8080


    sudo iptables -t nat -A PREROUTING -i br0 -p tcp --dport 443 -j REDIRECT --to-port 8080


    sudo iptables-save | sudo tee /etc/iptables/rules.v4



Collegandosi all'hotspot senza impostare il proxy e provando a navigare (ad esempio verso il sito https://welcome.opendns.com/) il Pi bloccherà la richiesta e il browser mostrerà un messaggio di errore. Impostando nuovamente il proxy, invece, tutto tornerà a funzionare come al punto precedente.
Nota: è possibile configurare un WPAD affinché i dispositivi compatibili possano auto configurarsi all'uso del proxy 
Nota 2: è anche possibile configurare una pagina web che mostri all'utente che deve utilizzare un proxy per navigare, installando un web server e re-direzionando le chiamate sulle porte 80 e 443 verso tale pagina di supporto

Complimenti: il quarto passo è stato completato. Riavviare con il comando sudo reboot -n il Raspberry Pi.


6. bloccare i contenuti pubblicitari (e malevoli)


Tutto quello che è stato realizzato finora permette di controllare la fruizione dei siti web, consentendone o bloccandone l'accesso. Quello che viene fatto è fondamentalmente verificare che la URL sia "accettabile", cioè non punti a siti malevoli, non faccia riferimento a parole inappropriate o non sia in una lista di domini non consentiti, e via discorrendo.

A volte però può capitare che un sito considerato "accettabile" abbia al suo interno banner malevoli o una quantità enorme di contenuti prelevati da domini esterni. Sebbene tali domini potrebbero essere comunque bloccati dalla configurazione massa finora in piedi, è molto probabile che si desideri fare di più.

Per andare oltre la configurazione fin qui vista, si può installare un tool come Pi-Hole che è in grado di bloccare tutta una serie di domini (e contenuti) in base a liste aggiornate periodicamente. Di Pi-Hole se ne è parlato altre volte qui sul blog, ma mai configurato per uno scenario similare a quello qui in esame. Purtroppo Pi-Hole sfrutta un proprio servizio DNS che collide con quello configurato tramite bind9. In realtà i due prodotti potrebbero essere configurati in modo da essere utilizzati a cascata, ma per gli scopi di questa guida, installando Pi-Hole, bind9 diventerebbe completamente inutile, quindi se si desidera continuare anche con questo passo conviene disinstallare bind9. Per fare ciò sarà sufficiente lanciare i 3 seguenti comandi (confermando l'operazione di disinstallazione):

    sudo apt purge bind9
    sudo apt update
    sudo apt autoclean && sudo apt autoremove

A questo punto, con il comando sudo curl -sSL https://install.pi-hole.net | bash si potrà avviare l'installazione di Pi-Hole. Si tratta di un wizard a schermate, a cui va risposto con questa sequenza:

        <OK> // schermata benvenuto
        <OK> // avviso donazioni
        <OK> // informazioni IP statico
        selezionare br0, <OK> // selezione interfaccia di rete
        selezionare FamilyShield, <OK> // selezione DNS
        <OK> // lista delle sorgenti per i blocchi
        <OK> // conferma uso protocolli IPv4 e v6
        <YES> // conferma IP statico e gateway
        <OK> // avviso possibili contenuti non bloccati
        <OK> // installazione interfaccia di amministrazione Web
        <OK> // installazione lighttpd
        <OK> // log di tutte le richieste
        // ...attesa per l'installazione
        <OK> // installazione completata

La prima cosa da fare è cambiare la password per accedere alla app di amministrazione, con il comando pihole -a -p e digitando la password desiderata (robusta). A questo punto aprendo un browser e andando all'indirizzo http://192.168.1.200/admin/ (con l'IP statico del Pi) si potrà accedere alla UI di configurazione e amministrazione di Pi-Hole.
Nota: nel qual caso l'installazione di Pi-Hole dovesse fallire o non riuscire ad arrivare correttamente al termine, probabilmente sarà necessario modificare all'interno del file /etc/dhcpcd.conf i domain_name_servers reimpostando quelli di default del router (es: 192.168.1.1). Per riavviare e/o continuare l'installazione di Pi-Hole digitare sudo pihole -r quindi selezionare reconfigure. Al termine dell'installazione modificare nuovamente il file dhcpcd.conf reimpostando i valori di DNS con l'IP statico del Pi (es: 192.168.1.200).


Dato che è stato rimosso bind9 sono state perse anche le configurazioni relative alla safe search, che andranno ripristinate. Occorrerà aggiungere una configurazione per dnsmasq con il comando sudo nano /etc/dnsmasq.d/05-safesearch.conf e inserendo il seguente codice:

        # YouTube
        cname=www.youtube.com,restrict.youtube.com
        cname=m.youtube.com,restrict.youtube.com
        cname=youtubei.googleapis.com,restrict.youtube.com
        cname=youtube.googleapis.com,restrict.youtube.com
        cname=www.youtube-nocookie.com,restrict.youtube.com

        # SafeSearch
        cname=www.google.com,forcesafesearch.google.com

        # Bing Family Filter
        cname=www.bing.com,strict.bing.com
        
        # duckduckgo
        cname=www.duckduckgo.com,safe.duckduckgo.com


Tali istruzioni non sono comunque sufficienti affinché le URL vengano riscritte e il traffico re-direzionato verso lidi sicuri. Per prima cosa vanno inseriti all'interno del file /etc/hosts gli indirizzi IP a cui puntare in caso di accesso ai domini di ricerca, quindi digitare sudo nano /etc/hosts ed inserire alla fine dello stesso:

    216.239.38.120    restrict.youtube.com
    216.239.38.119    restrictmoderate.youtube.com
    216.239.38.120    forcesafesearch.google.com
    204.79.197.220    strict.bing.com
    176.34.155.23     safe.duckduckgo.com

Poi va aggiunto un piccolo script in grado di aggiornare automaticamente nel file /etc/hosts il mapping tra indirizzo IP e domini safe (visto che gli IP possono cambiare nel tempo). Digitare il comando nano /home/pi/update_ip.sh e inserire il seguente script:

        #!/bin/bash
        update_ip_address() {
        file=/etc/hosts
        if [[ $(grep $1 $file) ]]; then
        IP=$(nslookup -query=A $1 8.8.8.8 | grep 'Address:' | tail -1 | \
        grep -oE '((1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.){3}((1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5]))')
        sed -i "/$1/ s/.*/$IP\t$1/g" $file
        fi
        }
        update_ip_address restrict.youtube.com
        update_ip_address restrictmoderate.youtube.com
        update_ip_address strict.bing.com
        update_ip_address forcesafesearch.google.com
        update_ip_address safe.duckduckgo.com

Quindi rendere eseguibile il file con il comando chmod +x /home/pi/update_ip.sh e richiamarlo tramite sudo nano /etc/rc.local prima della riga exit 0 aggiungendo l'istruzione sudo bash /home/pi/update_ip.sh che eseguirà il codice ad ogni riavvio del Pi.

A questo punto riavviare il Pi con sudo reboot -n e collegarsi all'hotspot con proxy e rieseguire tutte le prove effettuate in precedenza: https://welcome.opendns.com/ con messaggio di successo (DNS FamilyShield attivi), cercare parole non desiderate su Google (es: htps://www.google.it/search?q=porn per vedere se il safe search è attivo), provare ad accedere a siti malevoli (es: https://www.pornhub.com/) oppure a domini bloccati con e2guardian (es: https://www.facebook.com/ se si era inserito nella lista dei domini bloccati).

Infine dopo aver acceduto a siti come https://www.adsense.com/ di Google oppure portali "pieni di pubblicità", si può controllare sulla UI di amministrazione di Pi-Hole se ci sono URL e contenuti bloccati e se effettivamente quei siti web risultino più leggeri (...e veloci!).

Complimenti: il quinto passo è stato completato!


7. conclusioni ed ultime note


Costruire un router in cascata rispetto a quello tradizionale può consentire di tenere monitorato il traffico per una parte dei dispositivi che vogliono connettersi ad Internet. Le motivazioni per fare ciò possono essere davvero tante: dal parental control alla riduzione dei contenuti invasivi; dal blocco di determinate risorse in certi momenti del giorno (ad esempio i Social Network durante le ore di studio o lavoro per diminuire le distrazioni) ad avere una rete aggiuntiva da condividere con persone "estranee" alle quali non si vuole fornire la password della connessione principale; dal limitare gli accessi a dati siti con la propria banda ad alleggerire la navigazione per alcuni device (esempio nel mondo IoT); oppure se si ha una rete dati in case in affitto e la si vuole un minimo controllare per evitare problemi di varia natura, e così via... Il tutto senza intaccare la connessione di rete principale.


Bene: come indicato ad inizio guida, alcuni aspetti sono stati lasciati in secondo piano, ma se siete interessati ad approfondirli non esitate a contattarmi nei commenti di questo tutorial o del video ad esso correlato, oppure sui canali social!

Spero che la guida vi sia stata utile. Al prossimo tutorial!

Nessun commento:

Posta un commento