Installazione e configurazione di OpenVPN in Centos 5.2

Versione adatta alla stampaSend to friendPDF version

Può succedere che ci connettiamo a la rete internet da una rete locale che non amministriamo personalmente e in questa rete locale la maggior parte delle porte sono chiuse (solo è attivo un server proxy attraverso il quale possiamo navigare e niente più). In questi casi connettersi al proprio server Linux remoto (se abbiamo Asterisk installato in un server remoto) può essere un problema.

In altri casi alcuni pagine di amministrazione di server installati (openfire, webmin), richiedono che ci colleghiamo a una porta non standard e se il proxy è configurato per darci accesso solamente alle porte 80 e 443 può essere un problema.

Ultima cosa. Se vogliamo risolvere alla fonte i problemi di NAT con le estensioni che colleghiamo a Asterisk (gli interni) OpenVPN è un'altra volta la solucione. Questi sono solamente alcuni esempi. Maggiori informazioni le trovate direttamente sul sito del progetto (in inglese)

Per ovviare a questo invonveniente possiamo usare una OpenVPN che ci permette di creare una rete locale virtuale da lì connetterci al nostro server remoto.

In questo articolo vedremo come installare e configurare OpenVPN su Centos (come server) e windows XP (come cliente).

Quando dobbiamo compilare un programma partendo dai suoi sorgenti precedente dobbiamo sempre installare alguni programmi e librerie che ci permettono di effettuare la compilazione. Normalmente i pacchetti essenziali sono:

yum install gcc ncurses ncurses-devel make gcc-c++ libtermcap libtermcap-devel zlib zlib-devel libtool

Adesso possiamo iniziare

cd /usr/src

scarichiamo una libreria per la compressione dati richiesta da OpenVPN:

wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.03.tar.gz

la scompattiamo:

tar -xf lzo-2.03.tar.gz

entriamo nella cartella appena creata

cd lzo-2.03

e la compiliamo

./configfure

make

make check

make install

Adesso scarichiamo OpenVPN:

cd ..

wget  http://www.openvpn.net/release/openvpn-2.0.9.tar.gz

lo scompattiamo

tar -xf openvpn-2.0.9.tar.gz

entriamo nella cartella

cd openvpn-2.0.9

e iniziamo la compilazione:

./configure

make

make install

Adesso dobbiamo eseguire una serie di comandi per prepararci a creare le diversi chiavi (CA, server, cliente) necessarie per il server OpenVPN e i clienti

cd easy-rsa/

creiamo una cartella dove salvare tutte le chiavi generate

mkdir /usr/local/sbin/keys

e modifichiamo il seguente file:

nano vars

export KEY_DIR=/usr/local/sbin/keys
export KEY_COUNTRY=IT
export KEY_PROVINCE=Milano
export KEY_CITY=Milano
export KEY_ORG="MiaCompagnia"
export KEY_EMAIL=admin@miacompagnia
.com

cerchiamo le seguenti linee e le modifichiamo adattandole alle nostre necessità (tranne la prima che indica la cartella che abbiamo appena creato e dove andremo a salvare le chiavi generate).

Salviamo i cambiamenti con Ctrl-O e usciamo dall'editor con Ctrl-X

Alcuni passaggi aggiuntivi:

. ./vars
NOTE: when you run ./clean-all, I will be doing a rm -rf on /usr/local/sbin/keys

Tra il primo punto e il secondo c'è uno spazio

./clean-all

Adesso possiamo iniziare con la creazione della chiave CA (Certificate Authority)

