La sicurezza delle reti pubbliche per accedere ad Internet lascia spesso a de­si­de­ra­re. Una soluzione per sentirsi sicuri navigando in rete, anche quando si è in giro, è quella di impostare una propria VPN (acronimo di “Virtual Private Network”, let­te­ral­men­te rete privata virtuale). Chi realizza au­to­no­ma­men­te una VPN ha inoltre accesso alla propria rete locale da qualsiasi con­nes­sio­ne Internet. Per la con­fi­gu­ra­zio­ne della propria rete virtuale privata serve un computer che svolga la funzione di server per per­met­te­re di creare questa rete. In questo caso il Raspberry Pi rap­pre­sen­ta un’opzione economica. Potete impostare una VPN sul Raspberry Pi con il software libero OpenVPN, che è di­spo­ni­bi­le da scaricare gra­tui­ta­men­te.

Consiglio: VPS gratis

Desideri un VPS tutto tuo? IONOS ti offre pacchetti VPS con le migliori pre­sta­zio­ni e a prezzi con­ve­nien­ti. Sfrutta subito la prova gratuita per i VPS di IONOS e testa il tuo VPS gra­tui­ta­men­te per 30 giorni.

Impostare una propria VPN: un quadro generale delle funzioni

Si configura una VPN in una rete locale (LAN), anche per poter accedervi dall’esterno. Rap­pre­sen­ta una rete di co­mu­ni­ca­zio­ne virtuale in cui vengono trasmesse so­prat­tut­to tramite Internet le richieste e le risposte scambiate tra server VPN e client VPN (i di­spo­si­ti­vi connessi al server).

Con una VPN impostata ma­nual­men­te è ad­di­rit­tu­ra possibile accedere alla propria rete locale da un qualsiasi accesso Internet. Così potete accedere ai dati che si trovano nella LAN e in­ter­ro­ga­re i singoli di­spo­si­ti­vi da remoto (ad esempio una stampante o un fax), oltre che uti­liz­za­re la con­nes­sio­ne Internet della vostra rete locale. Grazie ad una con­nes­sio­ne crit­to­gra­fa­ta al vostro server VPN potete inoltre muovervi in modo più sicuro in rete, rispetto a quanto ac­ca­dreb­be se vi col­le­ga­ste ad Internet da reti pubbliche, più pe­ri­co­lo­se (com’è il caso delle reti Wi-Fi aperte a cui tutti si possono con­net­te­re).

Per fare in modo che sia possibile una con­nes­sio­ne sicura ad un server VPN, dovete tuttavia impostare nella vostra rete locale su un computer un server VPN, che è co­stan­te­men­te connesso ad Internet. Il computer svolge quindi la funzione di host per la rete virtuale privata. Collegate i di­spo­si­ti­vi (come notebook, smart­pho­ne o tablet) con il server grazie ad un software per il client. L’accesso al vostro server VPN con un client connesso ad Internet, che si trova al di fuori della propria rete LAN privata, si verifica at­tra­ver­so una con­nes­sio­ne crit­to­gra­fa­ta tramite il co­sid­det­to tunnel VPN.

Questo tunnel VPN parte dal vostro client e termina nel vostro server VPN, quindi si estende lungo tutta la con­nes­sio­ne Internet. Così il tunnel è molto più sicuro rispetto alla media delle con­nes­sio­ni Internet pubbliche e per gli hacker è perciò difficile in­tru­fo­lar­si nel tunnel e carpire il suo traffico dati. Con­net­ten­do­si ad una propria VPN, potete lavorare con dati sensibili anche nelle reti Wi-Fi pubbliche in modo molto sicuro (come nel caso dell’online banking).

Creare un server VPN con il Raspberry Pi e OpenVPN: i vantaggi

