Mise en place d’un VPN

Qu’est ce qu’un VPN (Virtual Private Network)
Un VPN (Virtual Private Network), réseau virtuel privé, est une sorte de « tunnel » permettant le passage de communications privées à travers une infrastructure partagée. Celui-ci permet donc de relié deux réseaux « physiques » (réseaux locaux) par une liaison non fiable (ex: Internet) de manière sécurisé.

Pourquoi avoir mis en place un vpn ?
Dans mon cas, le VPN me permet de me connecter au réseau de ma boite et d’accéder aux différentes ressources et serveurs (tel que le serveur exchange, les serveurs de développement,…) comme si mon ordinateur faisait parti du réseau local de l’entreprise.
De plus, il n’y a plus qu’un seul port ouvert, celui du vpn. Le firewall bloque tout le reste se qui permet de ne pas avoir trop de porte ouverte accessible d’Internet et donc de ce fait d’augmenter la sécurité du réseau de l’entreprise.

Mise en place d’un VPN
Pour ce tutorial, je pars du principe que le serveur tourne sous la distribution Linux Gentoo et que le(s) client(s) tourne(nt) sous Windows.
Il va de soit que rien ne vous empêche d’adapter ce tutorial pour une autre distribution ou pour Windows.

Installation d’openvpn
Pour la mise en place de notre vpn, nous allons utiliser openvpn qui est comme son nom l’indique un outil open source utilisé pour construire des VPNs. Son rôle est de « tunneliser », de manière sécurisée, des données sur un seul port TCP/UDP à travers un réseau non sûr comme Internet et ainsi établir des VPNs.

Pour installer openvpn sur notre Gentoo, nous allons taper la commande suivante :

1
# emerge openvpn

(sous debian nous aurions tapé : apt-get install openvpn)

Création des clés
Une fois openvpn installé, nous allons devoir créer des clés pour le serveur et le client. On se place dans le bon répertoire à l’aide de la commande :

1
# cd /usr/share/openvpn/easy-rsa/

Et on édite le fichier vars qui contient les variables d’openvpn à l’aide de :

1
# nano vars

Voici un exemple variables :

1
2
3
4
5
export KEY_COUNTRY="BE"
export KEY_PROVINCE="Belgique"
export KEY_CITY="Liège"
export KEY_ORG="maSociete"
export KEY_EMAIL="monMail@maSociete.com"

On exécute ensuite les commandes suivantes pour initialiser les variables d’environnement et supprimer d’éventuelles anciennes clés

1
2
# source ./vars
# ./clean-all

Génération des clés du Master CA (Autorité de certificat)

1
# ./build-ca

Vous devrez répondre à différentes questions et les clés seront générées dans le répertoire keys : ca.crt et ca.key.

Génération des clés du serveur
Maintenant que votre VPN a les clés du CA, il faut générer les clés du serveur

1
# ./build-key-server nom_du_serveur.com

nom_du_serveur.com représente le nom de domaine du serveur.

Les clés du serveur seront également générées dans le répertoire keys/ : nom_du_serveur.com.crt et nom_du_serveur.com.key.

Génération de clés pour le(s) client(s)

1
# ./build-key client

client représente le nom du client

Vous pouvez répéter cette opération pour chaque client que vous souhaiter ajouter au VPN.

Génération des paramètres Diffie Hellman

1
# ./build-dh

Pour résumé, voici la liste des fichiers qui ont été générés :

  • ca.crt : est le certificat du Master CA.
  • ca.key : est la clé du Master CA.
  • dh1024.pem : est les paramètres Diffie Hellman. Ce fichier doit rester sur le serveur.
  • nom_du_serveur.com.crt : c’est le certificat du serveur.
  • nom_du_serveur.com.key : c’est la clés de votre serveur.
  • client.crt : est le certificat d’un de vos clients.
  • client.key : est la clé d’un de vos clients.

Les .key doivent rester secret.
ca.crt doit être installé sur chaque client ainsi que sur le serveur
client(.crt|.key) est a installer sur le client.
nom_du_serveur.com(.crt|.key) est a installer sur le serveur.

Configuration du serveur
Pour configurer le serveur, nous allons éditer le fichier /etc/openvpn/openvpn.conf

1
# nano /etc/openvpn/openvpn.conf