./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) [Milano]:
Locality Name (eg, city) [Milano]:
Organization Name (eg, company) [MiaCompagnia]:
Organizational Unit Name (eg, section) []:Vendite
Common Name (eg, your name or your server's hostname) []:miacompagnia.com
Email Address [admin@miacompagnia.com]:

Gli unici valori che dobbiamo inserire a mano sono quelli indicati in neretto. Se controlliamo nella cartella /usr/local/sbin/keys, troveremo il file ca.crt e ca.key

Adesso creiamo la chiave per il server a cui diamo il nome server

./build-key-server server

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) [Milano]:
Locality Name (eg, city) [Milano]:
Organization Name (eg, company) [MiaCompagnia]:
Organizational Unit Name (eg, section) []:Vendite
Common Name (eg, your name or your server's hostname) []:server
Email Address [admin@miacompagnia.com]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /usr/src/openvpn-2.0.9/easy-rsa/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'IT'
stateOrProvinceName   :PRINTABLE:'Milano'
localityName          :PRINTABLE:'Milano'
organizationName      :PRINTABLE:'MiaCompagnia'
organizationalUnitName:PRINTABLE:'Vendite'
commonName            :PRINTABLE:'server'
emailAddress          :IA5STRING:'admin@miacompagnia.com'
Certificate is to be certified until Apr 22 19:25:39 2019 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

In questo caso dobbiamo in common name indichiamo server, non inseriamo nessuna password e alla fine confermiamo con due Y

Fatto questo possiamo passare alla creazione delle chiavi per i clienti. Dobbiamo ripetere il seguente passaggio per il numero dei clienti che vogliamo configurare avendo l'accortezza di cambiare il numero del cliente (es: cliente1 cliente2, ecc. sia per il nome della chiave sia per la linea "Common Name (eg, your name or your server's hostname"

Vediamone uno:

./build-key cliente1

Generating a 1024 bit RSA private key
..............................++++++
..........++++++
writing new private key to 'esecuredata1.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) [Milano]:
Locality Name (eg, city) [Milano]:
Organization Name (eg, company) [MiaCompagnia]:
Organizational Unit Name (eg, section) []:vendite
Common Name (eg, your name or your server's hostname) []:cliente1
Email Address [admin@miacompagnia.com]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /usr/src/openvpn-2.0.9/easy-rsa/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'IT'
stateOrProvinceName   :PRINTABLE:'Milano'
localityName          :PRINTABLE:'Milano'
organizationName      :PRINTABLE:'MiaCompagnia'
organizationalUnitName:PRINTABLE:'vendite'
commonName            :PRINTABLE:'cliente1'
emailAddress          :IA5STRING:'admin@miacompagnia.com'
Certificate is to be certified until Apr 22 19:32:33 2019 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

ripetiamo l'operazione per tutti i clienti che vogliamo creare

./build-key cliente2

./build-key cliente 3

ecc.

Una volta terminato creiamo la chiave Diffie Hellman

./build-dh
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time

Il server OpenVPN usa come porta predefinita la 1194 Puó essere UDP o TCP Per averle tutte e due a disposizione le apriamo sul nostro firewall (iptables). Se non avete installato iptables tornate a un precedete articolo

nano /etc/sysconfig/iptables

e aggiungiamo:

# OPENVPN server port
-A INPUT -p tcp --dport 1194 -j ACCEPT
-A INPUT -p udp --dport 1194 -j ACCEPT

Salviamo e reiniziamo iptables

service iptables restart

Adesso eseguiamo una serie di comandi per far partire il server OpenVPN al boot di Linux:

cd /usr/src/openvpn-2.0.9/sample-scripts/

cp openvpn.init /etc/rc.d/init.d/openvpn

chkconfig --add openvpn

chkconfig openvpn on

mkdir /etc/openvpn

Adesso possiamo creare il file di configurazione per il server OpenVPN

cd /etc/openvpn

nano server.conf

e copiamo le seguenti linee:

port 1194
proto udp
dev tun
ca /usr/local/sbin/keys/ca.crt
cert /usr/local/sbin/keys/server.crt
key /usr/local/sbin/keys/server.key
dh /usr/local/sbin/keys/dh1024.pem
server 10.10.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
max-clients 30
persist-key
persist-tun
log         openvpn.log
log-append  openvpn.log
verb 3
management localhost 7505

Per motivi di spazio e di tempo non spiego linea per linea il file di configurazione. L'importante è sapere che la rete locale sará 10.10.0.0, che useremo la porta 1194 UDP un collegamento punto-punto.

Facciamo partire il server:

etc/init.d/openvpn start
Starting openvpn:                                          [  OK  ]

Se non ci sono errori è tutto OK

Per controllare la nueva scheda di rete (virtuale):

ifconfig

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:10.10.0.1  P-t-P:10.10.0.2  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)

Se tutto è a posto possiamo passare a configurare il cliente.

  • Windowns XP

Scarichiamo questo programma e lo installiamo. Creiamo una cartella nella cartella radice del nostro disco fisso:

C:\>md keys

ci entriamo:

cd keys

copiamo dal server linux (cartella /usr/local/sbin/keys) con winscp i seguenti files:

ca.crt

cliente1. crt

cliente1.key

Con un editor di testi (per esempio notepad) creiamo il seguente file di configurazione per il cliente:

dev tun
proto udp
remote voztovoice.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
mute-replay-warnings
ca c:\\keys\\ca.crt
cert c:\\keys\\cliente1.crt
key c:\\keys\\cliente1.key
comp-lzo
verb 3
ns-cert-type server

Lo salviamo con la estennsione ovpn (esempio cliente.ovpn) e lo copiamo nella cartella config que troviamo dentro della cartella Programmi > OpenVPN

Adesso possiamo far partire il cliente. nel system tray dovremmo trovare la seguente icona:

Se non è presente facciamo partire il cliente da menu programmi di windows. Quando appare l'icona ci clicchiamo con il tasto destro del mouse e scegliamo nel menu que appare Connect

dovrebbe apparire qualcosa del genere:

  •  
  •  

L'icona nel system tray diventerà verde confermando che la connessione ha avuto successo.

  • Linux

Per linux è ancora più semplice.

Se per esempio vogliamo che il nostro server Linux sia allo stesso tempo un server e cliente OpenVPN non dobbiamo fare altro che creare un file di configurazione simile a quello che abbiamo visto per windows (modificando le linee opportune) e salvarlo nella cartella /etc/openvpn. Ricordiamoci di avere le chiavi del server con il quale vogliamo connetterci.

Appena creato il file di configurazione facciamo ripartire OpenVPN e il gioco è fatto.

Commenti

OpenVPN e Samba

Ho una piccola domanda...

Ho configurato OpenVPN sul mio server Linux, per consentire a un utente Windows di connettersi alla rete locale dall'esterno.

Funziona tutto perfettamente, ma avviene uno strano comportamento nell'utilizzo di una cartella condivisa con Samba. In pratica se creo ad esempio una cartella, o la rimuovo, la finestra non si aggiorna a meno che non premo F5. Non è grave, ma è piuttosto scomodo, soprattuto se chi utilizza il servizio non è molto afferrato con l'informatica...

A cosa può essere dovuto?

Condividi contenuti