Creare un server VPN con Raspberry Pi è par­ti­co­lar­men­te con­si­glia­to per via dei suoi costi com­pe­ti­ti­vi, infatti anche i prezzi di acquisto del mini computer e di tutto il ne­ces­sa­rio si man­ten­go­no bassi. Inoltre, anche il suo consumo ener­ge­ti­co per mantenere sempre in funzione il server sul computer rimane re­la­ti­va­men­te modico. Quindi, in generale, il mini computer si con­trad­di­stin­gue per un buon rapporto qualità-prezzo (anche se nel frattempo esistono diverse al­ter­na­ti­ve al Raspberry Pi). Tra i vari software per creare una propria VPN, vi sono diversi motivi che spingono ad optare per OpenVPN: si tratta prima di tutto di un software gratuito e molto diffuso per i server VPN, che supporta una grande quantità di sistemi operativi (Windows, OS X, Android, iOS, Linux e altri). In più, il programma si con­trad­di­stin­gue per una con­fi­gu­ra­zio­ne re­la­ti­va­men­te semplice e una stabilità elevata.

Che cosa serve per la con­fi­gu­ra­zio­ne di un server VPN sul Raspberry Pi?

Per questo tutorial avrete bisogno dei seguenti com­po­nen­ti:

  • Un Raspberry Pi (si consiglia il modello 2 o superiore)
  • Una scheda Micro SD con in­stal­la­to il sistema operativo Raspbian Jessie
  • Una con­nes­sio­ne Internet continua (meglio se tramite cavo di rete) e ali­men­ta­zio­ne elettrica (tramite cavo Micro USB) per il Raspberry Pi.

Inoltre dovete decidere se volete con­fi­gu­ra­re il server VPN di­ret­ta­men­te sul Raspberry Pi (col­le­gan­do il monitor e relativi mouse e tastiera) o se preferite im­po­star­lo tramite client SSH. La gestione remota del server tramite SSH è la variante con­si­glia­bi­le nella maggior parte dei casi, visto che così potete accedere da un altro computer al server VPN. A questo scopo ci sono diversi software molto diffusi come PuTTY, WinSCP (per Windows) o OpenSSH (per i sistemi operativi Unix), tramite i quali potete far fun­zio­na­re e am­mi­ni­stra­re il Raspberry Pi. Grazie al software SSH accedete al Raspberry Pi, inserendo il suo indirizzo IPv4 nel client (ovvero il computer con cui vorreste accedere al Raspberry Pi) e col­le­gan­do­li tra di loro. Potete farvi mostrare l’indirizzo IP del vostro Raspberry Pi ad esempio dal menu del router sul browser, che rag­giun­ge­te, di solito, all’indirizzo “192.168.0.1” (o “fritz.box“ nel caso in cui abbiate un router Fritz!Box) sul vostro browser.

Inserire gli indirizzi IP corretti

Per l’uso di un client SSH si consiglia di assegnare al Raspberry Pi un indirizzo IP privato statico nella rete locale, al­tri­men­ti dovete ricercare ogni volta che volete accedere al mini computer tramite SSH il suo nuovo indirizzo dinamico mo­men­ta­neo e col­le­gar­vi il client. Ancora più im­por­tan­te è la con­nes­sio­ne di un indirizzo privato già esistente con il Raspberry Pi per l’uso di OpenVPN: il server VPN deve essere per­ma­nen­te­men­te rag­giun­gi­bi­le nella rete locale allo stesso indirizzo, di modo che si possa accedervi in maniera costante e quindi anche su Internet il server VPN deve essere rag­giun­gi­bi­le sempre allo stesso indirizzo.

Di solito una con­nes­sio­ne ad Internet dispone però solo di un indirizzo IP dinamico pubblico, che cambia massimo ogni 24 ore e impedisce quindi la rag­giun­gi­bi­li­tà continua del server allo stesso indirizzo. Nel caso in cui la vostra con­nes­sio­ne Internet non disponga di un indirizzo IP pubblico statico, potete impostare un DNS dinamico (DDNS).

