25 gennaio 2018

tutorial: come creare una vpn privata con openvpn (+ pihole) sul raspberry pi zero


Benvenuti!
Questo tutorial vi fornirà una guida su come configurare il Raspberry Pi Zero in modo da trasformalo in un server VPN privato domestico con qualche chicca aggiuntiva (Pi-Hole) davvero interessante.

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 configurare un server OpenVPN occorrono:
  • un Raspberry Pi Zero (o un Pi qualsiasi) + una microSD + un alimentatore (da almeno 2.1A) + un adattatore microUSB-LAN (se si utilizza il Pi Zero)
  • Raspbian OS Lite
  • un PC o smartphone o tablet (per sfruttare il frutto del nostro lavoro)
  • un router (accessibile) + una connessione ad internet

Per quanto riguarda il primo punto non occorre altro: il Raspberry Pi verrà acceduto via SSH per la configurazione generale e poi sarà attivo e non richiederà interventi. Sarà invece indispensabile avere un alimentatore che eroghi in uscita almeno 2.1A.
Raspbian OS Lite è probabilmente la scelta migliore poiché è un sistema leggero, consuma poche risorse ed ha la possibilità di farci installare dai repository tutti i tool necessari.
Il PC o lo smartphone/tablet saranno gli strumenti su cui andremo a sfruttare la VPN e le altre funzionalità.
Serve commentare il quarto punto? :-)


2. OpenVPN



Creare un server VPN privato domestico significa tirar su un'istanza di OpenVPN su Raspbian OS Lite. OpenVPN è sicuramente uno dei software più semplici da utilizzare per creare una VPN privata e può essere installato con estrema facilità sul Raspberry Pi; in più (e lo vedremo nel prossimo paragrafo), noi installeremo anche Pi-Hole che permette di aggiungere uno strato "filtro anti-pubblicità" alla nostra connessione. Ci tengo a precisare che i due tool sono completamente indipendenti e non è necessario installarli entrambi: essi svolgono due funzioni differenti che, però, se unite permettono di avere un sistema finale molto molto interessante!


Di che cosa stiamo parlando?

Nel tutorial pubblicato a fine settembre avevamo visto come trasformare il Raspberry Pi in un Access Point "carrozzato": un punto di ingresso per la connessione ad internet che consentisse di:
  1. non far condividere la reale password di rete
  2. eventualmente monitorare in modo più completo tutto il traffico passante (con possibilità di blocco o limiti)
  3. fare da ripetitore del segnale per aree poco coperte
  4. cosa più interessante di tutte, fare in modo di dirottare tutto il traffico passante per il Pi stesso verso una VPN remota o verso la rete TOR, senza quindi dover configurare queste modalità di accesso singolarmente su ogni dispositivo.

Il risultato di quell'esperimento era un "router avanzato" da connettere a cascata su quello principale, capace però di fornire una connettività più sicura per i dispositivi ad esso collegati. In più era portatile, viste le dimensioni del Pi e la possibilità di poterlo alimentare anche con un semplice power-bank, consentendo quindi di avere in mobilità uno strumento di protezione per la navigazione su internet.

Il tutorial di oggi punta a ribaltare il problema, creare quella VPN a cui collegarsi quando ci si trova fuori casa, cosicché sia possibile direzionare il traffico dapprima sulla propria linea domestica (in teoria più sicura) e da qui online. Il tutto senza la necessità di cercare servizi a pagamento di terze parti, con in più la possibilità di accedere senza problemi ad eventuali dischi di rete o qualsiasi altro dispositivo generalmente non esposto sul web e collegato nella rete interna di casa.


Come installare e configurare OpenVPN?

Per installare comodamente ed in pochi passaggi OpenVPN sul Raspberry Pi è possibile sfruttare lo script PiVPN. PiVPN è fondamentalmente una sequenza di istruzioni che non fanno altro che installare sul Raspberry Pi tutti i software necessari e permetterne la configurazione tramite una praticissima procedura guidata (decisamente banale).

