Open VPN
Qu'est-ce qu'un VPN ?
Un VPN ou Virtual Private Network, est un tunnel logique (par opposition au réseau privé) établi entre deux entités et dans lequel les données circulant ne sont pas « visibles » de l'extérieur. Cette « invisibilité » peut être due par exemple à un chiffrement des données ou à un protocole particulier des échanges de données.
Nous abordons l’aspect technique de la mise en place d’un VPN. Nous allons voir comment créer un VPN entre un serveur Debian Sarge pour faire fonctionner notre service UCARP
Installation:
Vous devez avoir préalablement installé une Debian Sarge de base.
Installation d’OpenVPN sur le serveur Debian Sarge :
Lors de l’installation, quelques questions vous sont posées :
Avec OpenVPN, il est possible de compresser les données au sein du tunnel VPN rendant ainsi l’utilisation de la bande passante plus minime. Pour cela, il faut installer le paquet « liblzo1 » : apt-get install liblzo1
Pour sécuriser le tunnel VPN avec des clés et des certificats, OpenVPN s’appuie sur OpenSSL :
Configuration
Création du certificat de l’autorité de certification (CA)
Lors de l’installation d'OpenVPN, un dossier a été créé dans lequel se trouvent plusieurs scripts permettant de générer plus facilement les clés et les certificats pour OpenSSL. Ces scripts se situent dans le dossier « easy-rsa »
cd /usr/share/doc/openvpn/examples/easy-rsa
Avant d’utiliser les scripts, il faut éditer le fichier « vars » pour initialiser les variables par défaut indiquées à la fin de ce fichier. Par exemple :
Une fois le fichier modifié, la ligne suivante permet d’initialiser les variables pour les scripts :
. ./vars
Le script suivant, permet de créer ou de réinitialiser le sous-dossier « keys »
./clean-all
Le dossier « easy-rsa » contient un fichier de configuration par défaut d’OpenSSL, qu’il faut décompresser, pour qu’il soit utilisable pour faire fonctionner la génération des clés et des certificats :
gunzip openssl.cnf.gz
Le script suivant permet de créer dans « keys » le certificat principal du serveur « ca.crt » et la clé correspondante « ca.key » :. /build-ca
Le script doit faire apparaître à l’écran quelque chose comme ça:
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) [FR]:
State or Province Name (full name) [France]:
Locality Name (eg, city) [VotreVille]:
Organization Name (eg, company) [VotreEntreprise]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:NomDeVotreServeur
Email Address [VotreAdresseEMail]:
Création du certificate et de la clé pour le serveur OpenVPN
Ce script va vous afficher quelque chose comme ça :
Generating a 1024 bit RSA private key
......................................................................
..+++++
...++++++
writing new private key to 'NomDeVoreServeur.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) [FR]:
State or Province Name (full name) [France]:
Locality Name (eg, city) [Dijon]:
Organization Name (eg, company) [VotreEntreprise]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:NomDeVotreServeurVPN
Email Address [VotreAdresseEMail]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /usr/share/doc/openvpn/examples/easy-rsa/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'FR'
stateOrProvinceName :PRINTABLE:'France'
localityName :PRINTABLE:'VotreVille'
organizationName :PRINTABLE:'VotreEntreprise'
commonName :PRINTABLE:'NomDeVotreServeurVPN'
emailAddress :IA5STRING:['VotreAdresseEMail]'
Certificate is to be certified until Dec 7 13:41:02 2015 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
On vient de créer NomDeMonServeur.crt ainsi que NomDeMonServeur.key.
Création du certificat et de la clé pour le client OpenVPN
Répétons l’opération pour le Client01
./build-key Client01
On obtient quelque chose comme ça à l’écran :
pgdebian:/usr/share/doc/openvpn/examples/easy-rsa# ./build-key Client01
Generating a 1024 bit RSA private key
..++++++
....................++++++
writing new private key to 'Client01.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) [FR]:
State or Province Name (full name) [France]:
Locality Name (eg, city) [VotreVille]:
Organization Name (eg, company) [VotreEntreprise]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:Client01
Email Address [VotreAdresseEMail]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /usr/share/doc/openvpn/examples/easy-sa/openssl.cnf
DEBUG[load_index]: unique_subject = "yes"
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'FR'
stateOrProvinceName :PRINTABLE:'France'
localityName :PRINTABLE:'VotreVille'
organizationName :PRINTABLE:'VotreEntreprise'
commonName :PRINTABLE:'Client01'
emailAddress :IA5STRING:['AdresseEMail]'
Certificate is to be certified until Mar 4 09:19:09 2016 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
Mise en place des certificats et des clés
Nous avons généré toutes les clés et certificats dans le dossier « keys », il faut donc maintenant mettre les clés et certificats utiles au serveur dans le dossier « /etc/openvpn » :
cp ./keys/ca.crt /etc/openvpn/
cp ./keys/ca.key /etc/openvpn
cp ./keys/NomDeVotreServeur.crt /etc/openvpn
cp ./keys/NomDeVotreServeur.key /etc/openvpn
cp ./keys/dh1024.pem /etc/openvpn
Situez- vous dans le dossier /etc/openvpn puis tapez:
openvpn--genkey--secret ta.key
Cette clé sert à autoriser les accès au demon et permettra si vous activez l'option, une authentification du coté serveur.
Création d’un utilisateur avec des droits limités pour OpenVPN
Il est sécurisant sur une machine de faire tourner un processus avec un utilisateur. Pour le programme OpenVPN, nous allons créer l’utilisateur « openvpn» :
groupadd openvpn
useradd -d /dev/null -g openvpn -s /bin/false openvpn
Configuration d’OpenVPN
OpenVPN est fourni avec plusieurs fichiers d’exemples enregistrés dans le dossier:
/usr/share/doc/openvpn/examples/sample-config-files/:
gunzip server.conf.gz
On copie le fichier de configuration pour le serveur dans le dossier adéquate:
cp server.conf /etc/openvpn
Configuration de server.conf
Prenons un exemple d’infrastructure:
SCHEMA 1 DE NOTRE INSFRASTRUCTURE
Voilà notre fichier server.conf:
Maintenant, il ne vous reste plus qu’à lancer openvpn : /etc/init.d/openvpn start
Faites un « ifconfig», vous verrez une nouvelle carte réseau tun0 si tout va bien.
Tapez: ping 10.8.0.1
Si le ping marche, tout va bien.
Faites un « route », vous verrez que de nouvelles routes on été crées.
Votre serveur VPN semble être prèt si vous arrivez à ce point sans problème.
Installation du client Windows et Linux
Pour linux installer « OpenVPN » comme pour le serveur et pour Windows installer « OpenVPN-Gui ».
Linux:
Copier les fichiers « ca.crt » « Client01.crt » « Client01.key » « dh1024.pem » et « ta.key » dans /etc/openvpn.
Copier le fichier « client.conf » dans /etc/openvpn
Lancer OpenVPN : /etc/init.d/openvpn start
Si vous arrivez à pinguer 10.8.0.6, c’est que votre carte réseau virtuelle est bien montée. Pour confirmer ceci faites un simple « ifconfig ».
Si vous arrivez à pinguer 10.8.0.1, c’est que vous arrivez à atteindre le serveur VPN via le VPN. Bravo votre VPN fonctionne.
Pour Windows:
L'intégralité des répertoires se trouve dans : C:\Program Files\OpenVPN\
Configuration du fichier client.ovpn et client.conf
Le fichier ressemble fortement à celui du serveur.
Une fois OpenVPN lancé, si vous arrivez à pinguer l’adresse 10.8.0.1 (adresse IP du serveur VPN), c’est que votre VPN est construit.
Autoriser le client à voir tous les ordinateurs présents dans le réseau du serveur VPN
Mettre le serveur VPN en mode routeur :
echo 1 > /proc/sys/net/ipv4/ip_forward
Du coté client, il faut indiquer la nouvelle route:
route add 10.8.0.0 mask 255.255.255.240 Adresse ip reseau du serveur VPN
Pour les ordinateurs situés sur réseau serveur, il faut indiquer la nouvelle route:
route add -net 10.8.0.0 255.255.255.240 Adresse IP réseau du serveur VPN