Openvpn: differenze tra le versioni

collegamenti esterni e modifiche minori
(collegamenti esterni e modifiche minori)
Riga 1: Riga 1:
{{Versioni compatibili}}
{{Versioni compatibili}}
== Introduzione ==
== Introduzione ==
Una VPN (''Virtual Private Network'') è un tipo di interconnessione tra computer che permette, sul piano logico, di comprendere in una LAN (''Local Area Network'') computer residenti in qualsiasi parte del pianeta.
Una VPN (''Virtual Private Network'') è un tipo di interconnessione tra computer che permette, sul piano logico, di comprendere in una LAN (''Local Area Network'') computer residenti in qualsiasi parte del pianeta.<br/>
Solitamente si considera una LAN come una rete di computer  locali, identificati da un indirizzo e una classe di IP (es: 192.168.0.0/24, 10.0.0.0/24 etc.). Con un collegamento VPN, un computer che si trovi fisicamente al di fuori di tale LAN, può risultarne un perfetto membro.  
Solitamente si considera una LAN come una rete di computer  locali, identificati da un indirizzo e una classe di IP (es: 192.168.0.0/24, 10.0.0.0/24 etc.). Con un collegamento VPN, un computer che si trovi fisicamente al di fuori di tale LAN, può risultarne un perfetto membro.  


Riga 28: Riga 28:
# echo "tun" >> /etc/modules
# echo "tun" >> /etc/modules
</pre>
</pre>
{{Box|Nota|La creazione del device virtuale <code>'''/dev/net/tun'''</code> permetterà sia a tun che a tap di funzionare e di poter essere richiamati dall'applicazione al momento della connessione (''modo dinamico'') ; ed è lo stesso device che permette ad Openvpn di crearsi quei device in modo permanente (''modo statico'').
{{Box|Nota|La creazione del device virtuale <code>'''/dev/net/tun'''</code> permetterà sia a <code>tun</code> che a <code>tap</code> di funzionare e di poter essere richiamati dall'applicazione al momento della connessione (''modo dinamico'') ; ed è lo stesso device che permette ad Openvpn di crearsi quei device in modo permanente (''modo statico'').
}}
}}


Riga 44: Riga 44:
</pre>
</pre>


==Generazione delle chiavi==
== Generazione delle chiavi ==
Se non l'abbiamo già fatto:
Se non l'abbiamo già fatto:
<pre>
<pre>
Riga 50: Riga 50:
</pre>
</pre>
    
    
Effettuiamo il collegamento fra due macchine, una chiamata in maniera molto originale '''server''' e una '''client'''. <br>Queste due macchine sono di due diversi utenti che possono risiedere ovunque nel mondo. La macchina server sarà quella in ascolto.
Effettuiamo il collegamento fra due macchine, una chiamata in maniera molto originale '''server''' e una '''client'''. <br>
Queste due macchine sono di due diversi utenti che possono risiedere ovunque nel mondo. La macchina server sarà quella in ascolto.<br>
Spostiamoci sul server, esattamente in <code>/etc/openvpn</code> e creiamo la nostra chiave con:  
Spostiamoci sul server, esattamente in <code>/etc/openvpn</code> e creiamo la nostra chiave con:  
<pre>
<pre>
# openvpn --genkey --secret zmo.key
# openvpn --genkey --secret zmo.key
</pre>
</pre>
Una volta creata dovremmo poterla copiare nella stessa directory del client. Questo passaggio dovrebbe essere fatto nel più sicuro dei modi ad esempio tramite mail crittografate, o utilizzando scp (''dalla suite Openssh'': vedi la guida [[OpenSSH: file di configurazione]]).
Una volta creata dovremmo poterla copiare nella stessa directory del client. Questo passaggio dovrebbe essere fatto nel più sicuro dei modi ad esempio tramite mail crittografate, o utilizzando <code>scp</code> (''dalla suite Openssh'': vedi la guida [[OpenSSH: file di configurazione]]).<br>
Utilizzando queste chiavi su tutti gli host (''crittografia simmetrica'') otteniamo una  notevole cifratura del nostro canale in maniera davvero rapida.
Utilizzando queste chiavi su tutti gli host (''crittografia simmetrica'') otteniamo una  notevole cifratura del nostro canale in maniera davvero rapida.


==Collegamento==
== Collegamento ==
===Configurazione shared-keys===
=== Configurazione shared-keys ===
Spostiamoci sul server e creiamo in <code>/etc/openvpn</code> il file <code>server.conf</code> editandolo così:
Spostiamoci sul server e creiamo in <code>/etc/openvpn</code> il file <code>server.conf</code> editandolo così:
<pre>
<pre>
Riga 69: Riga 70:
</pre>
</pre>