Con­sul­ta­te l’articolo apposito, per saperne di più su come assegnare un indirizzo IP statico al Raspberry Pi e su quali pos­si­bi­li­tà ci sono per la con­fi­gu­ra­zio­ne del servizio DDNS. Se volete uti­liz­za­re il vostro Raspberry Pi come server e renderlo sempre di­spo­ni­bi­le, dovreste occuparvi re­go­lar­men­te del suo ag­gior­na­men­to e della sua sicurezza.

In­stal­la­re un proprio server VPN sul Raspberry Pi con OpenVPN

Ora si può co­min­cia­re con la con­fi­gu­ra­zio­ne di OpenVPN. A questo scopo aprite il terminale (la riga di comando) del vostro Raspberry Pi.

Pre­pa­ra­zio­ne del Raspberry Pi

Prima di ci­men­tar­si nell’in­stal­la­zio­ne di OpenVPN, si consiglia di cercare e in­stal­la­re gli ag­gior­na­men­ti per i pacchetti già presenti sul Raspberry Pi. Date quindi il seguente comando nella console:

sudo apt-get update
sudo apt-get upgrade

Nel caso in cui non abbiate ancora cambiato la password standard del vostro Raspberry Pi (nome utente: “Pi”; password: “Raspberry”), dovete correre im­me­dia­ta­men­te ai ripari, perché al­tri­men­ti chiunque può avere accesso al sistema, sia in locale sia tramite accesso SSH. Con il comando qui sotto iniziate la con­fi­gu­ra­zio­ne del mini computer, riuscendo così a impostare una password sicura.

sudo raspi-config

In­stal­la­re OpenVPN e con­fi­gu­ra­re il file easy-rsa

Prima di tutto in­stal­la­te con il comando seguente il software OpenVPN e OpenSSL, che serve per criptare la con­nes­sio­ne ad Internet.

sudo apt-get install openvpn openssl

Dopo aver in­stal­la­to OpenVPN, copiate gli script già pronti presenti nella directory “easy-rsa” nella cartella di con­fi­gu­ra­zio­ne di OpenVPN. Qui create i diversi cer­ti­fi­ca­ti e le chiavi. Il seguente comando funziona solo su Raspbian Jessie (nel sistema operativo pre­ce­den­te, Wheezy, gli script si trovano su “/usr/share/doc/openvpn/examples/easy-rsa/2.0”).

sudo cp -r /usr/share/easy-rsa /etc/openvpn/easy-rsa

Poi aprite nella console il file “/etc/openvpn/easy-rsa/vars”, dove eseguite il seguente comando:

sudo nano /etc/openvpn/easy-rsa/vars

Ora si deve mo­di­fi­ca­re questo file con i giusti parametri. Mo­di­fi­ca­te le im­po­sta­zio­ni, so­sti­tuen­do tutta la riga “export EASY_RSA="`pwd`"” con la seguente:

export EASY_RSA="/etc/openvpn/easy-rsa"

Nel file si deve mo­di­fi­ca­re anche la lunghezza della chiave, im­po­stan­do così il livello di sicurezza della crit­to­gra­fia. Un Raspberry Pi 3 dispone di una pre­sta­zio­ne suf­fi­cien­te per poter elaborare senza dif­fi­col­tà una chiave di 2048 bit. Nel modello 2 questa crit­to­gra­fia porta già ad una di­mi­nu­zio­ne notevole della per­for­man­ce, così che in questo caso con­ver­reb­be uti­liz­za­re solo una crit­to­gra­fia a 1024 bit, a seconda se sia più im­por­tan­te per voi la velocità o la crit­to­gra­fia della con­nes­sio­ne, mentre invece, una crit­to­gra­fia a 4096 bit è utile solo in po­chis­si­mi casi. Mo­di­fi­ca­te la lunghezza della chiave inserendo il numero dei bit cor­ri­spon­den­ti nella riga “export KEY_SIZE=2048”.