Voici un exemple de configuration :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
port 1194							# les clients se connecteront à ce port - votre firewall doit permettre cela
proto udp							# protocole utilisé dans la connexion
ca /usr/share/openvpn/easy-rsa/keys/ca.crt			# certificat du CA
cert /usr/share/openvpn/easy-rsa/keys/nom_du_serveur.com.crt	# certificat du serveur
key /usr/share/openvpn/easy-rsa/keys/nom_du_serveur.com.key	# clé privée du serveur
dev tun                 					# méthode "routing"
dh /usr/share/openvpn/easy-rsa/keys/dh1024.pem      		# paramètres Diffie Hellman
server 10.8.0.0 255.255.255.0         				# sous-réseau que constituera le réseau virtuel
push "route 192.168.0.0 255.255.255.0"         			# ajoute sur le client la route du réseau du serveur
ifconfig-pool-persist ipp.txt           			# permet de réattribuer la même adresse à chaque client
ping 10         						# utile pour garder la connexion active au travers de certains types de firewall
ping-restart 60 						# réinitialise la connexion si le délai est dépassé
comp-lzo        						# compression des paquets
user nobody     						# une fois démarré, l'appartenance du processus passe de l'utilisateur "root" à
group nogroup   						# "nobody" et du groupe "root" à "nogroup". Ainsi, si le processus est compromis, aucun dommage ne pourra être causé avec les privilèges du super-utilisateur
persist-key     						# ne doit pas relire la clé en cas de réinitialisation de la connexion
persist-tun     						# ne doit pas reconfigurer l'interface en cas de réinitialisation de la connexion
status openvpn-status.log 					# fichier de log
verb 3          						# niveau de verbosité des log

Si pour une raison ou une autre, vous voulez utiliser la connexion Internet du réseau distant, vous pouvez rajouter l’option suivante dans le fichier de configuration :

1
push "redirect-gateway"

Si vous devez spécifier un serveur DNS et WINS vous pouvez le faire au moyen des lignes suivant

1
2
push "dhcp-option DNS 192.168.0.10"
push "dhcp-option WINS 192.168.0.10"

Où 192.168.0.10 représente l’adresse des serveurs.

Configuration du client
Pour notre client, nous allons télécharger openvpn pour Windows sur le site d’openvpn.
Nous prendrons la dernière version disponible – à l’heure où j’écris ce tutorial cette version est : OpenVPN 2.1_rc7.

Certificats et clés
Une fois openvpn installé, nous allons le configurer. Nous allons nous rendre dans le répertoire C:\Program Files\OpenVPN\config où il faudra copier les fichiers ca.crt, client.key ainsi que client.crt que nous avons générés précédemment sur le serveur.

Ensuite, il ne nous restera plus qu’à créer le fichier de configuration du client qui se nomera client.ovpn

Voici un exemple de config de ce fichier :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
client                  		# spécifie à openvpn de fonctionner en mode client
remote nom_du_serveur.com 1194		# nom_du_serveur.com est soit l'IP du serveur, soit son nom d'hôte. Votre firewall doit permettre la connexion vers l'extérieur sur le port du serveur, ici 1194
proto udp               		# protocole utilisé dans la connexion
resolv-retry infinite   		# tentera indéfiniment de résoudre l'IP du serveur hôte en cas d'échec
nobind                  		# spécifie de ne pas se lier à une adresse et un port local
ns-cert-type server     		# vérifie que le certificat du serveur est bien un certificat de serveur et ainsi évite de se connecter à un client qui se ferait passer pour le serveur avec son certificat de client
ca keys/ca.crt          		# certificat du CA
cert keys/client1.crt   		# certificat du client1
key keys/client1.key    		# clé privée du client1
dev tun                 		# méthode par "routing"
comp-lzo        			# compression des paquets
persist-key     			# ne doit pas relire la clé en cas de réinitialisation de la connexion
persist-tun     			# ne doit pas reconfigurer l'interface en cas de réinitialisation de la connexion
verb 3          			# niveau de verbosité des log

Une fois toute ces opérations réalisé, il nous suffit d’exécuter le programme openvpn-gui qui fera apparaitre une petite icône (représentant 2 ordinateurs) dans le system tray.
Un double clique sur celle-ci nous connectera à notre VPN et nous aurons donc accès au réseau local distant.

J’espère que ce tutorial vous aura plus et permit de mettre en place votre VPN.
N’hésitez pas à poster un message dans les commentaires pour toutes questions ou remarques éventuelles.

Hervé — 12 juillet 2008 @ 23:35 Classé dans : Tuto Linux, Tuto Réseaux, Tuto Serveur, Tutorial Tag: , , , ,

Pas de commentaire »

Pas encore de commentaire.

Flux RSS des commentaires de cet article. Adresse web de rétrolien

Laisser un commentaire