vineri, 12 noiembrie 2010

1. OpenVPN Server (Ubuntu)

Scenariu 1: Remote Access VPN
Ref:
http://openvpn.net/index.php/open-source/documentation/howto.html
http://www.cosmosul.ro/software/linux-openvpn-howto.html


Cerinte:
Se doreste instalarea unui server VPN intr-o retea locala, care sa deserveasca clienti VPN remote


Date:
- Capatul de tunnel este terminat pe serverul dedicat VPN (172.16.1.10)
- Routerul de acces, ce face NAT pentru clasa 172.16.1.10, forwardeaza portul TCP/1194 catre serverul VPN si deschide in chainul FORWARD portul TCP/1194
- Serverul VPN are reguli de acces firewall pentru permiterea portului TCP/1194
- Serverul VPN aloca un ip dinamic laptop-ului din clasa 10.8.0.0/24 si impune o ruta catre clasa interna 172.16.1.10/24 prin acel IP

1. Prezentare generala
OpenVPN este o solutie SSL VPN open source ce acopera o multitudine de configuratii, incluzand accesul de la distanta, site-to-site VPN, securitate Wi-Fi, solutii profesionale pentru companii de acces la distanta. OpenVPN ofera o alternativa robusta si ieftina pentru companii fata de alte tehnologii VPN. OpenVPN NU este un proxy web si nu este destinat sa opereze prin intermediul unui browser web

2. Instalare OpenVPN 2.0

# cd /opt/src
# wget http://openvpn.net/release/openvpn-2.1.3.tar.gz
# tar –zxvf openvpn-2.1.3.tar.gz
# cd openvpn-2.1.3
# ./configure --prefix=/opt/openvpn --disable-lzo
# make
# make install


3. Configurarea infrastructurii PKI (Public Key Infrastructure)

OpenVPN necesita autentificare bidirectionala bazata pe certificate, ceea ce inseamna atat clientul trebuie sa se autentifice catre server, cat si serverul trebuie sa se autentifice catre client. In acel moment, se poate stabili o conexiune VPN (sub rezerva parametrilor VPN, care trebuie sa fie compatibili pentru ambele parti).
Atat serverul VPN, cat si clientul VPN se autentifica unul catre celalalt, verificand daca certificatul celeilalte parti este semnat de Root CA si apoi testand datele din acest certificat (de ex: Common Name, Certificate Type – Server/Client, etc). Din acest punct de vedere, OpenVPN aduce un plus de beneficii:
- Serverul VPN are doar un singur certificate si o singura cheie – nu are nevoie sa cunoasca fiecare certificat al fiecarui client VPN
- Serverul VPN va accepta conexiuni de la clienti VPN doar daca acestia prezinta certificate semnate de Root CA. Acest Root CA poate fi configurat pe o alta masina, dar pentru simplitate vom presupune ca atat Root CA cat si serverul VPN se afla pe aceeasi masina
- Daca se banuieste ca o cheie privata a unui client a fost compromisa, certificatul acelui client poate fi inclus intr-un CRL (Certificate Revocation List). Aceste CRL poate fi folosit pentru a respinge conexiuni de la clienti ce se autentifica cu un astfel de certificat, fara a mai fi nevoie de a recrea intreaga infrastructura PKI
- Serverul VPN poate impune drepturi de acces diferentiate pentru anumiti clienti VPN, prin intermediul campurilor din certificatul clientului (de ex: Common Name)

Pentru crearea acestei infrastructuri PKI, este nevoie de urmatoarele:
1. Un certificat autosemnat pentru Root CA si o cheie privata pentru semnarea certificatelor serverului VPN si a clientilor VPN
2. Un certificat separat (si o cheie) pentru serverul VPN – semnat de Root CA
3. Cate un certificat (si o cheie) pentru fiecare dintre clientii VPN – semnat de Root CA

3.1. Generarea certificatului (si cheia) pentru Root CA
# cp -r /opt/src/openvpn-2.1.3/easy-rsa /opt/openvpn
# cd /opt/openvpn/easy-rsa/2.0
# vi vars
export KEY_COUNTRY="RO"
export KEY_PROVINCE="RO"
export KEY_CITY="Bucharest"
export KEY_ORG="vocalNET SRL"
export KEY_EMAIL=postmaster@vocalnet.eu

#. ./vars
# ./clean-all
# root@mail:/opt/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) [RO]:

State or Province Name (full name) [RO]:

Locality Name (eg, city) [Bucharest]:

Organization Name (eg, company) [vocalNET SRL]:

Organizational Unit Name (eg, section) []:

Common Name (eg, your name or your server's hostname) [vocalNET SRL CA]:

Name []:

Email Address [postmaster@vocalnet.eu]:

Rezultate:
- certificat Root CA: /opt/openvpn/easy-rsa/2.0/keys/ca.crt
- cheie privata Root CA: /opt/openvpn/easy-rsa/2.0/keys/ca.key

3.2. Generarea certificatului (si cheia) pentru Serverul VPN
# cd /opt/openvpn/easy-rsa/2.0
# ./build-key-server 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) [RO]:
State or Province Name (full name) [RO]:
Locality Name (eg, city) [Bucharest]:
Organization Name (eg, company) [vocalNET SRL]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) [server]:
Name []:
Email Address [postmaster@vocalnet.eu]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /opt/openvpn/easy-rsa/2.0/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'RO'
stateOrProvinceName :PRINTABLE:'RO'
localityName :PRINTABLE:'Bucharest'
organizationName :PRINTABLE:'vocalNET SRL'
commonName :PRINTABLE:'server'
emailAddress :IA5STRING:'postmaster@vocalnet.eu'
Certificate is to be certified until Sep 10 21:09:34 2020 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