Ora tornate indietro nella cartella di con­fi­gu­ra­zio­ne “easy-rsa”, ef­fet­tua­te il login come utente root e integrate le im­po­sta­zio­ni prese prima nelle variabili di ambiente, eseguendo lo script “vars” con il comando “source”. Infine rendete di­spo­ni­bi­le il file di con­fi­gu­ra­zio­ne derivato con un col­le­ga­men­to simbolico con il nome di “openssl.cnf”.

cd /etc/openvpn/easy-rsa
sudo su
source vars
ln -s openssl-1.0.0.cnf openssl.cnf

Creare cer­ti­fi­ca­ti e chiavi per OpenVPN

Prima di tutto create le prime chiavi per OpenVPN, dopo aver resettato eventuali chiavi già esistenti.

./clean-all
./build-ca OpenVPN

Vi viene richiesto di inserire le due lettere del “Country Name” della vostra nazione (IT per Italia e CH per la Svizzera). Le richieste correlate non sono im­por­tan­ti e potete quindi con­fer­ma­re con il tasto invio.

Infine generate le chiavi per il server:

./build-key-server server

Inserite un’altra volta il codice a due cifre della nazione e lasciate i campi suc­ces­si­vi vuoti. Infine con­fer­ma­te, premendo due volte su “Y”, se il cer­ti­fi­ca­to deve venire generato.

Dopo con­ti­nua­te con la con­fi­gu­ra­zio­ne di uno o più client VPN. Per fare ciò, create un cer­ti­fi­ca­to e una chiave per ogni di­spo­si­ti­vo con il quale vorreste accedere al server VPN: in questo il pro­ce­di­men­to è lo stesso di quello della con­fi­gu­ra­zio­ne del cer­ti­fi­ca­to e della chiave per il server (inserite l’in­di­ca­zio­ne della nazione e con­fer­ma­te per due volte). Potete assegnare ad ognuno dei di­spo­si­ti­vi un nome specifico (nel comando qui sotto ne viene dato uno per ogni client, ri­spet­ti­va­men­te “notebook”, “smart­pho­ne” e “tablet”).

./build-key laptop
./build-key smartphone
./build-key tablet
…

Se volete inserire una password per i client, uti­liz­za­te al posto dei comandi qui sopra quelli seguenti:

./build-key-pass laptop
./build-key-pass smartphone
./build-key-pass tablet
…

Con­clu­de­te la ge­ne­ra­zio­ne dei cer­ti­fi­ca­ti e della chiave con il comando per lo scambio di chiavi Diffie-Hellman:

./build-dh

A seconda dei casi potrebbe essere ne­ces­sa­rio un po’ di tempo. Non appena avete terminato il pro­ce­di­men­to, fate il logout come utente root:

exit

Generare il file di con­fi­gu­ra­zio­ne per il server OpenVPN

Aprite il file di con­fi­gu­ra­zio­ne di OpenVPN

sudo nano /etc/openvpn/openvpn.conf

Riempite il file vuoto con i diversi comandi che vi il­lu­stria­mo di seguito. Prima di tutto attivate il routing at­tra­ver­so “dev tun” tramite un tunnel IP e scegliete il pro­to­col­lo di rete UDP con “proto udp” (nel caso in cui vogliate uti­liz­za­re quello TCP, scegliete “proto tcp”). Nella riga seguente stabilite che il server OpenVPN è rag­giun­gi­bi­le alla porta 1194, ma potete anche cambiarla.

dev tun
proto udp
port 1194

Suc­ces­si­va­men­te create un cer­ti­fi­ca­to di root SSL/TLS (ca), un cer­ti­fi­ca­to digitale (cert) e una chiave digitale (key) tramite la cartella “easy-rsa”. Inoltre dovreste fare at­ten­zio­ne ad inserire la giusta crit­to­gra­fia di bit (1024, 2048, ecc.).

ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/server.crt
key /etc/openvpn/easy-rsa/keys/server.key
dh /etc/openvpn/easy-rsa/keys/dh2048.pem

Ora stabilite che il Raspberry Pi venga impostato come server VPN. Qui inserite l’indirizzo IP e la maschera di sottorete che devono essere assegnati alla VPN.