;<code>'''dev'''</code>: identifica il device utilizzato per il tunnel. I possibili device utilizzabili da openvpn sono tun e tap. La differenza tra i due device è fondamentale, in quanto tun si adopera per la trasmissione di pacchetti IP (''una specie di ppp'') e tap invece per la trasmissione di frame ethernet (''una specie di eth''). Per la creazione di lan virtuali o per la condivisione di risorse come file-server, ftp-server, dobbiamo usare tap.
;<code>'''dev'''</code>: identifica il device utilizzato per il tunnel. I possibili device utilizzabili da openvpn sono <code>tun</code> e <code>tap</code>. La differenza tra i due device è fondamentale, in quanto <code>tun</code> si adopera per la trasmissione di pacchetti IP (''una specie di <code>ppp</code>'') e <code>tap</code> invece per la trasmissione di frame ethernet (''una specie di <code>eth</code>''). Per la creazione di LAN virtuali o per la condivisione di risorse come file-server, ftp-server, dobbiamo usare <code>tap</code>.
;<code>'''port'''</code>: socket dell'applicazione, il default è la 5000, deve essere la stessa da ogni capo della vpn. È da sottolineare che sul server invece di <code>''port''</code> si scriverà <code>'''lport'''</code> (''local'') mentre sui client <code>'''rport'''</code> (''remote'').
;<code>'''port'''</code>: socket dell'applicazione, il default è la 5000, deve essere la stessa da ogni capo della VPN. È da sottolineare che sul server invece di <code>''port''</code> si scriverà <code>'''lport'''</code> (''local'') mentre sui client <code>'''rport'''</code> (''remote'').
;<code>'''ifconfig'''</code>: determina l'IP dell'interfaccia virtuale (''tun o tap'').  
;<code>'''ifconfig'''</code>: determina l'IP dell'interfaccia virtuale (''<code>tun</code> o <code>tap</code>'').  
;<code>'''secret'''</code>: a questa stringa diamo il path della key creata in precedenza con openvpn.
;<code>'''secret'''</code>: a questa stringa diamo il path della key creata in precedenza con openvpn.
;<code>'''verb'''</code>: verb definisce il grado di verbose stampato a video in output durante l'esecuzione (''da 0 a 11 sono spiegati dando <code>openvpn --help</code>'').
;<code>'''verb'''</code>: "verb" definisce il grado di verbose stampato a video in output durante l'esecuzione (''da 0 a 11 sono spiegati dando <code>openvpn --help</code>'').


Adesso sul client creiamo il file <code>'''/etc/openvpn/client.conf'''</code> così:
Adesso sul client creiamo il file <code>'''/etc/openvpn/client.conf'''</code> così:
<pre>
<pre>
remote www.hostremoto.net (che ovviamente corrisponderà al server)
remote www.hostremoto.net (che ovviamente corrisponderà al server)
dev tap  
dev tap  
Riga 108: Riga 109:
           RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
           RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
</pre>
</pre>
Nella riga <code>inet addr</code> vengono indicati ip, broadcast e netmask.<br>
Nella riga <code>inet addr</code> vengono indicati IP, broadcast e netmask.<br>
Proviamo a pingare l'host che sappiamo connesso:
Proviamo a pingare l'host che sappiamo connesso:
<pre>
<pre>
Riga 115: Riga 116:
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=258 ms
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=258 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=135 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=135 ms
</pre>
</pre>
In questo modo disporremo rapidamente di un canale cifrato relativamente sicuro, per lo scambio di dati privati.
In questo modo disporremo rapidamente di un canale cifrato relativamente sicuro, per lo scambio di dati privati.


===Configurazione SSL/TLS===
=== Configurazione SSL/TLS ===
====Openvpn & Openssl====
==== Openvpn & Openssl ====
Adesso, avvalendoci di SSL/TLS, configureremo un CA (''Certificate Authority'') che servirà a firmare i certificati degli host e a rendere disponibile il proprio; creeremo le rispettive chiavi (''una anche per il CA stesso'') facendo in modo che ognuno detenga una chiave e un certificato firmato. Infine, per lo scambio sicuro di tali dati, creeremo un Diffie-Hellman.
Adesso, avvalendoci di SSL/TLS, configureremo un CA (''Certificate Authority'') che servirà a firmare i certificati degli host e a rendere disponibile il proprio; creeremo le rispettive chiavi (''una anche per il CA stesso'') facendo in modo che ognuno detenga una chiave e un certificato firmato. Infine, per lo scambio sicuro di tali dati, creeremo un Diffie-Hellman.
<pre>
<pre>
Riga 125: Riga 126:
</pre>
</pre>


====Configurazione CA====
==== Configurazione CA ====
Il CA risiederà sul server, ma distinguiamo le entità in questo modo:  
Il CA risiederà sul server, ma distinguiamo le entità in questo modo:  
CA – Server – Client0 – Client1...<br>
CA – Server – Client0 – Client1...<br>
Riga 157: Riga 158:
Ricapitolando dovremmo aver creato <code>'''ca.key  rich.ca'''</code> e <code>'''ca.cert'''</code>.
Ricapitolando dovremmo aver creato <code>'''ca.key  rich.ca'''</code> e <code>'''ca.cert'''</code>.


====TLS-Server & TLS-Client====
==== TLS-Server & TLS-Client ====
Occupiamoci ora di server e client, la loro configurazione è pressoché uguale.<br>
Occupiamoci ora di server e client, la loro configurazione è pressoché uguale.<br>
Sul server:
Sul server:
Riga 172: Riga 173:
# openssl dhparam -out dh.pem 1024
# openssl dhparam -out dh.pem 1024
</pre>
</pre>
{{Box|Nota|Il format di default adottato da dhparam è PEM (''adozione standard di Unix''). Per una ulteriore consultazione del flag dhparam, fare riferimento a questa pagina: [http://www.mkssoftware.com/docs/man1/openssl_dhparam.1.asp Openssl dhparam]
{{Box|Nota|Il format di default adottato da <code>dhparam</code> è PEM (''adozione standard di Unix''). Per una ulteriore consultazione del flag <code>dhparam</code>, fare riferimento a questa pagina: Openssl dhparam<sup>[[#Riferimenti|[1]]]</sup>
}}
}}


Riga 210: Riga 211:
</pre>
</pre>


Una volta compilati i file, lanciamo openvpn su entrambe le macchine come in precedenza:
Una volta compilati i file, lanciamo <code>openvpn</code> su entrambe le macchine come in precedenza:
<pre>
<pre>
openvpn –config xxxx.conf
openvpn –config xxxx.conf
</pre>
</pre>


==Demonizzare Openvpn==
== Demonizzare Openvpn ==
===Lo script <code>/etc/init.d/openvpn</code>===
=== Lo script <code>/etc/init.d/openvpn</code> ===
Questo script, che demonizza openvpn, una volta lanciato va a cercare nella dir <code>/etc/openvpn</code> il file con estensione <code>'''.conf'''</code> che dovrà corrispondere al file di configurazione. Dico questo poiché in varie documentazioni lo troverete con estensioni diverse (''es: .ovpn etc..'') che lo script non riconoscerebbe come valido.  
Questo script, che demonizza <code>openvpn</code>, una volta lanciato va a cercare nella dir <code>/etc/openvpn</code> il file con estensione <code>'''.conf'''</code> che dovrà corrispondere al file di configurazione. Dico questo poiché in varie documentazioni lo troverete con estensioni diverse (''es: .ovpn etc..'') che lo script non riconoscerebbe come valido.  
<pre>
<pre>
# /etc/init.d/openvpn start
# /etc/init.d/openvpn start
</pre>
</pre>
Una volta avviato lo script attiverà il demone. Per impostarlo al boot:
Una volta avviato lo script attiverà il [[demone]]. Per impostarlo al boot:
<pre>
<pre>
# update-rc.d openvpn defaults
# update-rc.d openvpn defaults
Riga 230: Riga 231:
</pre>
</pre>


===Openvpn & log===
=== Openvpn & log ===
Per loggare l'output in un file qualunque (''anche se non esiste verrà creato'') aggiungere la riga al file <code>.conf</code>:
Per loggare l'output in un file qualunque (''anche se non esiste verrà creato'') aggiungere la riga al file <code>.conf</code>:
<pre>
<pre>
Riga 237: Riga 238:
Il file di log sarà più o meno forbito in base al valore che avremo dato al parametro <code>'''verb'''</code>.
Il file di log sarà più o meno forbito in base al valore che avremo dato al parametro <code>'''verb'''</code>.


==Conclusioni==
== Conclusioni ==
[http://www.openvpn.net Openvpn] permette la creazione di vpn da applicativo ad applicativo, non necessitando quindi di modifiche nel kernel come nel caso di vpn che implementino IPSEC. Gira sulle principali piattaforme allacciando quindi OS diversi.Anche se lo standard IPSEC è una realtà nei dispositivi di rete hardware, il livello di sicurezza che openvpn può raggiungere è indiscutibile.
Openvpn<sup>[[#Riferimenti|[2]]]</sup> permette la creazione di VPN da applicativo ad applicativo, non necessitando quindi di modifiche nel [[kernel]] come nel caso di VPN che implementino IPSEC. Gira sulle principali piattaforme allacciando quindi OS diversi. Anche se lo standard IPSEC è una realtà nei dispositivi di rete hardware, il livello di sicurezza che <code>openvpn</code> può raggiungere è indiscutibile.
===Riferimenti:===
 
[http://openvpn.net Openvpn.net]<br>
== Riferimenti ==
[1] [http://www.mkssoftware.com/docs/man1/openssl_dhparam.1.asp OpenSSL dhparam]<br/>
[2] [http://openvpn.net Openvpn.net]<br>
[http://www.openssl.org www.openssl.org]<br>
[http://www.openssl.org www.openssl.org]<br>
[http://milano.linux.it/contributi/ValentinoSquilloni.pdf Openvpn e reti private virtuali]<br>
<!-- [http://milano.linux.it/contributi/ValentinoSquilloni.pdf Openvpn e reti private virtuali]<br>
[http://lagash.dft.unipa.it/AL/al290.htm Appunti Linux]
LINK ROTTO E AL MOMENTO IRRINTRACCIABILE -->
[http://a2.pluto.it/a2/a263.htm#almltitle2684 Appunti Linux]


{{Autori
{{Autori
|Autore = [[Utente:Zmo.zmo|zmo]]
|Autore = [[Utente:Zmo.zmo|zmo]]
}}
}}


[[Categoria:VPN]]
[[Categoria:VPN]]
6 999

contributi