Debian come server VPN: differenze tra le versioni
mNessun oggetto della modifica |
|||
(27 versioni intermedie di 5 utenti non mostrate) | |||
Riga 1: | Riga 1: | ||
{{Versioni compatibili}} | {{Versioni compatibili|Wheezy|Jessie}} | ||
== Introduzione == | == Introduzione == | ||
In molte aziende c'è la necessità di permettere al personale fuori ufficio la connessione ad alcuni servizi della LAN o ad alcune directory presenti sul server aziendale. | In molte aziende c'è la necessità di permettere al personale fuori ufficio la connessione ad alcuni servizi della LAN o ad alcune directory presenti sul server aziendale. | ||
Riga 7: | Riga 6: | ||
<br/> | <br/> | ||
Tra le possibili opzioni la scelta è ricaduta su ''OpenVPN'', principalmente per la facilità di configurazione e per il supporto a diversi tipi di sistemi operativi o dispositivi; esistono infatti client OpenVPN per Microsoft Windows, per MacOSX, per Linux e per diversi dispositivi mobili quali iPhones e smartphones. | Tra le possibili opzioni la scelta è ricaduta su ''OpenVPN'', principalmente per la facilità di configurazione e per il supporto a diversi tipi di sistemi operativi o dispositivi; esistono infatti client OpenVPN per Microsoft Windows, per MacOSX, per Linux e per diversi dispositivi mobili quali iPhones e smartphones. | ||
OpenVPN crea connessioni punto-punto ( client-server ) criptate in modo simile a Ipsec ma senza modificare il kernel, | OpenVPN crea connessioni punto-punto ( client-server ) criptate in modo simile a Ipsec ma senza modificare il kernel, permettendo il routing delle chiamate del client sulla rete del server. | ||
In altre parole con un portatile equipaggiato ad esempio con Microsoft Windows ( il client ) è possibile collegarsi al server che ospita OpenVPN, il quale si occuperà poi del routing verso le macchine della rete remota, gestendo il tutto come se si fosse fisicamente collegati ad uno switch della rete remota. | In altre parole con un portatile equipaggiato ad esempio con Microsoft Windows ( il client ) è possibile collegarsi al server che ospita OpenVPN, il quale si occuperà poi del routing verso le macchine della rete remota, gestendo il tutto come se si fosse fisicamente collegati ad uno switch della rete remota. | ||
== Prerequisiti == | == Prerequisiti == | ||
Il server OpenVPN deve essere raggiungibile da internet; perciò è indispensabile avere uno dei seguenti requisiti: | Il server OpenVPN deve essere raggiungibile da internet; perciò è indispensabile avere uno dei seguenti requisiti: | ||
* un indirizzo IP pubblico sul server OpenVPN | * un indirizzo IP pubblico statico sul server OpenVPN | ||
* un indirizzo IP pubblico sul router, con impostato il corretto port-forward verso il server OpenVPN | * un indirizzo IP pubblico sul router, con impostato il corretto port-forward verso il server OpenVPN | ||
* un account DynDNS o simili con il quale sopperire alla mancanza di un indirizzo IP pubblico | * un account DynDNS o simili con il quale sopperire alla mancanza di un indirizzo IP pubblico statico. | ||
Purtroppo se l'IP è privato (ad esempio se il provider fa passare i propri clienti per un NAT) non sarà possibile impostare il server. | |||
== Installazione == | == Installazione == | ||
Riga 30: | Riga 30: | ||
failed! | failed! | ||
</pre> | </pre> | ||
Niente paura! Il demone non è partito | Niente paura! Il [[demone]] non è partito perché non abbiamo ancora creato i file di configurazione necessari. | ||
== Generazione dei certificati == | == Generazione dei certificati == | ||
Riga 37: | Riga 37: | ||
# cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/ | # cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/ | ||
</pre> | </pre> | ||
Nel caso in cui questo percorso non esistesse, possiamo localizzare la | Nel caso in cui questo percorso non esistesse, possiamo localizzare la directory <code>easy-rsa</code> con i comandi: | ||
<pre> | <pre> | ||
# updatedb | # updatedb | ||
# locate easy-rsa | # locate easy-rsa | ||
</pre> | </pre> | ||
Una volta trovata, copiamola nel path corretto: | Una volta trovata, copiamola nel [[path]] corretto: | ||
<pre> | <pre> | ||
# cp -R /usr/share/doc/openvpn/examples/easy-rsa /etc/openvpn | # cp -R /usr/share/doc/openvpn/examples/easy-rsa /etc/openvpn | ||
Riga 123: | Riga 123: | ||
</pre> | </pre> | ||
Anche in questo caso l'unico valore che ''dovremo'' aggiungere a mano sarà il ''Common Name'', dove andrà indicato il nome completo del server. | Anche in questo caso l'unico valore che ''dovremo'' aggiungere a mano sarà il ''Common Name'', dove andrà indicato il nome completo del server. | ||
A questo punto possiamo generare il certificato per il client (questa operazione andrà ripetuta per ogni client che dovrà collegarsi alla VPN): | A questo punto possiamo generare il certificato per il client (questa operazione andrà ripetuta per ogni client che dovrà collegarsi alla VPN): | ||
<pre> | <pre> | ||
# ./build-key client1 | # ./build-key client1 | ||
</pre> | </pre> | ||
Otterremo un output simile al precedente, in cui l'unico valore che ''dovremo'' aggiungere a mano sarà il ''Common Name'', dove andrà indicato il nome completo del client (in questo caso ''client1''). Alla richiesta di una password lasciamo il campo bianco, premendo semplicemente ''enter''. | Otterremo un output simile al precedente, in cui l'unico valore che ''dovremo'' aggiungere a mano sarà il ''Common Name'', dove andrà indicato il nome completo del client (in questo caso ''client1''). Alla richiesta di una password lasciamo il campo bianco, premendo semplicemente ''enter''.<br/> | ||
Con questa configurazione, ai client che si connetteranno alla VPN non sarà richiesta alcuna password e questo può essere visto come un buco di sicurezza nel caso in cui uno dei client venga ad esempio rubato. Se vogliamo obbligare i client ad inserire una password all'atto della connessione, occorre sostituire il comando <code>./build-key</code> con <code>./build-key-pass</code>. | |||
<br/><br/> | <br/><br/> | ||
Generiamo infine i parametri di Diffie-Hellman per il server: | Generiamo infine i parametri di Diffie-Hellman per il server: | ||
Riga 147: | Riga 148: | ||
</pre> | </pre> | ||
== Configurazione == | == Configurazione del Server == | ||
Spostiamo i file generati nella directory corretta: | Spostiamo i file generati nella directory corretta: | ||
<pre> | <pre> | ||
Riga 157: | Riga 158: | ||
# cp dh1024.pem /etc/openvpn | # cp dh1024.pem /etc/openvpn | ||
</pre> | </pre> | ||
Spostiamoci | Spostiamoci in <code>/etc/openvpn</code>: | ||
<pre> | <pre> | ||
# cd /etc/openvpn | # cd /etc/openvpn | ||
</pre> | </pre> | ||
e | e creiamo il file di configurazione principale: | ||
<pre> | <pre> | ||
# nano openvpn.conf | # nano openvpn.conf | ||
</pre> | </pre> | ||
Il suo contenuto dovrà essere simile al seguente: | Il suo contenuto dovrà essere simile al seguente: | ||
<pre> | |||
port 1194 | |||
proto udp | |||
dev tun | |||
ca ca.crt | |||
cert mioserver.crt | |||
key mioserver.key | |||
dh dh1024.pem | |||
server 172.17.0.0 255.255.255.0 | |||
ifconfig-pool-persist ipp.txt | |||
keepalive 10 120 | |||
comp-lzo | |||
user nobody | |||
group users | |||
persist-key | |||
persist-tun | |||
status openvpn-status.log | |||
verb 3 | |||
client-to-client | |||
</pre> | |||
L'ultima riga (<code>client-to-client</code>) è necessaria solo se vogliamo che i client VPN connessi al nostro server siano in grado di parlare tra di loro. | |||
<br/> | |||
Un esempio ben commentato di tutte le opzioni utilizzabili nella configurazione si trova nella documentazione di Debian: <code>/usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz</code>. | |||
Per permettere ai client di contattarsi tra loro dobbiamo inoltre abilitare l'IP forward: | |||
<pre> | |||
echo 1 > /proc/sys/net/ipv4/ip_forward | |||
</pre> | |||
Potrebbe essere utile inserire questo comando nello script di gestione del firewall del server, in modo che l'operazione sia automatizzata. | |||
== Test == | |||
Riavviamo il demone OpenVPN: | |||
<pre> | |||
# /etc/init.d/openvpn restart | |||
</pre> | |||
Verifichiamo che nella nostra configurazione di rete ci sia il nuovo device virtuale per il tunnel VPN: | |||
<pre> | |||
# ifconfig | |||
eth0 ... | |||
lo Link encap:Local Loopback | |||
inet addr:127.0.0.1 Mask:255.0.0.0 | |||
inet6 addr: ::1/128 Scope:Host | |||
UP LOOPBACK RUNNING MTU:16436 Metric:1 | |||
RX packets:0 errors:0 dropped:0 overruns:0 frame:0 | |||
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 | |||
collisions:0 txqueuelen:0 | |||
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) | |||
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 | |||
inet addr:172.17.0.1 P-t-P:172.17.0.2 Mask:255.255.255.255 | |||
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 | |||
RX packets:1958 errors:0 dropped:0 overruns:0 frame:0 | |||
TX packets:230 errors:0 dropped:0 overruns:0 carrier:0 | |||
collisions:0 txqueuelen:100 | |||
RX bytes:112672 (110.0 KiB) TX bytes:23860 (23.3 KiB) | |||
</pre> | |||
e verifichiamo che la configurazione sia funzionante: | |||
<pre> | |||
# ping 172.17.0.1 | |||
PING 172.17.0.1 (172.17.0.1) 56(84) bytes of data. | |||
64 bytes from 172.17.0.1: icmp_seq=1 ttl=64 time=0.041 ms 64 bytes from 172.17.0.1: icmp_seq=2 ttl=64 time=0.030 ms | |||
</pre> | |||
== Configurazione dei client == | |||
=== Client Debian === | |||
L'installazione è molto semplice e consta di pochissimi passaggi: | |||
<pre> | |||
# aptitude update | |||
# aptitude upgrade | |||
# aptitude install openvpn | |||
</pre> | |||
Ora dobbiamo copiare dal server i file relativi al certificato del client, ad esempio con <code>scp</code>: | |||
<pre> | |||
# scp -C -r root@mioserver:/etc/openvpn/easy-rsa/2.0/keys/client1* /etc/openvpn/ | |||
# scp -C -r root@mioserver:/etc/openvpn/easy-rsa/2.0/keys/ca.cert /etc/openvpn/ | |||
</pre> | |||
Quindi creiamo il file di configurazione: | |||
<pre> | |||
# nano /etc/openvpn/openvpn.conf | |||
</pre> | |||
avente come contenuto: | |||
<pre> | |||
client | |||
dev tun | |||
proto udp | |||
remote ip-or-hostname-of-your-openvpn-server 1194 | |||
resolv-retry infinite | |||
nobind | |||
persist-key | |||
persist-tun | |||
ca ca.crt | |||
cert client1.crt | |||
key client1.key | |||
comp-lzo | |||
verb 3 | |||
</pre> | |||
Salviamolo e riavviamo il demone: | |||
<pre> | |||
# /etc/init.d/openvpn restart | |||
Starting virtual private network daemon: openvpn(OK). | |||
</pre> | |||
Verifichiamo che sia presente il nuovo device di rete: | |||
<pre> | |||
# ifconfig | |||
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 | |||
inet addr:172.16.0.2 P-t-P:172.16.0.5 Mask:255.255.255.255 | |||
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 | |||
RX packets:0 errors:0 dropped:0 overruns:0 frame:0 | |||
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 | |||
collisions:0 txqueuelen:100 | |||
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) | |||
</pre> | |||
e proviamo a contattare il server: | |||
<pre> | |||
# ping 172.16.0.1 | |||
PING 172.16.0.1 (172.16.0.1) 56(84) bytes of data. | |||
64 bytes from 172.16.0.1: icmp_seq=1 ttl=64 time=56.1 ms | |||
</pre> | |||
=== Client Windows === | |||
Per installare OpenVPN GUI per Windows su di un sistema Microsoft Windows XP a 32 o 64 bit, procedere nel seguente modo: | |||
* Effettuare il download del pacchetto di installazione dall'URL http://openvpn.se/download.html. Scegliere la versione contenente oltre alla GUI anche il software OpenVPN già incluso; | |||
* Avviare l'installazione. Scegliere le opzioni di default e confermare di voler proseguire nell'installazione del TAP-Win32 Adapter V8 (si tratta dell'interfaccia Ethernet Virtuale utilizzata da OpenVPN). | |||
* Terminata la procedura di installazione, nella TrayBar compare un'icona con due terminali rossi ed un globo terrestre. Tali terminali diventano gialli quando si sta tentando una connessione e finalmente verdi quando la connessione VPN con la LAN remota è stabilita; | |||
* Dal Menù di Avvio di Windows, cliccare su [Start]->[Programmi]->[OpenVPN]->[OpenVPN configuration file directory]. Si aprirà la cartella: | |||
<code>C:\Programmi\OpenVPN\config</code> in cui bisogna | |||
** creare il file di configurazione <code>client1.ovpn</code> contenente la seguente configurazione: | |||
<pre> | |||
client | |||
dev tun | |||
proto udp | |||
remote mioserver-remote-ip-address 1194 | |||
resolv-retry infinite | |||
nobind | |||
persist-key | |||
persist-tun | |||
ca ca.crt | |||
cert client1.crt | |||
key client1.key | |||
comp-lzo | |||
verb 3 | |||
route-delay | |||
</pre> | |||
** copiare i file <code>ca.crt client1.crt client1.key</code> presi dal server. | |||
* A questo punto, effettuando un doppio click sull'icona di OpenVPN nella Tray Bar, inizia la procedura di connessione. Se l'autenticazione avviene con successo la connessione VPN sarà stabilita e i due terminali dell'icona di OpenVPN diventano verdi. | |||
Cliccando con il tasto destro del mouse sull'icona di OpenVPN nella Traybar compare un menù con diverse utili opzioni elencate di seguito e che si commentano da sole: Connect, Disconnect, Show Status, View Log, Edit Config, Proxy Settings. In particolare, qualora si verificassero problemi di connessione è utile la voce View Log per stabilire la causa dell'insuccesso. | |||
* Se invece la connessione avviene, quindi i 2 terminali dell'icona sono verdi, ma comunque non si raggiunge la LAN remota o Internet, può tornare utile il comando <code>ipconfig /all</code> da digitare al Prompt dei Comandi di Windows. Ecco un esempio della parte di output che interessa: | |||
<pre> | |||
Scheda Ethernet Connessione alla rete locale (LAN) 7: | |||
Suffisso DNS specifico per connessione: | |||
Descrizione . . . . . . . . . . . . . : TAP-Win32 Adapter V8 | |||
Indirizzo fisico. . . . . . . . . . . : 00-FF-AD-63-83-3D | |||
DHCP abilitato. . . . . . . . . . . . : Sì | |||
Configurazione automatica abilitata . : Sì | |||
Indirizzo IP. . . . . . . . . . . . . : 192.168.250.51 | |||
Subnet Mask . . . . . . . . . . . . . : 255.255.255.0 | |||
Gateway predefinito . . . . . . . . . : 192.168.250.254 | |||
Server DHCP . . . . . . . . . . . . . : 192.168.0.0 | |||
Server DNS . . . . . . . . . . . . . : 192.168.250.254 | |||
Lease ottenuto. . . . . . . . . . . . : giovedì 20 settembre 2007 19.51.37 | |||
Scadenza lease . . . . . . . . . . . .: venerdì 19 settembre 2008 19.51.37 | |||
</pre> | |||
<br/> | |||
Se vogliamo che la connessione VPN parta al login del nostro utente, è sufficiente creare un file BAT con contenuto: | |||
<pre> | |||
openvpn-gui --connect client1.ovpn | |||
exit</pre> | |||
e metterlo in esecuzione automatica. | |||
==== Windows 7 ==== | |||
L'installazione di OpenVPN su Windows 7 ha bisogno di un piccolo intervento manuale in più. Si scarichi innanzitutto l'ultima versione del client dall'indirizzo: http://openvpn.net/release/ . Poi si lanci il file scaricato in modalità compatibile con Windows Vista Service Pack 1 e come Amministratore. Il resto dei passaggi sono identici a quelli visti nel paragrafo precedente. | |||
<br/> | |||
Se non vogliamo essere annoiati dal messaggio di conferma dell'avvio di OpenVPN con le credenziali di amministratore, possiamo creare il file <code>OPENVPN_runas_W7task.XML</code> con contenuto: | |||
<pre> | |||
<?xml version="1.0" encoding="UTF-16"?> <Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task"> | |||
<RegistrationInfo> | |||
<Date>2010-05-14T10:47:32.1799727</Date> | |||
<Author>Ferdinando Bassi v1.0</Author> | |||
<Description>Avvio openvpngui all'accesso utente con privilegi elevati</Description> | |||
</RegistrationInfo> | |||
<Triggers> | |||
<LogonTrigger> | |||
<Enabled>true</Enabled> | |||
</LogonTrigger> | |||
</Triggers> | |||
<Principals> | |||
<Principal id="Author"> | |||
<UserId>CLIENT1\utente</UserId> | |||
<LogonType>InteractiveToken</LogonType> | |||
<RunLevel>HighestAvailable</RunLevel> | |||
</Principal> | |||
</Principals> | |||
<Settings> | |||
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy> | |||
<DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries> | |||
<StopIfGoingOnBatteries>true</StopIfGoingOnBatteries> | |||
<AllowHardTerminate>true</AllowHardTerminate> | |||
<StartWhenAvailable>true</StartWhenAvailable> | |||
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable> | |||
<IdleSettings> | |||
<StopOnIdleEnd>true</StopOnIdleEnd> | |||
<RestartOnIdle>false</RestartOnIdle> | |||
</IdleSettings> | |||
<AllowStartOnDemand>true</AllowStartOnDemand> | |||
<Enabled>true</Enabled> | |||
<Hidden>false</Hidden> | |||
<RunOnlyIfIdle>false</RunOnlyIfIdle> | |||
<WakeToRun>false</WakeToRun> | |||
<ExecutionTimeLimit>P3D</ExecutionTimeLimit> | |||
<Priority>7</Priority> | |||
</Settings> | |||
<Actions Context="Author"> | |||
<Exec> | |||
<Command>"C:\Program Files (x86)\OpenVPN\bin\openvpn-gui-1.0.3.exe"</Command> | |||
</Exec> | |||
</Actions> | |||
</Task> | |||
</pre> | |||
'''Attenzione a correggere, nel file precedente, il nome del PC e dell'utente'''!! | |||
<br/> | |||
Fatto ciò è sufficiente importarlo dall'interfaccia delle "Utilità di pianificazione" per terminare il tutto. | |||
== Registrare i LOG delle connessioni instaurate e concluse == | |||
Può essere utile avere dei file di log esaustivi su quante connessioni siano state aperte, da quali client, a quali ore. | |||
A tale scopo si può modificare il file di configurazione <code>/etc/openvpn/openvpn.conf</code> ed aggiungere le righe: | |||
<pre> | |||
script-security 2 | |||
client-connect ./client-connect.sh | |||
client-disconnect ./client-disconnect.sh | |||
</pre> | |||
Ora creiamo i due files <code>/etc/openvpn/client-connect.sh</code> e <code>/etc/openvpn/client-disconnect.sh</code>, di contenuto: | |||
# '''/etc/openvpn/client-connect.sh''': | |||
<pre> | |||
#!/bin/bash | |||
# This is an openvpn connect script that log users connection | |||
# ${ifconfig_pool_remote_ip} is IP/Subnet/MAC | |||
# ${common_name} is certificate's common name | |||
# | |||
test -f /var/log/openvpn/conn.log || touch /var/log/openvpn/conn.log | |||
echo "`date` - connect - CN: ${common_name} has IP: ${ifconfig_pool_remote_ip}" >> /var/log/openvpn/conn.log | |||
</pre> | |||
# '''/etc/openvpn/client-disconnect.sh''': | |||
<pre> | |||
#!/bin/bash | |||
# This is an openvpn disconnect script that log user | |||
# ${ifconfig_pool_remote_ip} is IP/Subnet/MAC | |||
# ${common_name} is certificate's common name | |||
# | |||
test -f /var/log/openvpn/conn.log || touch /var/log/openvpn/conn.log | |||
echo "`date` - disconnect - CN: ${common_name} from IP ${ifconfig_pool_remote_ip}" >> /var/log/openvpn/conn.log | |||
</pre> | |||
Creiamo la directory dei log: | |||
<pre> | |||
# mkdir /var/log/openvpn | |||
# touch /var/log/openvpn/conn.log | |||
</pre> | |||
e riavviamo il servizio openVPN con il classico: | |||
<pre> | |||
/etc/init.d/openvpn restart | |||
</pre> | |||
I logs di connessione/disconnessione verranno ora inseriti nel file <code>/var/log/openvpn/conn.log </code>. | |||
{{Autori | |||
|Autore = [[Utente:Ferdybassi|Ferdybassi]] 15:07, 17 apr 2011 (CEST) | |||
}} | |||
[[Categoria:VPN]] |
Versione attuale delle 14:49, 25 mar 2018
Attenzione. Questa guida è da considerarsi abbandonata, per via del tempo trascorso dall'ultima verifica.
Potrà essere resa obsoleta, previa segnalazione sul forum, se nessuno si propone per l'adozione. |
Versioni Compatibili Debian 7 "wheezy" Debian 8 "jessie" |
Introduzione
In molte aziende c'è la necessità di permettere al personale fuori ufficio la connessione ad alcuni servizi della LAN o ad alcune directory presenti sul server aziendale.
Un sistema semplice per permettere tutto questo è di creare una rete privata virtuale (VPN): una Virtual Private Network o VPN è una rete di telecomunicazioni privata instaurata tra soggetti che utilizzano un sistema di trasmissione pubblico e condiviso come per esempio Internet. Lo scopo delle reti VPN è di dare alle aziende le stesse possibilità delle linee private in affitto ad un costo inferiore sfruttando le reti condivise pubbliche. La sicurezza è garantita dal fatto che all'interno della rete pubblica viene creato un tunnel criptato in cui corre tutta la comunicazione.
Tra le possibili opzioni la scelta è ricaduta su OpenVPN, principalmente per la facilità di configurazione e per il supporto a diversi tipi di sistemi operativi o dispositivi; esistono infatti client OpenVPN per Microsoft Windows, per MacOSX, per Linux e per diversi dispositivi mobili quali iPhones e smartphones.
OpenVPN crea connessioni punto-punto ( client-server ) criptate in modo simile a Ipsec ma senza modificare il kernel, permettendo il routing delle chiamate del client sulla rete del server.
In altre parole con un portatile equipaggiato ad esempio con Microsoft Windows ( il client ) è possibile collegarsi al server che ospita OpenVPN, il quale si occuperà poi del routing verso le macchine della rete remota, gestendo il tutto come se si fosse fisicamente collegati ad uno switch della rete remota.
Prerequisiti
Il server OpenVPN deve essere raggiungibile da internet; perciò è indispensabile avere uno dei seguenti requisiti:
- un indirizzo IP pubblico statico sul server OpenVPN
- un indirizzo IP pubblico sul router, con impostato il corretto port-forward verso il server OpenVPN
- un account DynDNS o simili con il quale sopperire alla mancanza di un indirizzo IP pubblico statico.
Purtroppo se l'IP è privato (ad esempio se il provider fa passare i propri clienti per un NAT) non sarà possibile impostare il server.
Installazione
L'installazione è molto semplice e consta di pochissimi passaggi:
# aptitude update # aptitude upgrade # aptitude install openssl # aptitude install openvpn
L'ultimo comando terminerà miseramente con un avvertimento simile a questo:
Setting up openvpn (2.0.9-8) … Starting virtual private network daemon:... failed!
Niente paura! Il demone non è partito perché non abbiamo ancora creato i file di configurazione necessari.
Generazione dei certificati
Prima di configurare OpenVPN abbiamo bisogno di generare i certificati che identificheranno il server e i client. Rechiamoci nella directory:
# cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/
Nel caso in cui questo percorso non esistesse, possiamo localizzare la directory easy-rsa
con i comandi:
# updatedb # locate easy-rsa
Una volta trovata, copiamola nel path corretto:
# cp -R /usr/share/doc/openvpn/examples/easy-rsa /etc/openvpn # cd /etc/openvpn/easy-rsa/2.0
Modifichiamo quindi il file vars
:
# nano vars
verifichiamo che abbia il seguente contenuto e modifichiamo le informazioni secondo le nostre necessità:
export KEY_COUNTRY="IT" export KEY_PROVINCE="LO" export KEY_CITY="Lodi" export KEY_ORG="Organizzazione" export KEY_EMAIL="ferdy@organizzazione.com"
Salviamo il file e procediamo inizializzando le chiavi:
# . ./vars
Quindi cancelliamo eventuali vecchi certificati:
# ./clean-all
Creiamo il nuovo ca
(certificate authority):
# ./build-ca
Otterremo un output del genere, dove quasi tutti i valori saranno autopopolati, dato che abbiamo in precedenza modificato il file vars
mioserver:/etc/openvpn/easy-rsa/2.0# ./build-ca Generating a 1024 bit RSA private key …++++++ …………………….++++++ writing new private key to ‘ca.key’ —– You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter ‘.’, the field will be left blank. —– Country Name (2 letter code) [IT]: State or Province Name (full name) [LO]: Locality Name (eg, city) [Lodi]: Organization Name (eg, company) [Organizzazione]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server’s hostname) []:mioserver Email Address [ferdy@organizzazione.com]:
L'unico valore che dovremo aggiungere a mano sarà il Common Name, dove andrà indicato il nome completo del server.
A questo punto siamo pronti per generare il certificato per il server:
# ./build-key-server mioserver
che avrà un output simile al seguente:
mioserver:/etc/openvpn/easy-rsa/2.0# ./build-key-server mioserver Generating a 1024 bit RSA private key ………++++++ …………………++++++ writing new private key to ‘server.key’ —– You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter ‘.’, the field will be left blank. —– Country Name (2 letter code) [IT]: State or Province Name (full name) [LO]: Locality Name (eg, city) [Lodi]: Organization Name (eg, company) [Organizzazione]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server’s hostname) []:mioserver
Anche in questo caso l'unico valore che dovremo aggiungere a mano sarà il Common Name, dove andrà indicato il nome completo del server.
A questo punto possiamo generare il certificato per il client (questa operazione andrà ripetuta per ogni client che dovrà collegarsi alla VPN):
# ./build-key client1
Otterremo un output simile al precedente, in cui l'unico valore che dovremo aggiungere a mano sarà il Common Name, dove andrà indicato il nome completo del client (in questo caso client1). Alla richiesta di una password lasciamo il campo bianco, premendo semplicemente enter.
Con questa configurazione, ai client che si connetteranno alla VPN non sarà richiesta alcuna password e questo può essere visto come un buco di sicurezza nel caso in cui uno dei client venga ad esempio rubato. Se vogliamo obbligare i client ad inserire una password all'atto della connessione, occorre sostituire il comando ./build-key
con ./build-key-pass
.
Generiamo infine i parametri di Diffie-Hellman per il server:
# ./build-dh
che darà come output qualcosa di simile:
mioserver:/etc/openvpn/easy-rsa/2.0# ./build-dh Generating DH parameters, 1024 bit long safe prime, generator 2 This is going to take a long time ……………………+……………………………………..+……. ………………….+..+…………………………………………… …………………………….+………..+…………..+…………… ……………………………………………………….+………… ………………………………………………………………….. …………………………………+………..++*++*++*
Configurazione del Server
Spostiamo i file generati nella directory corretta:
# cd keys # cp ca.crt /etc/openvpn # cp ca.key /etc/openvpn # cp mioserver.crt /etc/openvpn # cp mioserver.key /etc/openvpn # cp dh1024.pem /etc/openvpn
Spostiamoci in /etc/openvpn
:
# cd /etc/openvpn
e creiamo il file di configurazione principale:
# nano openvpn.conf
Il suo contenuto dovrà essere simile al seguente:
port 1194 proto udp dev tun ca ca.crt cert mioserver.crt key mioserver.key dh dh1024.pem server 172.17.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt keepalive 10 120 comp-lzo user nobody group users persist-key persist-tun status openvpn-status.log verb 3 client-to-client
L'ultima riga (client-to-client
) è necessaria solo se vogliamo che i client VPN connessi al nostro server siano in grado di parlare tra di loro.
Un esempio ben commentato di tutte le opzioni utilizzabili nella configurazione si trova nella documentazione di Debian: /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz
.
Per permettere ai client di contattarsi tra loro dobbiamo inoltre abilitare l'IP forward:
echo 1 > /proc/sys/net/ipv4/ip_forward
Potrebbe essere utile inserire questo comando nello script di gestione del firewall del server, in modo che l'operazione sia automatizzata.
Test
Riavviamo il demone OpenVPN:
# /etc/init.d/openvpn restart
Verifichiamo che nella nostra configurazione di rete ci sia il nuovo device virtuale per il tunnel VPN:
# ifconfig eth0 ... lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:172.17.0.1 P-t-P:172.17.0.2 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:1958 errors:0 dropped:0 overruns:0 frame:0 TX packets:230 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:112672 (110.0 KiB) TX bytes:23860 (23.3 KiB)
e verifichiamo che la configurazione sia funzionante:
# ping 172.17.0.1 PING 172.17.0.1 (172.17.0.1) 56(84) bytes of data. 64 bytes from 172.17.0.1: icmp_seq=1 ttl=64 time=0.041 ms 64 bytes from 172.17.0.1: icmp_seq=2 ttl=64 time=0.030 ms
Configurazione dei client
Client Debian
L'installazione è molto semplice e consta di pochissimi passaggi:
# aptitude update # aptitude upgrade # aptitude install openvpn
Ora dobbiamo copiare dal server i file relativi al certificato del client, ad esempio con scp
:
# scp -C -r root@mioserver:/etc/openvpn/easy-rsa/2.0/keys/client1* /etc/openvpn/ # scp -C -r root@mioserver:/etc/openvpn/easy-rsa/2.0/keys/ca.cert /etc/openvpn/
Quindi creiamo il file di configurazione:
# nano /etc/openvpn/openvpn.conf
avente come contenuto:
client dev tun proto udp remote ip-or-hostname-of-your-openvpn-server 1194 resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert client1.crt key client1.key comp-lzo verb 3
Salviamolo e riavviamo il demone:
# /etc/init.d/openvpn restart Starting virtual private network daemon: openvpn(OK).
Verifichiamo che sia presente il nuovo device di rete:
# ifconfig tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:172.16.0.2 P-t-P:172.16.0.5 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
e proviamo a contattare il server:
# ping 172.16.0.1 PING 172.16.0.1 (172.16.0.1) 56(84) bytes of data. 64 bytes from 172.16.0.1: icmp_seq=1 ttl=64 time=56.1 ms
Client Windows
Per installare OpenVPN GUI per Windows su di un sistema Microsoft Windows XP a 32 o 64 bit, procedere nel seguente modo:
- Effettuare il download del pacchetto di installazione dall'URL http://openvpn.se/download.html. Scegliere la versione contenente oltre alla GUI anche il software OpenVPN già incluso;
- Avviare l'installazione. Scegliere le opzioni di default e confermare di voler proseguire nell'installazione del TAP-Win32 Adapter V8 (si tratta dell'interfaccia Ethernet Virtuale utilizzata da OpenVPN).
- Terminata la procedura di installazione, nella TrayBar compare un'icona con due terminali rossi ed un globo terrestre. Tali terminali diventano gialli quando si sta tentando una connessione e finalmente verdi quando la connessione VPN con la LAN remota è stabilita;
- Dal Menù di Avvio di Windows, cliccare su [Start]->[Programmi]->[OpenVPN]->[OpenVPN configuration file directory]. Si aprirà la cartella:
C:\Programmi\OpenVPN\config
in cui bisogna
- creare il file di configurazione
client1.ovpn
contenente la seguente configurazione:
- creare il file di configurazione
client dev tun proto udp remote mioserver-remote-ip-address 1194 resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert client1.crt key client1.key comp-lzo verb 3 route-delay
- copiare i file
ca.crt client1.crt client1.key
presi dal server.
- copiare i file
- A questo punto, effettuando un doppio click sull'icona di OpenVPN nella Tray Bar, inizia la procedura di connessione. Se l'autenticazione avviene con successo la connessione VPN sarà stabilita e i due terminali dell'icona di OpenVPN diventano verdi.
Cliccando con il tasto destro del mouse sull'icona di OpenVPN nella Traybar compare un menù con diverse utili opzioni elencate di seguito e che si commentano da sole: Connect, Disconnect, Show Status, View Log, Edit Config, Proxy Settings. In particolare, qualora si verificassero problemi di connessione è utile la voce View Log per stabilire la causa dell'insuccesso.
- Se invece la connessione avviene, quindi i 2 terminali dell'icona sono verdi, ma comunque non si raggiunge la LAN remota o Internet, può tornare utile il comando
ipconfig /all
da digitare al Prompt dei Comandi di Windows. Ecco un esempio della parte di output che interessa:
Scheda Ethernet Connessione alla rete locale (LAN) 7: Suffisso DNS specifico per connessione: Descrizione . . . . . . . . . . . . . : TAP-Win32 Adapter V8 Indirizzo fisico. . . . . . . . . . . : 00-FF-AD-63-83-3D DHCP abilitato. . . . . . . . . . . . : Sì Configurazione automatica abilitata . : Sì Indirizzo IP. . . . . . . . . . . . . : 192.168.250.51 Subnet Mask . . . . . . . . . . . . . : 255.255.255.0 Gateway predefinito . . . . . . . . . : 192.168.250.254 Server DHCP . . . . . . . . . . . . . : 192.168.0.0 Server DNS . . . . . . . . . . . . . : 192.168.250.254 Lease ottenuto. . . . . . . . . . . . : giovedì 20 settembre 2007 19.51.37 Scadenza lease . . . . . . . . . . . .: venerdì 19 settembre 2008 19.51.37
Se vogliamo che la connessione VPN parta al login del nostro utente, è sufficiente creare un file BAT con contenuto:
openvpn-gui --connect client1.ovpn exit
e metterlo in esecuzione automatica.
Windows 7
L'installazione di OpenVPN su Windows 7 ha bisogno di un piccolo intervento manuale in più. Si scarichi innanzitutto l'ultima versione del client dall'indirizzo: http://openvpn.net/release/ . Poi si lanci il file scaricato in modalità compatibile con Windows Vista Service Pack 1 e come Amministratore. Il resto dei passaggi sono identici a quelli visti nel paragrafo precedente.
Se non vogliamo essere annoiati dal messaggio di conferma dell'avvio di OpenVPN con le credenziali di amministratore, possiamo creare il file OPENVPN_runas_W7task.XML
con contenuto:
<?xml version="1.0" encoding="UTF-16"?> <Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task"> <RegistrationInfo> <Date>2010-05-14T10:47:32.1799727</Date> <Author>Ferdinando Bassi v1.0</Author> <Description>Avvio openvpngui all'accesso utente con privilegi elevati</Description> </RegistrationInfo> <Triggers> <LogonTrigger> <Enabled>true</Enabled> </LogonTrigger> </Triggers> <Principals> <Principal id="Author"> <UserId>CLIENT1\utente</UserId> <LogonType>InteractiveToken</LogonType> <RunLevel>HighestAvailable</RunLevel> </Principal> </Principals> <Settings> <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy> <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries> <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries> <AllowHardTerminate>true</AllowHardTerminate> <StartWhenAvailable>true</StartWhenAvailable> <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable> <IdleSettings> <StopOnIdleEnd>true</StopOnIdleEnd> <RestartOnIdle>false</RestartOnIdle> </IdleSettings> <AllowStartOnDemand>true</AllowStartOnDemand> <Enabled>true</Enabled> <Hidden>false</Hidden> <RunOnlyIfIdle>false</RunOnlyIfIdle> <WakeToRun>false</WakeToRun> <ExecutionTimeLimit>P3D</ExecutionTimeLimit> <Priority>7</Priority> </Settings> <Actions Context="Author"> <Exec> <Command>"C:\Program Files (x86)\OpenVPN\bin\openvpn-gui-1.0.3.exe"</Command> </Exec> </Actions> </Task>
Attenzione a correggere, nel file precedente, il nome del PC e dell'utente!!
Fatto ciò è sufficiente importarlo dall'interfaccia delle "Utilità di pianificazione" per terminare il tutto.
Registrare i LOG delle connessioni instaurate e concluse
Può essere utile avere dei file di log esaustivi su quante connessioni siano state aperte, da quali client, a quali ore.
A tale scopo si può modificare il file di configurazione /etc/openvpn/openvpn.conf
ed aggiungere le righe:
script-security 2 client-connect ./client-connect.sh client-disconnect ./client-disconnect.sh
Ora creiamo i due files /etc/openvpn/client-connect.sh
e /etc/openvpn/client-disconnect.sh
, di contenuto:
- /etc/openvpn/client-connect.sh:
#!/bin/bash # This is an openvpn connect script that log users connection # ${ifconfig_pool_remote_ip} is IP/Subnet/MAC # ${common_name} is certificate's common name # test -f /var/log/openvpn/conn.log || touch /var/log/openvpn/conn.log echo "`date` - connect - CN: ${common_name} has IP: ${ifconfig_pool_remote_ip}" >> /var/log/openvpn/conn.log
- /etc/openvpn/client-disconnect.sh:
#!/bin/bash # This is an openvpn disconnect script that log user # ${ifconfig_pool_remote_ip} is IP/Subnet/MAC # ${common_name} is certificate's common name # test -f /var/log/openvpn/conn.log || touch /var/log/openvpn/conn.log echo "`date` - disconnect - CN: ${common_name} from IP ${ifconfig_pool_remote_ip}" >> /var/log/openvpn/conn.log
Creiamo la directory dei log:
# mkdir /var/log/openvpn # touch /var/log/openvpn/conn.log
e riavviamo il servizio openVPN con il classico:
/etc/init.d/openvpn restart
I logs di connessione/disconnessione verranno ora inseriti nel file /var/log/openvpn/conn.log
.
Guida scritta da: Ferdybassi 15:07, 17 apr 2011 (CEST) | Debianized 20% |
Estesa da: | |
Verificata da: | |
Verificare ed estendere la guida | Cos'è una guida Debianized |