server 10.8.0.0 255.255.255.0

Con il comando “redirect-gateway def1 bypass-dhcp” inoltrate ora il traffico IP completo tramite il tunnel IP. Se mirate a misure di sicurezza elevate potete spe­ri­men­ta­re con questa im­po­sta­zio­ne, ma nel caso in cui sorgano dif­fi­col­tà o si navighi troppo len­ta­men­te si consiglia di toglierla. Dovreste, invece, uti­liz­za­re sempre le altre direttive elencate sotto per stabilire i server DNS pubblici con i quali il server VPN lavorerà. Nel comando suc­ces­si­vo è elencato un server di IONOS “217.237.150.188” e uno di Google “8.8.8.8”, ma potete anche inserire gli indirizzi IPv4 di altri server DNS. Tramite “log-append /var/log/openvpn” impostate poi che i log vengano scritti nel file “/var/log/openvpn”.

push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 217.237.150.188"
push "dhcp-option DNS 8.8.8.8"
log-append /var/log/openvpn

Tramite “persist-key” non vengono letti di nuovo i file “key” e con “persist-tun” non vengono avviati di nuovo i driver TUN e TAP per l’accesso di rete. Riducete i permessi del demone di OpenVPN tramite “user nobody” e “group nogroup”. Con “status /var/log/openvpn-status.log” create un file per le in­for­ma­zio­ni di stato, che vi mostrano la con­nes­sio­ne attuale. Inoltre si consiglia di con­cor­da­re l’ese­gui­bi­li­tà delle in­for­ma­zio­ni di log con il comando “verb”. Se scegliete “0”, non ricevete nessun output, a parte un messaggio di errore. Un valore compreso tra 1 e 4 si adatta a un uso normale, mentre i valori superiori sono utili a risolvere gli errori. Infine stabilite tramite il comando “client-to-client” che il client VPN non solo riconosca il server, ma anche gli altri client VPN e attivate con “comp-lzo” la com­pres­sio­ne LZO (dovete au­to­riz­zar­la anche nel file config del client).

persist-key
persist-tun
user nobody
group nogroup
status /var/log/openvpn-status.log
verb 3
client-to-client
comp-lzo

Con “CTRL + O” salvate le modifiche e con “CTRL + X” chiudete l’editor.

Impostare lo script per l’accesso ad Internet con un client

Per poter accedere tramite il vostro tunnel VPN alla con­nes­sio­ne Internet della vostra rete locale, dovete impostare un inoltro. Prima di tutto create quindi il file “/etc/init.d/rpivpn:

Sudo nano /etc/init.d/rpivpn

Copiando i seguenti commenti nel file, create l’header per lo script di Linux, init:

#! /bin/sh
### BEGIN INIT INFO
# Provides:          rpivpn
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: VPN initialization script
### END INIT INFO

Dopo attivate “ip_forward”, scrivendo un “1” in questo file:

echo 'echo "1" > /proc/sys/net/ipv4/ip_forward' | sudo -s

Fatto ciò, impostate tramite il filtro del pacchetto “iptables” un inoltro per i pacchetti VPN.

iptables -A INPUT -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT

Ora sono ancora ob­bli­ga­to­ri i comandi, che con­sen­to­no ai vostri client VPN di accedere alla LAN e ad Internet. Li con­fi­gu­ra­te con le righe seguenti:

iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -F POSTROUTING
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Salvate e chiudete il file nuo­va­men­te con “CTRL + O” e “CTRL + X”.

Affinché l’inoltro funzioni, dovete assegnare allo script ancora i permessi relativi e in­stal­lar­lo come script init.

sudo chmod +x /etc/init.d/rpivpn
sudo update-rc.d rpivpn defaults

Ora eseguite lo script e subito dopo riavviate il server OpenVPN.

sudo /etc/init.d/rpivpn
sudo /etc/init.d/openvpn restart

