Vous êtes sur la page 1sur 8

TP Sécurité Réseaux

Mise en œuvre d’un VPN avec Open VPN sous Linux

1 Prérequis
Les packages RPM Open VPN, LZO, OpenSSL doivent être présent sur le PC de chaque
étudiant avant le début du TP dans le répertoire /usr/installable.
Un Serveur FTP doit aussi être installé.

2 Objectif du TP
L’objectif de ce TP est de mettre en œuvre un Virtual Private Network (VPN) avec Open
VPN sous Linux.

3 Installation des packages


3.1 Open VPN
Cliquer avec le bouton droit de la souris sur le fichier openvpn-1.4.1-1-
rh80.i386.rpm et choisir la commande Ouvrir avec puis Install Packages.
L’installation du package se lance.
Pour vérifier que l’installation est réussie, ouvrir un shell tapez la commande
openvpn --version, si l’installation est correcte, le message suivant « OpenVPN
1.4.1 i386-redhat-linux-gnu built on May 15 2003 » s’affiche à l’écran.

3.2 LZO
1- Ouvrir une fenêtre et se positionner dans le répertoire /usr/installables.
2- Cliquer avec le bouton droit de la souris sur le fichier lzo-1.08.tar.gz et choisir
la commande Ouvrir avec puis File-roller.
3- Cette commande lance l’outils de décompression de fichiers, cliquer sur
l’icône Extract, choisir le répertoire /usr/installable et valider. Un répertoire
lzo-1.08 est maintenant créé.
4- Lancer un shell et se positionner dans le répertoire installable.
5- Taper la commande ./configure pour créer le fichier makefile, qui sera utilisé
par l’utilitaire make, pour la compilation.
Durant l’exécution de ./configure, le système est analysé, pour savoir, entre
autres, la distribution, la version du noyau, les possibilités du compilateur, etc.
6- Taper la commande make pour compiler le source.
7- Taper la commande make install pour lancer l’installation de LZO.

Mise en œuvre d’un VPN avec OpenVPN sous Linux Page 1/8
TP Sécurité Réseaux

Pour vérifier que l’installation est réussie, taper la commande whereis lzolib, si
l’installation est réussie, le chemin d’accès aux fichiers est affiché.

3.3 OpenSSL
Cliquer avec le bouton droit de la souris sur le fichier openssl-0.9.6b-29.i386.rpm
et choisir la commande Ouvrir avec puis Install Packages. L’installation du
package se lance.
Pour vérifier que l’installation est réussie, ouvrir un shell tapez la commande
openvpn version, si l’installation est correcte, le message suivant « OpenSSL
0.9.6b [engine] 9 Jul 2001 » s’affiche à l’écran.

4 Mise en œuvre d’un VPN compressé et non crypté.


Avant d’installer les VPN, il faut créer une entrée pour le périphérique TUN. Sur les PC
local et remote, taper la commande mknod /dev/net/tun c 10 200.
Pour activer le périphérique TUN, taper la commande modprobe tun.
Pour la mise en œuvre d’un VPN, il faut monter un VPN local puis sur une autre
machine, un VPN remote.

4.1 VPN local


Dans un shell, taper la ligne de commande suivante openvpn --port 8000 --dev
tun3 --ifconfig 10.1.0.1 10.1.0.2 --comp lzo --verb 5
La commande ifconfig permet de vérifier que la création d’une interface réseau
TUN3.
Nous avons dans l’ordre :
Le port UDP ou on attends les connexions, le périphérique utilisé (TUN3),
l’adresse IP locale (10.1.0.1), l’adresse IP remote (10.1.0.2) dans le VPN, le type
de compression utilisé (LZO) et les informations de debugage de niveau 5 (info
sur la compression)

4.2 VPN remote


Sur le second PC, dans un shell, taper la ligne de commande suivante openvpn --
remote @IP de la machine local --port 8000 --dev tun3 --ifconfig 10.1.0.2
10.1.0.1 --comp lzo --verb 5
Les paramètres sont, dans l’ordre :
Le port UDP où on attends les connexions, l’adresse IP de la machine ou résisde
le serveur OpenVPN, le périphérique utilisé (TUN3), l’adresse IP locale
(10.1.0.2), l’adresse IP remote (10.1.0.1) dans le VPN, le type de compression
utilisé (LZO) et les informations de debugage de niveau 5 (info sur la
compression)

La commande « /sbin/ifconfig permet de vérifier que la création d’une interface


réseau TUN3.

Mise en œuvre d’un VPN avec OpenVPN sous Linux Page 2/8
TP Sécurité Réseaux

