Inutile dire che on-line ci sono occhi e orecchie ovunque. Una VPN (virtual provate network) vi aiuta a navigare su Internet in modo più sicuro ed anonimo, facendo passare il vostro traffico attraverso un server fidato che non è il vostro reale punto di origine. In pratica darete l’illusione di essere in un posto differente da quello da cui in realtà vi collegherete e tutti i vostri dati saranno adeguatamente cifrati.

Utilizzare una VPN “fatta in casa” vi darà inoltre l’indubbio vantaggio di poter accedere in modo sicuro ai files ed ai media che sono sui vostri computer o nei vostri NAS, esattamente come se foste seduti sul divano del salotto o davanti alla vostra scrivania di lavoro: spesso infatti una VPN rappresenta una valida alternativa ai servizi cloud più costosi.

Ultimo vantaggio è che usando una VPN su un dispositivo mobile, è possibile sfruttare servizi e siti che in alcuni casi sono esclusivamente permessi agli utenti desktop.

E’ facile trovare offerte di VPN già pronte per l’uso, ognuna con piani di costo e livelli di sicurezza differenti. Ma con circa 40 euro (il costo di un Raspberry Pi) potrete costruirvi una propria VPN con un server (piccolo ed a basso consumo) presso casa vostra.

C’è da fare un pochino di fatica davanti al terminare shell: ma provate a seguire questa guida passo-passo e nel giro di 30 minuti avrete la vostra VPN personale!

Ingredienti

  • 1 x Raspberry Pi 2 o l’ultima versione 3
  • 1 x 8GB micro SD card
  • 1 x SD card reader
  • 1 x 5 volt mini USB power supply (va bene un carica batterie da cellulare)
  • 1 x HDMI monitor (la vostra TV o il vostro monitor consueto)
  • 1 x USB keyboard
  • 1 x Ethernet network cable (almeno Cat5e o se volete usare la rete Gigabit Cat6)

Ovviamente do per scontato che abbiate un computer, un accesso ad internet attraverso un router, un minimo di conoscenza di reti e linux (molto minimo), un po’ di tempo da spendere e la voglia di sbagliare e ricominciare (come sempre con Linux). Potete comprare tutti gli ingredienti singolarmente oppure in kit. Di seguito qualche link amazon.it da cui partire:

Raspberry Pi 2 Quad Core Starter Kit

Raspberry Pi 2 

Raspberry Pi 2 Modello B Quad Core CPU 900 MHz, 1 GB RAM

Raspberry Pi 2 Modello B

Raspberry Pi 3 Model B Desktop (Quad Core CPU 1.2 GHz, 1 GB RAM, Linux)

Raspberry Pi 3 Model B Desktop

Transcend TS16GUSDU1 MicroSDHC Class10 U1 con adattatore

Transcend TS16GUSDU1 MicroSDHC Class 10 U1 con adattatore

Raspberry Pi B+ e Pi 2 alloggiamento Original bianco

Raspberry Pi B+ & Pi 2-3 Originale

Raspberry Pi Model B+ OFFICIAL 5V 2A Multi National Power adapter

Raspberry Pi Model B+ OFFICIAL 5V 2A Multi National Power adapter

Installiamo il SO sul Raspberry Pi

Inserite l’SD card nel vostro computer. Se state riutilizzando una vecchia SD assicuratevi che sia correttamente formattata per rimuovere tutti i precedenti files. Potete usare lo strumento ufficiale gratuito presso http://sdcard.org.