Terminare la con­fi­gu­ra­zio­ne dei client

Nell’ultimo passaggio unite insieme i cer­ti­fi­ca­ti e la chiave di ogni client in un unico pacchetto. Per questo vi loggate di nuovo come utente root, aprite la cartella “/etc/openvpn/easy-rsa/keys/” e create il file di con­fi­gu­ra­zio­ne del client. Con i comandi seguenti aprite il file del client “notebook”. La con­fi­gu­ra­zio­ne di ogni client funziona sempre allo stesso modo, quindi dovrete solo cambiare il nome del di­spo­si­ti­vo da impostare.

sudo su
cd /etc/openvpn/easy-rsa/keys
nano laptop.ovpn

Nel file “.ovpn” del client inserite ora il comando seguente:

dev tun
client
proto udp
remote x.x.x.x 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert laptop.crt
key laptop.key
comp-lzo
verb 3

Il contenuto del file qui sopra deve essere ancora mo­di­fi­ca­to nel modo opportuno. Nella quarta riga so­sti­tui­te “x.x.x.x” con l’indirizzo IP del vostro servizio DDNS (nel caso in cui uti­liz­zia­te un indirizzo IP statico pubblico, potete sem­pli­ce­men­te inserirlo), seguito dalla porta alla quale dovrebbe essere rag­giun­gi­bi­le il server VPN. Nella ter­zul­ti­ma e nella quar­tul­ti­ma riga inserite il nome del vostro client (in questo caso: “notebook”). Dopo aver apportato le modifiche, salvatele con “CTRL + O” e chiudete l’editor con “CTRL + X”.

Infine com­pri­me­te insieme in un file zip il file di con­fi­gu­ra­zio­ne con i cer­ti­fi­ca­ti e le chiavi. Nel caso in cui non abbiate in­stal­la­to alcun pacchetto zip sul Raspberry Pi, fatelo con il seguente comando:

apt-get install zip

Per creare un file zip uti­liz­za­te i seguenti comandi e fate di nuovo at­ten­zio­ne che abbiate impostato dap­per­tut­to il nome giusto del client.

zip /home/pi/raspberry_laptop.zip ca.crt laptop.crt laptop.key laptop.ovpn

Ora dovete ancora assegnare i permessi dei file e dopo terminate la con­fi­gu­ra­zio­ne con “exit”.

chown pi:pi /home/pi/raspberry_laptop.zip
exit

Il file zip è ora pronto e potete tra­sfe­rir­lo dal Raspberry Pi al client (ad esempio tramite un programma SCP o SFTP) e lo impostate poi sul di­spo­si­ti­vo del client. Adesso potete accedere con il di­spo­si­ti­vo da qualsiasi con­nes­sio­ne Internet alla rete locale collegata al client e alla sua con­nes­sio­ne Internet.

Con­fi­gu­ra­re un proprio server VPN sul Raspberry Pi conviene

Creare e gestire una propria VPN è molto meno costoso di quanto si immagini: grazie al basso consumo ener­ge­ti­co del Raspberry Pi non ci sono costi enormi da sostenere e i singoli com­po­nen­ti del server (Raspberry Pi, carta Micro-SD, ecc.) sono molto facili da reperire.

Inoltre un server VPN sul Raspberry Pi è in grado di fare molte cose. Infatti con il vostro server VPN dedicato sul Raspberry Pi potete accedere da ogni con­nes­sio­ne Internet alla vostra rete locale. Perciò la con­nes­sio­ne VPN è criptata e vi consente di muovervi in modo molto più sicuro in rete, sia che uti­liz­zia­te una rete Wi-Fi aperta e/o non sicura, sia che sfrut­tia­te la con­nes­sio­ne dati del vostro gestore di telefonia mobile. Dif­fi­cil­men­te una con­nes­sio­ne Internet da di­spo­si­ti­vi mobili riuscirà a offrirvi una maggiore pro­te­zio­ne.

Vai al menu prin­ci­pa­le