4.3 Test du VPN


Pour vérifier le que le VPN est bien établi, il suffit de faire un ping des machines
en utilisant les adresses IP du VPN (soit 10.1.0.1 ou 2)
Avec ftp, connecter vous sur le PC distant et avec Ethereal, espionner la
connexion de façon à « sniffer » le login et le mot de passe FTP. Que remarquez
vous ? Télécharger un fichier texte, pouvez vous l’intercepter avec Ethereal ? Si
oui pourquoi ?

 Tutoriel : OpenVPN

La configuration d’un VPN est souvent d’une très grande utilité pour la sécurité de vos
équipements mais aussi pour une facilité d’accès accrue. Cet article va vous présenter
comment mettre en place un serveur VPN en utilisant OpenVPN, ainsi que la
configuration des clients Windows et Linux.

Vous pouvez également consulter la documentation anglaise officielle d’OpenVPN


très fournie.

4.3.1 Côté serveur


apt-get install openvpn

A la question "Faut il créer un périphérique TUN/TAP ?" Répondez oui.

TAP simule en software un périphérique Ethernet (niveau 2). Il est utile pour faire des
bridge.

TUN (network TUNnel) simule un périphérique réseau de niveau 3 pour du routing.

A la question "Faut il arrêter OpenVPN avec de le mettre à jour ? Répondez non.

Avec OpenVPN, on peut compresser les données avec un algrothme de compression


sans perte : LZO.

apt-get install liblzo1

Création du certificat de l’autorité de certification (CA)

C’est la partie la plus fastidieuse.

cd /usr/share/doc/openvpn/examples/easy-rsa/2.0

Dans ce répertoire se trouvent quantité de petits scripts très utiles pour la génération de
clé et de certificats.

Mise en œuvre d’un VPN avec OpenVPN sous Linux Page 3/8
TP Sécurité Réseaux

Dans un premier temps, on va éditer le fichier "vars" qui va contenir des données par
défaut pour les scripts. Cette étape n’est pas indispensable mais elle va bous faire
gagner beaucoup de temps. fichier "vars" :

export KEY_COUNTRY=FR
export KEY_PROVINCE=France
export KEY_CITY=Paris
export KEY_ORG="moro server"
export KEY_EMAIL="monemail@moroblog.info"

On prépare les variables que l’on vient de définir et on nettoie le répertoire des clefs :

. ./vars
./clean-all

On va utiliser un fichier de configuration par défaut pour openssl :

gunzip openssl.cnf.gz

Ensuite on a créer dans le répertoire "keys/" le certificat principal du serveur "ca.crt" :

./build-ca

Une série de question va vous être posé, tout est déjà rempli grâce au fichier "vars",
mais vous devez impérativement choisir un "Common Name" pour le server.

On a créé l’autorité de certification (CA) !

Création du certificat et de la clé pour le serveur :

./build-key-server MonServeurVPN

Le script "build-key-server" demande un mot de passe que je n’ai pas rempli.

Ceci créé dans "keys/" le certificat "MonServeurVPN.crt" et la clé


"MonServeurVPN.key".

La clé SSL est sous la forme :

--BEGIN RSA PRIVATE KEY--


//bloc de données
--END RSA PRIVATE KEY--

Le certificat ressemble beaucoup :

--BEGIN CERTIFICATE--
//bloc de données
--END CERTIFICATE--

Mise en œuvre d’un VPN avec OpenVPN sous Linux Page 4/8
TP Sécurité Réseaux

4.3.2 Création de certification & clé pour un client


./build-key Syrius

Attention, le Common Name doit être différent pour chaque entité, sinon vous aurez
l’erreur :

failed to update database


TXT_DB error number 2

Création du paramètre Diffie Hellman

./build-dh

Ceci créé dans "keys/" un fichier "dh1024.pem". C’est une opération relativement
longue.

4.3.3 Mise en place des fichiers serveurs

On va copier les fichiers nécessaire dans /etc/openvpn :

cp
./keys/{ca.crt,ca.key,MonServeurVPN.crt,MonServeurVPN.key,dh1024.pem}
/etc/openvpn

4.3.4 Configuration du démon openvpn

Création d’un utilisateur

Par défaut, l’utilisateur "nobody" est utilisé, ce qui n’est pas optimal.

groupadd openvpn
useradd -d /dev/null -g openvpn -s /bin/false openvpn

Edition du fichier de configuration :

On va se baser sur le fichier de configuration proposé par openvpn :

cd /usr/share/doc/openvpn/examples/sample-config-files/
gunzip server.conf.gz
cp server.conf /etc/openvpn/