Il primo passaggio è quello di installare Raspbian OS Lite su una microSD con il classico procedimento valido per qualsiasi OS per Raspberry Pi (quindi via Etcher, dd o Image Writer su Ubuntu, oppure Win32DiskImager). Una volta pronta la microSD, sarà necessario entrare nella partizione boot per creare al suo interno un file vuoto chiamato ssh (senza estensione né altro che servirà per abilitare l'accesso ssh al pi per accedervi da remoto). A questo punto il setup iniziale è completo: inserita la microSD nel Pi Zero e collegato quest'ultimo al modem/router via cavo Ethernet e all'alimentatore da almeno 2.1A, il sistema si auto-configurerà e dopo pochi istanti sarà possibile accedere sul Pi via SSH dal PC tramite l'indirizzo IP che il router gli ha assegnato. Nome utente e password da utilizzare sono i classici "pi" e "raspberry".
Una volta collegati, la prima cosa da fare assolutamente è quella di cambiare la password di default del Pi, digitando passwd ed inserendo la vecchia password, quindi quella nuova. Una volta fatto ciò è bene assicurarsi di avere il sistema aggiornato tramite i comandi sudo apt-get update e, una volta completato il processo, sudo apt-get dist-upgrade.

Nota: il processo può impiegare un po' di tempo, ma soprattutto in questo caso è davvero fondamentale avere un sistema operativo sempre aggiornato.

A questo punto, il primo comando da lanciare è curl -L https://install.pivpn.io | bash e ciò che fa non è altro che scaricare lo script PiVPN (che come anticipato contiene tutti i passi da eseguire) e poi mandarlo in esecuzione.

Nota: lanciare comandi del genere è molto rischioso perché il sistema eseguirà qualsiasi informazione contenuta nello script senza verificare né autenticità né altro. Quindi, se volete essere sicuri di ciò che verrà fatto sul vostro Raspberry Pi, aprite lo specifico link sul browser del PC e controllatene il contenuto. In questo caso comunque si può essere sufficientemente sicuri.

Una volta avviato, il comando inizierà la fase di configurazione che trasformerà il Raspberry Pi in un server OpenVPN. E questi sono tutti i passaggi che dovranno essere completati:
  1. impostazione di un indirizzo IP statico
    può essere scelta sia la porta Ethernet che la WiFi, il risultato finale non cambia: scegliete cosa preferite e confermate oppure modificate a vostro piacimento l'indirizzo IP da utilizzare in base alla sottorete utilizzata dal vostro router. Ad esempio potreste scegliere un indirizzo IP come 192.168.1.150 che ha un un numero sufficientemente alto che difficilmente il router potrà assegnare ad un altro dispositivo, evitando quindi possibili conflitti

  2. selezionare l'utente con cui gestire le configurazioni per OpenVPN
    scegliere l'utente "pi"

  3. abilitare o meno l'aggiornamento automatico del sistema
    visto che il Raspberry Pi sarà sempre esposto su internet, è importante che esso sia sempre aggiornato, quindi consiglio di abilitare gli aggiornamenti automatici. Il risvolto della medaglia è che potrà capitare che sia necessario di tanto in tanto riavviare il Pi affinché gli update siano correttamente installati, o che possa verificarsi qualche disservizio.

  4. scegliere il protocollo di funzionamento
    selezionare UDP

  5. impostare la porta su cui esporre OpenVPN
    di default viene utilizzata la porta 1194, ma è possibile impostarne un'altra. Il mio consiglio è di usarne un'altra, ad esempio la 11948, giusto per mischiare un po' le carte in tavola in caso di attacchi il proprio indirizzo IP con scansioni automatiche sulle porte standard. Non si tratta di una protezione elevata, ma è comunque un inizio

  6. decidere la grandezza per la chiave crittografica utilizzata da OpenVPN
    utilizzare più bit rende la chiave più sicura ma aumenta sensibilmente i tempi di creazione. Il valore 2048 è più che sufficiente e ragionevole per un uso con Raspberry Pi

  7. impostare il DNS Name per connettersi al proprio server VPN
    sarà possibile utilizzare direttamente l'indirizzo IP pubblico della connessione (quello che il fornitore di rete rilascia per il proprio router e che, però, può cambiare senza alcun preavviso), oppure affidarsi ad un servizio DNS di terze parti che mappi l'indirizzo IP pubblico con un nome fisso immutabile. Di provider che offrono questo servizio ne esistono tanti, con offerte gratuite con o senza vincoli, offerte a pagamento, etc... Per fare una rapida prova è possibile utilizzare direttamente l'indirizzo IP pubblico della connessione, ma il consiglio è quello di abbinare l'IP pubblico ad un servizio DNS perché altrimenti si dovranno rigenerare i profili di accesso (vedi punto 10) ad ogni cambio IP e reinstallarli su ogni dispositivo ogni volta, insomma davvero scomodo... Per fare delle prove rapide con un DNS Name è possibile registrarsi su noip.com che consente di creare gratuitamente fino a 3 DNS Name che possono essere associati a qualsiasi indirizzo IP, come quello pubblico della propria connessione. Una volta creato il DNS Name si può inserirlo sul Pi oppure si può confermare l'IP pubblico a seconda della strada che si è scelto di percorrere...

  8. selezionare il DNS Provider per i client VPN
    è possibile sceglierne uno tra quelli presenti (tra Google, OpenDNS, Level3 e così via) oppure indicarne uno custom. Consiglio l'utilizzo di Google o OpenDNS

  9. riavviare il Raspberry Pi
    con il classico sudo reboot

  10. creare i profili di accesso alla VPN
    per aggiungere un nuovo profilo è sufficiente digitare il comando pivpn add e seguire le istruzioni a video (si tratta di indicare un nome per il client ed una password). A questo punto verrà creato un file per ogni profilo creato, ognuno con estensione .ovpn e salvato all'interno della cartella /home/pi/ovpns. Questi file devono essere estratti dal Pi, e ciò può essere fatto in tanti modi: o collegando la microSD ad un PC in grado di leggere i file system Ext, oppure molto più semplicemente collegandosi con programmi FTPClient (tipo FileZilla) al Pi e copiarli sul PC

  11. configurazione del router
    ora va dirottato il traffico UDP (indicato nel punto 4) verso la porta 1194 (o quella impostata nel passo 5) verso l'indirizzo IP statico assegnato al Raspberry Pi nel punto 1. Per fare si deve accedere alla utility di configurazione/amministrazione del router e cercare tra le tante voci presenti l'apposita schermata di configurazione del Port Forwarding (a volte chiamato anche Port Mapping). Questa è l'unica parte di tutta la guida che dipende fortemente dal router in uso e dal software su di esso in esecuzione.

  12. configurazione dei client che devono accedere alla VPN
    configurato il router ed avendo a disposizione tutti i profili .ovpn (estratti dal Raspberry Pi), potete copiare i profili uno per ogni dispositivo così da aggiungere l'accesso alla vostra VPN.

    Nota: in caso utilizzaste il Raspberry Pi "corazzato" descritto nel tutorial di settembre, in quel caso l'unico dispositivo su cui andrà aggiunto il profilo sarà solo quel Pi stesso che farà "da scudo" per tutti gli altri dispositivi a lui connessi.

    Per installare il profilo ovpn su iOS potete o spedire il file via email e quindi aprirlo direttamente da lì, oppure trasferirlo via iTunes o via cloud. Chiaramente distruggete il file quanto prima una volta settata la VPN perché non deve diffondersi. Su Android, invece, ci sono meno problemi di trasferimento, vista la natura dell'OS. In ogni caso è possibile installare una qualsiasi applicazione OpenVPN Client che permetta di importare il file appena trasferito, inserire la password indicata al punto 10 durante la creazione dei profili opvn, e quindi abilitare la configurazione. In questo modo il sistema operativo sarà in grado di collegarsi correttamente al server OpenVPN

  13. test!
    collegate il dispositivo in test alla VPN e verificate (con una rapida ricerca su google "my ip") quale sia l'IP con cui state navigando: deve essere lo stesso IP pubblico assegnato al router.

Questi erano i semplici passi da seguire per tirar su un server VPN privato domestico via OpenVPN grazie allo script PiVPN. In questo modo, come anticipato, anche quando non si è connessi direttamente alla propria rete di casa (ad esempio sotto rete dati dal cellulare o WiFi pubbliche) sarà sempre possibile accedere a dischi di rete o altre periferiche collegate in casa e non esposte sul web, ma soprattutto si potrà navigare su internet passando per la propria connessione che, in linea teorica, dovrebbe essere più sicura di quella delle pubbliche o delle reti degli hotel e quant'altro.


3. Pi-Hole



A questo punto è possibile aggiungere uno strato in più che consenta di bloccare pubblicità indesiderate o, volendo, qualsiasi altro tipo di URL per tutti i dispositivi connessi alla nostra connessione internet. Per fare ciò si può utilizzare Pi-Hole che, anche in questo caso, non è altro che uno script che si preoccuperà di installare tutto il necessario.

Come prima è sufficiente lanciare il comando curl -sSL https://install.pi-hole.net | bash e seguire il processo a schermo. Ed anche in questo caso verrà avviata una procedura guidata a video i cui passi da compiere sono:
  1. impostare un indirizzo IP statico
    lasciare quello che c'è (se è stato già installato OpenVPN), oppure vedere il punto 1 del paragrafo precedente

  2. selezionare l'utente con cui eseguire Pi-Hole
    selezionare l'utente "pihole"

  3. protocolli da tenere in considerazioni per gli eventuali blocchi
    selezionate sia IPv4 che IPv6 visto che molte CDN di advertising stanno iniziando a spostarsi sull'IPv6

  4. seguire le richieste a video
    rispondere sempre in modo affermativo. Ad esempio sarà chiesto se attivare l'interfaccia grafica di supporto con tanto di report grafici: il mio consiglio è dire di sì perché sono davvero utili per capire se il sistema stia funzionando o meno

  5. configurazione del router per sfruttare Pi-Hole
    entrando nella utility di configurazione/amministrazione del router, cercare il punto in cui è possibile indicare i parametri DNS per la connessione. Come primo indirizzo IP del DNS deve essere presente l'indirizzo IP statico assegnato al Raspberry Pi nel punto 1, mentre come indirizzo IP secondario inserire l'indirizzo "8.8.8.8" che è quello fornito da Google ed indispensabile nel qual caso il Pi fosse spento o non funzionante (in modo da non bloccare completamente la connettività di rete)

  6. riavvio e test!
    con il classico sudo reboot e dal dispositivo con cui siete connessi al vostro router provate a navigare su di un sito contenente pubblicità, quindi verificate che essa sia rimossa con successo.

Pi-Hole può essere amministrato accedendo all'indirizzo IP statico assegnato al Raspberry Pi seguito da /admin (es: 192.168.1.150/admin). Dall'interfaccia è possibile avere il dettaglio di tutto quello che è accaduto per quanto riguarda gli accessi ad URL e domain bloccati e non. Loggandosi (la prima password viene generata dal sistema e può essere cambiata sul Raspberry Pi con il comando pihole -a -p) è possibile configurare un sacco di opzioni, aggiungere e rimuovere domini, etc...
L'interfaccia è davvero curata e davvero pratica da utilizzare. Assolutamente un must! C'è anche l'area per il recupero automatico dei domini da bloccare, e tante altre voci da spulciare.


4. conclusioni ed ultime note


Utilizzando i due pratici e rapidi script (PiVPN e PiHole) è possibile installare i due tool oggetto del tutorial. Ci sono pro e contro da tenere in considerazione nell'utilizzo di entrambe le tecnologie.

Per quanto riguarda OpenVPN:
  • PRO: consente di passare tutto il traffico verso il proprio router e quindi navigare anche da fuori casa sfruttando la propria rete domestica. Permette l'accesso ad eventuali dischi di rete o periferiche connesse al proprio router ma non esposte su internet. Consente l'accesso a siti bloccati al di fuori del paese in cui la VPN creata opera
  • CONTRO: il processo rallenta in qualche modo la navigazione, seppur leggermente, e comunque potrebbe non risolvere alcuni problemi come quello di accedere a siti bloccati in un determinato paese diverso da quello in cui la VPN opera

Per quanto riguarda Pi-Hole:
  • PRO: rende la navigazione più veloce, senza interruzioni pubblicitarie. Riduce il consumo di dati, e così via...
  • CONTRO: c'è il problema "etico" del supportare o meno quei siti che vivono proprio grazie alle pubblicità presenti su di essi. In ogni caso, andando sulla configurazione di Pi-Hole si possono abilitare o meno eventuali siti che si vogliono escludere dal blocco

In tutto ciò, comunque, la cosa più comoda è che le configurazioni di blocco pubblicitario, setup di OpenVPN e accesso alla VPN stessa (seguendo il tutorial di settembre) avverranno una sola volta su uno o due dispositivi (il Pi che fa da supporto al router ed il Pi che fa da router mobile "carrozzato") e, a cascata, tutti i device ad essi connessi erediteranno in modo trasparente quanto configurato! Ed i consumi ridotti dei single board computer della fondazione inglese fan sì che possa aver decisamente senso impiegarli per tali scopi!


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