Scaricate NOOBS (New Out Of the Box Software) dal sito ufficiale di Raspberry Pi (https://www.raspberrypi.org/downloads/). Questo è il modo più semplice per installare un SO sulla vostra scheda.

Aprite il file .zip appena scaricato, selezionate tutti i files e copiateli nella schedina SD.

A questo punto inserite la scheda SD all’interno del Raspberry Pi, collegate monitor, tastiera, cavo di rete (per una VPN è sconsigliato usare il WiFi) ed alimentatore. Accendete.

Se tutti i files sono stati correttamente copiati, vedrete lampeggiare un led verde sulla scheda: dopo alcuni secondi sul monitor vi verrà presentata una lista di sistemi operativi e applicazioni che potrete decidere di installare: usate le frecce e scegliete Raspbian.

Per i più esperti, è disponibile direttamente la ISO di Raspian sul sito ufficiale di raspberry Pi (https://www.raspberrypi.org/downloads/)

Primo contatto

Aspettate che il processo sia finito: vi troverete davanti un ambiente grafico (molto semplice) in stile Linux. Da questo momento potete procedere con monitor e tastiera, oppure potrete lavorare via shell direttamente sul vostro computer: switchare continuamente tra il monitor del PC ed il monitor del Raspberry Pi potrebbe infatti risultare piuttosto frustrante.

Il Raspberry Pi è infatti gestibile da remoto (quindi senza tastiera e monitor) attraverso una connessione SSH. Chi dispone di Mac o Linux ha già disponibile via terminale un client SSH. Chi usa Windows può utilizzare una applicazione chiamata PuTTY (j.mp/DLPutty).

Aprite il terminale e digitate:

La password di default è: raspberry

Se tutto va bene il prompt diventerà:

Nota: in genere il servizio SSH è già attivo sul SO Raspbian. Nel caso non lo fosse dovrebbe abilitarlo esplicitamente. Il modo più semplice è aprire il terminale direttamente sul vostro Rapsberry Pi e digitare:

Quindi navigate su:

Advanced Options > SSH e scegliete Enable (abilita)

Password

cambiamo la password di default con il comando:

Vi verrà chiesta la vecchia password e due volte la nuova:

Riavviate con:

Ricollegatevi via SSH.

IP statico sulla rete locale

Ora è necessario che il vostro raspberry abbia sempre lo stesso IP nella vostra rete locale: in genere questo potrebbe cambiare ad ogni riavvio. Digitate il comando:

in modo da capire le attuali impostazioni della rete. Evidenzio le informazioni rilevanti:

Ovviamente voi dovrete usare i valori restituiti dai vostri comandi, sostituendo agli IP dell’esempio, gli IP della vostra rete!!

  • inet addr [Current IP Address]: 192.168.1.33
  • bcast [Broadcast Range]: 192.168.1.255
  • mask [Subnet Mask]: 255.255.255.0

Digitate il comando:

per recuperare le altre informazioni necessarie:

Qui troverete:

  • Gateway: 192.168.1.1
  • Destination: 192.168.1.0

Ora è necessario modificare il file di configurazione della rete di Raspbian. Useremo l’editor di testi nano per modificare il file interfaces. Digitate il comando:

Cercate la riga in cui compare:

oppure

Sostituite la parola dhcp oppure la parola manual con static:

Aggiungete subito dopo la riga modificata le seguenti nuove righe:

Per salvare premete CTRL+X (insieme) e rispondete SI (Y oppure S). Quando vi verrà chiesto se volete cambiare il nome al file, accettate senza modificare nulla.

NOTA: Un modo semplice per imporre un IP statico al vostro RaspberryPi sarebbe quello di farlo attraverso il vostro router (e quindi evitare i cambiamenti appeni descritti): è infatti possibile associare un IP al MAC Address del dispositivo connesso alla rete in modo che il router assegni sempre lo stesso. In questo caso le impostazioni di rete del vostro raspberry dovranno rimanere su DHCP.

Aggiornamento

Ora è necessario assicurarsi che il SO sia aggiornato all’ultima versione. Digitate:

Aspettate che abbia terminato e poi proseguite con:

Se volete anche assicurarvi di avere l’ultima versione del firmware del Raspberry potete usare questi ulteriori due comandi:

Una volta finito, siete pronti per creare la vostra VPN.

IP statico su internet

SCORCIATOIA: DDClient impostato sul router

Alcuni router dispongono di un servizio DDClient integrato. In questo modo potete evitare di installare il servizio sul Raspberry Pi, ed utilizzare quello già disponibile.

Vi basta accedere alle configurazioni avanzate e cercare DDNS (o qualcosa del genere): inserite le vostre credenziali ed il dominio e sarà direttamente il vostro touter a preoccuparsi di aggiornare l’associazione tra IP dinamico pubblico e dominio.

Per utilizzare la vostra VPN è necessario che un client autorizzato sia in grado di trovare il vostro server su Internet: per questo vi serve un indirizzo pubblico che non cambi con il tempo. In teoria sarebbe il vostro indirizzo IP pubblico (cioè su internet), che normalmente dovrebbe essere tenuto segreto in quanto identifica la vostra posizione nella rete.

Voi potete scoprire il vostro IP pubblico attraverso alcuni siti come whatismyip.com, oppure whatismyipaddress.com.

Il problema è che (a meno di casi particolari) questo indirizzo cambia di continuo (per esempio ad ogni accensione del vostro router) e sarà necessario utilizzare un servizio DDNS (dynamic domain name system) che vi fornirà un nome di dominio (che non cambia) da usare al posto dell’indirizzo IP pubblico.

Esistono moltissimi servizi gratuiti, come changeip.com oppure dtdns.com: per poterli utilizzare, una volta registrati, dovrete eseguire e configurare uno specifico client sul vostro Raspberry Pi (DDClient) in modo da aggiornare automaticamente il registro del DDNS. In pratica questo client non farà altro che associare il vostro IP (che cambia) con un nome di dominio fisso. Digitate:

Questo avvierà un wizard per la configurazione del client. Potete anche non preoccuparvi molto di quello che inserirete in questa fase. Molto più comodo, infatti, è editare il file di configurazione:

Ogni servizio ha una sua differente configurazione, ma in sostanza vi servono le credenziali del servizio (username e password) ed il nome di dominio scelto: nel nostro caso (è un esempio) scegliamo subdomain.domain.com. Un esempio con dyndns.it:

Se usate changeip.com fate riferimento a queste indicazioni. Salvate (CTRL+X) e uscite (S, ENTER). Quindi avviate il client:

Per l’autostart e l’avvio come demone di DDClient editate il files /etc/default/ddclient:

Quindi riavviate il servizio con:

Port Forwarding del router

Abbiamo un indirizzo pubblico, ma non è ancora sufficiente. Dobbiamo fare in modo che il router faccia passare il traffico proveniente da internet e destinato al nostro server OpenVPN verso l’indirizzo locale corretto. In genere i router hanno un firewall che blocca tutte le connessioni in ingresso: nello specifico dobbiamo fare in modo che il traffico sulla porta UDP 1194 (che è la porta standard di OpenVPN) sia correttamente fatto passare dalla rete esterna alla rete interna. Si tratta di un regola di port forwarding da inserire nel vostro router.

Di fatto state aprendo un piccolo buco nelle difese della vostra rete domestica per far passare solo un tipo di traffico e solo verso una macchina specifica.

OpenVPN Port ForwardingOgni router è diverso, per cui vo consiglio ricercare su internet le istruzioni adatte per il vostro. Spesso però le impostazioni necessarie si trovano in

Configurazione avanzata > Port forwarding / Port Triggering / Port mapping

Una volta trovato il posto giusto, si imposta una regola con i seguenti parametri:

  • Protocollo: UDP
  • Porta esterna: 1194
  • Porta interna: 1194
  • Nome: OpenVPN (se necessario)

Sarà possibile verificare che il tutto sia configurato correttamente più tardi, quando ci occuperemo del server OpenVPN.

NOTA: è possibile cambiare la porta ed il protocollo usatila OpenVPN. La scelta dell’UDP 1194 non è obbligata. Per impostazione predefinita OpenVPN Access Server dispone di 2 daemon OpenVPN in esecuzione. Uno di loro sulla porta UDP 1194 e un altro su TCP 443. Si consiglia di utilizzare la porta UDP perché questo funzioni meglio per un tunnel OpenVPN. Tuttavia, molti luoghi pubblici bloccano tutti i tipi di porte, tranne quelli molto comuni come HTTP, HTTPS, FTP, POP3, e così via. Per questo è disponibile come opzione la TCP 443 che è la porta predefinita per HTTP/SSL.
Se poi volete utilizzare una porta completamente differente potete farlo.

Installiamo OpenVPN

Per realizzare la nostra VPN installeremo ed utilizzeremo il pacchetto OpenVPN. Digitate:

Seguite le istruzioni: il pacchetto sarà scaricato, decompresso ed installato. Riavviate con:

Installiamo Easy_RSA

Esattamente come una chiave che apre la porta principale di casa vostra, la VPN ha bisogno di generare le proprie chiavi per assicurarvi che solo i dispositivi autorizzati possano collegarsi ad essa. Al fine di connette in modo sicuro due computer, OpenVPN utilizza infatti chiavi che forniscono lo strato di autenticazione e di sicurezza. E ‘importante proteggere le chiavi che stiamo per generare assicurandoci che nessuno possa accedervi.

E’ necessario installare Easy_RSA, un pacchetto semplice che vi permetterà di usare la cifratura RSA e generare chiavi univoche.

La prossima serie di comandi devono necessariamente essere eseguiti con privilegi di super amministratore (root). Fino a questo momento il vostro prompt recitativa:

Digitando sudo prima di un comando, voi dite al sistema operativo di eseguirlo con privilegi di amministratore, nella cartella root. Dovendo digitare moti comandi, per evitare di scrivere in continuazione sudo + comando, digitiamo una volta per tutte:

Il prompt cambierà definitivamente in:

Ora dovete creare una cartella che sia in grado di ospitare i vostri certificati (si tratta di cartelle speciali):

Copiamo in questa cartella i files di EasyRSA che dovranno essere editati: in questo modo avremo a disposizione un backup nel caso qualcosa andasse storto:
cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0 /etc/openvpn/easy-rsa

[Correzione effettuata grazie al contributo di Andrea nei Commenti]

In pratica abbiamo copiato tutti i files da cartella easy-rss 2.0 alla nostra nuova cartella. Prossimo passo: spostiamoci di cartella e andiamo a modificare il file di testo che contiene i parametri di base, quali il percorso delle chiavi, la nostra nazione, la provincia, la città, etc.:

Cercate la riga che inizia con:

Editatela inserendovi il percorso della cartella che avete creato prima e che conterrà i certificati. Quindi:

Ora spostate il cursore un po’ più sotto. Se siete paranoici, potete impostare la dimensione della chiave di cifratura a 2048 bit. Servirà molto tempo per la generazione delle chiavi, e la connessione sarà un po’ più lenta, ma potrete vivere sonni assolutamente tranquilli. Io, con un Raspberry Pi 2, tendo a a lasciarla a 1024.

Andando ancora più giù, riempite gli ultimi parametri dettando dei nuovi defaults. Queste voci vi faranno risparmiare tempo in fase di creazione delle chiavi, ma sono di fatto ininfluenti per il corretto funzionamento della VPN.

Ovviamente sostituite i valori tra le virgolette con i vostri parametri. Per salvare premete CTRL+X (insieme) e rispondete SI (S o Y). Quando vi verrà chiesto se volete cambiare il nome al file, accettate senza modificare nulla.

Le chiavi della Certification Authority

Creiamo a questo punto i certificati che la VPN userà per garantire le autorizzazioni ai dispositivi che vorranno connettersi. Aprite la cartella easy-rsa ed eseguite i seguenti comandi:

I comandi rispettivamente servono per:

  • posizionarsi nella cartella easy-rsa
  • caricare il documento vars editato prima con i valori popolati;
  • eliminare eventuali precedenti chiavi presenti a sistema;
  • costruire la certificate authority con tanto di certificato e chiave privata

Nell’ultimo passo viene scritta la chiave privata nel file ca.key, mentre un certificato nel file ca.crt. Vi verranno chieste una serie di informazioni che però dovreste avere già popolato nel file vars.

Le chiavi del server

Dare un nome al server VPN è come dare un nome ad un proprio figlio: non si cambia e non si può scordare. Digitate:

ATTENZIONE! Anche in questo caso rispondete alle domande che vi vengono poste scegliendo eventualmente di lasciare i valori di default (esattamente come nel caso precedente in cui vi chiedevano la Nazione, il Nome, etc). Fate però attenzione a due cose importanti:

  • Common Name: deve essere uguale al ServerName che avete scelto;
  • Challenge password: deve essere lasciata blank (vuota);

Firmate il certificato ed eseguite il commit.

Diffie-Hellman

Lo scambio di chiavi Diffie-Hellman (Diffie-Hellman key exchange) è un protocollo crittografico che consente a due entità di stabilire una chiave condivisa e segreta utilizzando un canale di comunicazione insicuro (pubblico) senza la necessità che le due parti si siano scambiate informazioni o si siano incontrate in precedenza. Digitate:

Se avete scelto una profondità di 2048 bit, potreste dover aspettare circa un’ora. A 1024 bit l’operazione impiega pochi minuti.

Protezione da DoS: HMAC

OpenVPN è in grado di difendervi da attacchi di tipo Denial of Services (o anche operazioni di port Scanning, buffer overflow, etc) generando una chiave statica pre-condivisa HMAC (hash-based message code). Questo significa che il server non proverà nemmeno ad autenticare un accesso se non viene rilevata questa chiave. Per generare la chiave HMAC digitate:

NOTA: nel momento in cui scrivo questa guida ho rilevato un probabile baco in alcuni client (in particolare l’OpenVPN Client per iOS): in pratica con la connessione 3G/LTE non viene inviata al server la chiave HMAC procurando così l’errore:

Connettendo il client in WiFi invece la chiave passa e la connessione in VPN viene stabilita senza problemi. Per far funzionare il mio iPhone in LTE ho avuto come unica possibilità quella di non usare la chiave HMAC. Per questo motivo negli esempi in calce dovete commentate le righe relative a questo ulteriore strato di cifratura: in genere fanno riferimento alla meccanismo di autenticazione xls-auth.

Le chiavi del client

Il vostro server VPN è praticamente configurato. Adesso è necessario creare le chiavi per ciascun dispositivo che debba connettersi. Potreste anche decidere di usare la stessa chiave per tutti i dispositivi, ma avreste il vincolo che non si potranno connettere contemporaneamente. Creiamo, ad esempio, la chiave per il mio smartphone che chiamerò alessandroPhone (voi ovviamente usate un altro nome).

Anche in questo caso vi verranno chieste alcune cose:

  • PEM pass phrase: scegliete una password che dovrete ricordare. Dovrete digitarla due volte!
  • Challenge password: deve essere lasciata blank (vuota);

Firmate anche questa volta il certificato ed eseguite il commit.

Adesso nella cartella:

troverete 3 files in più: alessandroPhone.crt, alessandroPhone.csr, alessandroPhone.key. Spostatevi quindi nella cartella keys e digitate:

Quest’ultima istruzione aggiunge un ulteriore strato di cifratura (3DES) in modo da rendere la vita degli hackers un po’ più complicata. Vi verrà chiesta la password scelta precedentemente. Vi verrà chiesto inoltre di generare una ulteriore password (PEM pass phrase): io vi consiglio di usare la solita, in modo da doverne ricordare solo una per certificato.

Ripetete l’operazione qui descritta per ogni utente o dispositivo a cui volete concedere l’accesso alla VPN.

Rivediamo tutte le chiavi ed i certificati

Abbiamo generato un certificato/chiave master per la CA, una chiave Diffie-Hellman, una chiave HMAC, un certificato/chiave per il server ed un certificato/chiave per ogni client (nel nostro esempio solo 1):

Filename Sono utilizzati da Scopo File segreto
ca.crt server + all clients Root CA certificate NO
ca.key key signing machine only Root CA key SI
dh1024.pem server only Diffie Hellman parameters NO
ServerName.crt server only Server Certificate NO
ServerName.key server only Server Key SI
ta.key server + all clients HMAC Key SI
alessandroPhone.crt client1 only Client1 Certificate NO
alessandroPhone.key client1 only Client1 Key SI

Vedremo successivamente come usarli.

Configuriamo il server

Ora abbiamo creato serrature e chiavi. Non ci resta che dire al Raspberry Pi dove mettere le porte. In pratica dobbiamo istruire OpenVPN ad usare le chiavi che abbiamo creato ed il giusto IP con relativa porta. Creiamo un file di configurazione a partire da un foglio bianco:

Riempitelo con il testo in calce, stando attenti a variare i dettagli come indicato dai commenti preceduti dallo sharp #:

Cliccate su CTRL+X, uscite (S) e salvate (INVIO). Riavviate il servizio OpenVPN con:

L’esempio del file di configurazione creerà una VPN usando una interfaccia di rete virtuale TUN (per il routing), si metterà in ascolto dei clients sulla porta UDP 1194 e distribuirà indirizzi IP virtuali nella sottorete 10.8.0.0/24.

NOTA: Per testare rapidamente la configurazione è sufficiente lanciare direttamente OpenVPN (assicurandosi prima di aver fermato il demone lanciato dall’init script durante l’installazione):

Se non ricevete nessun errore allora la vostra configurazione è corretta, potete interrompere l’esecuzione con Ctrl+C.

Autostart di OpenVPN Server

Editate il file /etc/default/openvpn con:

Eliminate il commento nella riga che contiene AUTOSTART e inserite il nome del vostro file di configurazione del server (appena creato):

Riavviate con reboot.

Configuriamo i Client

Abbiamo creato le chiavi per i client (computer e dispositivi vari) che vogliamo che si connettano alla nostra VPN. Dobbiamo però ancora dire ai nostri client dove trovare il server, come connettersi o quali chiavi usare. Ci sono due possibili impostazioni per i vostri client, che determinano il modo in cui il traffico viene gestito dalla VPN.

  • FULL TUNNEL: si indirizza tutto il traffico Internet attraverso il server OpenVPN. Se ad esempio volete connettervi attraverso un hotspot pubblico ma in sicurezza. Per esempio se voleste consultare la vostra home banking, i server della vostra banca vi vedranno arrivare esattamente come se vi foste collegati da casa.Utilizzare la configurazione full tunnel è una buona idea se si desidera proteggere il 100% di tutto il traffico in uscita dal dispositivo client. Questo è il metodo utilizzato normalmente per le connessioni di utenti in paesi in cui l’accesso alla rete è fortemente regolamentata (ad esempio la Cina) o per le connessioni attraverso accessi pubblici controllati.Facendo passare tutto il traffico in modo sicuro attraverso la propria rete domestica, si ottiene lo stesso livello di sicurezza e di fiducia della propria rete domestica. Lo svantaggio qui può essere prestazionale, dal momento che la larghezza di banda è limitata dalle possibilità del vostro Raspberry Pi e dal vostro contratto internet.
  • SPLIT TUNNEL: si indirizza attraverso il server VPN solo il traffico Internet che ha bisogno di raggiungere l’interno della vostra rete domestica. Ad esempio se voleste accedere al vostro NAS per vedere un film da remoto. Il nome split deriva dal fatto che il traffico ha un percorso diverso a seconda se si stia andando alla rete domestica oppure no. Tutto il traffico Internet viene quindi veicolato attraverso il gateway predefinito della vostra connessione.Usare la configurazione split tunnel è una buona idea se non siete preoccupati dal livello generale di sicurezza della vostra connessione e volete semplicemente accedere alla vostra rete di casa, magari in mobilità con il vostro smartphone o dalla rete del vostro ufficio.

Bisogna scegliere adesso? No! Si può effettivamente avere entrambi i tipi di tunnel impostati sui vostri client, e scegliere ogni volta quale utilizzare per la vostra connessione.

Personalmente per il 90% del tempo utilizzo lo split tunnel perché sono al lavoro o a casa di una persona di cui mi fido (e della cui rete mi fido): in questo modo evito di sovraccaricare la mia rete di casa. Uso invece il full tunnel quando ho bisogno di far passare informazioni sensibili, come dati finanziati o sanitari o password in chiaro. O quando devo far credere a qualcuno di essere davanti alla mia scrivania mentre uso il mio PC desktop.

Full tunnel configuration

Se avete creato differenti chiavi per ciascuno dei client (o come nel nostro caso avete differenti modalità di tunneling), potrebbe essere un po’ noioso generare un file di configurazione per ogni differente client partendo da zero. Per fortuna Eric Jodoin dell’istituto SANS ci ha preparato un comodo script.

Prima di tutto creeremo un file intermedio (diciamo di appoggio) contenente i parametri fondamentali per una connessione “full tunnel” e lo salveremo sul Raspberry Pi. Useremo questo file successivamente per produrre il file di configurazione vero e proprio da installare sul client. Apriamo l’editor di testo e creiamo quindi un file nuovo client-full.txt:

Incolliamo il seguente testo:

Ovviamente modificate il testo con i vostri parametri come indicato nei commenti. Salvate ed uscite.

Ora creiamo il nostro primo file di profilo: un file di configurazione che contiene tutti parametri, ma anche le chiavi ed i certificati necessari a far collegare un client al Server VPN.  Creiamo lo script di Eric Jodoin che ci faciliterà il compito:

Si tratta di un altro file vuoto (nuovo) che dovete riempire così (attenzione, io l’ho un po’ modificato!):

Questo file altro non fa che creare un file .opvn (cioè il profilo di configurazione del client) concatenando i parametri di default che avete impostato nel file client-full.txt, i certificati e le chiavi.

Salvate ed uscite (CTRL+ X, S, INVIO). Diamo a questo script permessi di esecuzione, e lanciamolo:

Vi chiederà di inserire il nome del client per generare il profilo: nel mio caso ho inserito alessandroPhone. Verificate che tutto sia andato a buon fine:

Il vostro primo files di configurazione è pronto: lo trovate nella cartella /etc/openvpn/easy-rsa/keys/ con il nome alessandroPhone-full.ovpn

NOTA: Se non volete usare la chiave HMAC commentate il blocco tls-auth che contiene questa chiave.

Qui un esempio (ho eliminato alcune delle righe dei certificati HMAC):

 

Split tunnel configuration

Ripetiamo più o meno le stesse operazioni fatte per la connessione full: cambia ovviamente qualcosa nella configurazione.

Qui di seguito, creeremo un file intermedio (diciamo di appoggio) contenente i parametri fondamentali per una connessione “split tunnel” e lo salveremo sul Raspberry Pi. Useremo questo file successivamente per produrre il file di configurazione vero e proprio da installare sul client. Apriamo l’editor di testo e creiamo un file nuovo:

Incolliamo il seguente testo:

Ovviamente modificate il testo cone i vostri parametri come indicato di commenti: la vostra porta e l’indirizzamento della vostra rete locale. Salvate ed uscite.

Ora creiamo il nostro secondo profilo: un file di configurazione che contiene tutti parametri, ma anche le chiavi ed i certificati necessari a far collegare un client al Server VPN (esattamente come nell’esempio precedente). Vi basterà modificare lo script usato precedentemente. Aprite l’editor:

e cambiate le prima righe secondo l’esempio in basso:

Salvate ed uscite. Eseguite lo script modificato:

Vi chiederà anche in questo caso di inserire il nome del client per generare il profilo: nel mio caso ho inserito nuovamente alessandroPhone. Verificate che tutto sia andato a buon fine:

Adesso avete completato anche il secondo vostro file di configurazione: lo trovate nella cartella /etc/openvpn/easy-rsa/keys/ con il nome alessandroPhone-split.ovpn.

Stesse considerazioni del precedente caso: si tratta sempre della concatenazione del file di configurazione .txt e di tutte le chiavi generate utili al client. Analoghe considerazioni per la chiave HMAC e per il commento del blocco tls-auth che contiene questa chiave.

Esportiamo le chiavi sul dispositivo

Nel mio caso sono stati generati due files alessandroPhone-full.ovpn e alessandroPhone-split.opvn. Ora dobbiamo prelevarli dal RaspberryPi. Prima però è necessario garantirsi permessi di lettura/scrittura nella varie cartelle e sui files di profilo. Digitate:

Questo vi permetterà di copiare i files dal RaspberryPi. Su Windows, usando PuTTY, è possibile usare un modulo chiamato WinSCP. Io, sul MAC, preferisco la riga di comando: in questo caso aprite un’altra finestra del terminale sul vostro PC (non usate la sessione sul RaspberryPi) e digitate:

Adesso dovreste avere i files .ovpn sul vostro PC. Tornate a lavorare sul terminale del vostro Raspberry perché è opportuno rimettere tutto come prima, revocando permessi che potrebbero diventare una vulnerabilità. Usate perciò il comando:

IP Forwarding

A questo punto un’ultima configurazione per essere sicuri che il vostro Raspberry Pi possa conoscere come gestire l’inoltro del traffico internet attraverso la nuova rete. Digitate:

Trovate il seguente commento:

Rimuovete dalla riga successiva il simbolo di inizio commento (#). Che quindi diventa:

Cliccate su CTRL+X, uscite e salvate. Per applicare i cambiamenti descritti nel file appena modificato digitate:

Firewall

Raspbian ha un firewall integrato (IPTable) che bloccherà tutte le connessioni in ingresso: è quindi necessario permettere al traffico autorizzato di attraversare OpenVPN. Creiamo perciò un file che verrà eseguito ogni volta all’avvio del sistema:

Dentro questo file scriviamo:

In pratica abbiamo aggiunto una policy al firewall. Cliccate su CTRL+X, uscite e salvate.

Questo file non ha ancora i diritti per essere eseguito. Dovete perciò cambiargli sia i permessi che la proprietà (che imposterete a root). Per fare questo:

Questo script fornisce ad OpenVPN il permesso di fare breccia attraverso il firewall. Abbiamo bisogno ora di aggiungerlo al codice che imposta le interfacce di rete in modo che possa essere avviato al boot. Digitate:

Trovate la riga che dice:

Aggiungiamo alla fine della sezione (dopo tutti gli indirizzi IP che abbiamo aggiunto prima) una nuova riga. La nuova riga deve iniziare con un [TAB] in modo da indentarla:

Cliccate su CTRL+X, uscite e salvate. Potete riavviare il vostro Raspberry Pi con

Installate OpenVPN sul vostro dispositivo

OpenVPN Connect iOSA questo punto siete pronti ad scaricare ed installare l’applicazione OpenVPN Connect sul vostro dispositivo iPhone o Android: importate i profili (files .ovpn), inserite la password relativa al 3des.key e connettetevi.

Per iOS ecco qualche consiglio per la parametrizzazione dell’app (Settings app → OpenVPN):

  • Raise keyboard: Off
  • Connect via: Any network
  • Reconnect on wakeup: On
  • Protocol: Adaptive
  • Compression: Full
  • Connection timeout: 30 seconds
  • Network state detection: Active
  • Force AES-CBC ciphersuites: On
  • Google DNS fallback: off
  • Enable Proxy: secondo la vostra rete