On édite "/etc/openvpn/server.conf" :

On modifie les noms des certificats/clés et le nom du user à utiliser pour le démon :

ca ca.crt
cert MonServeurVPN.crt
key MonServeurVPN.key # This file should be kept secret

Mise en œuvre d’un VPN avec OpenVPN sous Linux Page 5/8
TP Sécurité Réseaux

dh dh1024.pem

user openvpn
group openvpn

4.3.5 Démarrage du serveur


/etc/init.d/openvpn restart

On s’assure que le démon tourne bien et on va surveiller les messages du démon :

$ ps aux | grep openvpn


openvpn 355 0.0 0.2 4532 2700 ? Ss Sep12 3:19
/usr/sbin/openvpn --writepid /var/run/openvpn.server.pid --daemon
ovpn-server --cd /etc/openvpn --config /etc/openvpn/server.conf
$ tail -f /var/log/syslog

On peut déjà remarquer qu’un "ifconfig"nous montre une nouvelle interface.

$ ifconfig
tun0 Lien encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-
00-00-00-00-00
inet adr:10.8.0.1 P-t-P:10.8.0.2 Masque:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:487260 errors:0 dropped:0 overruns:0 frame:0
TX packets:302913 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:100
RX bytes:40797602 (38.9 MiB) TX bytes:99006324 (94.4 MiB)

4.3.6 Installation d’un client Windows

Vous devez télécharger la version Windows d’OpenVPN

L’installation va créer une "carte" "TAP-Win32 Adapter V8". Le programme se lance


automatiquement au démarrage.

Il faut copier dans "C :/Program Files/OpenVPN/config/" les fichiers que l’on a
précedemment créé sur notre serveur : "ca.crt", "Syrius.crt" et "Syrius.key". On utilise
ensuite le fichier de configuration d’exemple situé dans "sample-config/" :
"client.ovpn". On le copie dans le répertoire "config/" et on édite les champs :

remote 12.34.56.78 1194 ; IP de votre serveur VPN

ca ca.crt
cert Syrius.crt
key Syrius.key

On démarre OpenVPN : Démarrer > Programmes > OpenVPN > OpenVPN GUI. Pour
se connecter, on clique droit sur l’icone d’OpenVPN à côté de l’heure, puis "Se
connecter".

Mise en œuvre d’un VPN avec OpenVPN sous Linux Page 6/8
TP Sécurité Réseaux

4.3.7 Configuration d’un client Linux


apt-get install openvpn

Il faut bien sûr créer un nouveau couple (certificat/clef) pour ce client. On les copiera
avec l’autorité de certification "ca.crt" dans /etc/openvpn.

La configuration du "client.conf" est identique à celle de Windows.

4.3.8 Faire en sorte que les clients se voient entre eux

Dans le fichier "/etc/openvpn/server.conf" sur le serveur :

push "route 10.8.0.0 255.255.255.0"


client-to-client

Ceci va créer les routes nécessaires pour les clients.

4.3.9 Déboguage

Pour déboguer, on peut logguer séparement les messages d’openvpn :

log /var/log/openvpn.log

On peut modifier le niveau de verbosité des logs :

verb 6

Enfin, on peut activer un accès en local pour des commande direct sur le démon :

management localhost 7505

Ajouter un client après coup

La procédure est exactement la même que lors de l’installation, vous devrez faire :

# cd /usr/share/doc/openvpn/examples/easy-rsa/
# . ./vars
# cd keys
# ../build-key Client04
(...)

Ce qui va vous générer un Client04.crt et Client04.key, que vous copierez sur votre
nouveau client. Il vous faudra également paramétrer son fichier de configuration
comme nous l’avons déjà vu.

Important

Mise en œuvre d’un VPN avec OpenVPN sous Linux Page 7/8
TP Sécurité Réseaux

Une erreur à ne pas faire est de réexecuter ./clean-all dans le répertorie


/usr/share/doc/openvpn/examples/easy-rsa/. Cette commande va vous supprimer toutes
vos clefs et vos certificats clients... Il faut conserver les certificats pour pouvoir les
révoquer par la suite !

Sur les fichiers :

/usr/share/doc/openvpn/examples/easy-rsa/
serial : contient le numéro à affecter au prochain client
index.txt : liste de tous les clients créés
*.crt : les certificats
*.key : les clefs privées
*.csr : les demandes de certificats, qui devront être signés pour créer le certificat

/etc/openvpn
ipp.txt : garde une association entre IP et client

Mise en œuvre d’un VPN avec OpenVPN sous Linux Page 8/8