Installation d’OpenVPN

I. Présentation

Le VPN ou Virtual Private Network est un élément clé des réseaux d'aujourd'hui. Il est aussi un élément sensible d'un parc informatique car il présente une porte d'entrée pour les éléments extérieurs. Il existe deux mode de fonctionnement d'un service VPN, soit en Host-to-LAN soit en LAN-to-LAN.


Dans ce tutoriel, nous allons apprendre à mettre en place un serveur OpenVPN Host-to-LAN sous une ditribution Linux. Un VPN Host-to-LAN signifie que nous voulons donner la possibilité à un client qui est sur un autre LAN de pouvoir travailler comme si il était dans le même LAN que le serveur et ainsi de pouvoir profiter des ressources de notre réseau local. Cela passe par la création d’un tunnel qui traverse d’autres LAN ou même Internet et dans lesquels passent des données cryptées.

II. Les pré-requis

Pour faire ce tutoriel, il nous faut un serveur sous distribution Linux comportant deux interfaces. Une qui se situe dans le LAN (ici eth1 pour le réseau 192.168.10.0/24) et une qui se situe dans l'interface WAN (ici eth0 pour le réseau 192.168.1.0/24). Il nous faut également un client (ici sous Linux) qui nous permettera de tester notre service OpenVPN depuis un réseau extérieur au LAN.

Voila le schéma de l'architecture d'un VPN une fois que celui-ci est mis en place:

OpenVPN01

Le client qui est dans un réseau externe (pour le tuto 192.168.1.0/24) se connecte dans le LAN (ici 192.168.10.0/24) par VPN et possède une interface (virtuelle) dans le LAN qui lui permet de travailler comme si il était physiquement dans le réseau local.

III. Téléchargement d'OpenVPN

Il nous faut maintenant télécharger OpenVPN sur notre serveur Linux avec ce jeu de commande:

apt-get update # Mise à jour des paquets
apt-get install openvpn # Installation

IV. L'infrastructure de clé publique

L'infrastructure de clé publique ou ICP est l'ensemble des certificats et clés nécessaires au bon fonctionnement de notre service OpenVPN. Voici un récapitulatif rapide de l'ICP requis pour le fonctionnement de notre OpenVPN:

OpenVPNtab

Sur le client

Certains de ces fichiers peuvent être lus par tous le monde sans risque alors que d'autres doivent rester secret.

Un outil peut nous aider à la création de l'ICP, il faut pour cela se rendre dans le répertoire easy-rsa fournis par OpenVPN:

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

ll faut créer le fichier "openssl.conf" qui est nécessaire à la création des certificats. Un modèle de ce fichier est déja présent dans le repertoire "easy-rsa/", il nous faut donc juste le copier et renommant la copie "openssl.cnf" :

cp openssl-1.0.0.cnf openssl.cnf

Cet ensemble de scripts fournis avec OpenVPN va nous permettre de créer notre ICP facilement. Il faut tout d'abord ce rendre dans le fichier "vars" pour y remplir quelques informations :

OpenVPN02

Ces informations servent à faciliter la création des clés et des certificats de l'architecture ICP.

KEY_COUNTRY : Votre pays
KEY_PROVINCE : Votre région
KEY_CITY : Votre Ville
KEY_ORG : Nom de votre organisation
KEY_EMAIL : Votre mail pour des contactes éventuels
KEY_CN : Le "Common Name", il faut y mettre votre nom ou celui de votre serveur.
KEY_NAME : Votre nom ou celui de votre serveur
KEY_OU : Organisation unit, nom de l'untié de travail dans laquelle vous êtes (administration réseau par exemple)

Sur certaines versions, il est possible que quelques informations ne soient pas présentes dans le fichier "vars", pas de panique il faudra alors juste les préciser "manuellement" lors de la création des certificats et des clés

Entrez ensuite le jeu de commande suivant:

. ./vars # Permet de charger les nouveaux paramètres du fichier "vars"
./clean-all # Permet de vider le repertoire "key/" ou seront mis les certificats et clés
./build-ca # Lance la construction du certificat et de la clé de l'autorité de certification selon le fichier vars précédemment remplie

OpenVPN03

Si vous lancez un "ls keys" vous verrez alors qu'un "ca.crt" et un "ca.key" viennent d'être créés.

/build-dh # Paramètre Diffie-Hellman

Nous allons maintenant créer le certificat et la clé du serveur:

./build-key-server serveur

Il faut alors accepter les différents paramètres (qui sont ceux entrés dans le fichier "vars"). A la fin, un mot de passe (facultatif) est demandé, ainsi que deux questions qu'il faut affirmer.

Il nous reste à créer un certificat et une clé pour le client:

./build-key client1 # Notre client est ici nommé "client1"

Même procédure au niveau des paramètres et des questions.

Nous avons maintenant quelques fichiers dans le repertoires "/keys". Ceux qui nous interessent sont les suivants:

  • ca.crt : certificat de l'autorité de certification (CA)
  • ca.key : clé du CA avec laquelle il signe les certificats clients et serveurs.
  • dh1024.pem : paramètre Diffie-Hellmab
  • serveur.crt : certificat du serveur
  • serveur.key : clé du serveur
  • client1.crt : certificat du serveur
  • client1.key : clé du serveur

V. Création de la configuration du serveur

Là encore, nous allons utiliser un exemple fournis par OpenVPN, le copier, puis le modifier selon nos paramètres de préférence.

cd /usr/share/doc/openvpn/examples/sample-config-files/
cp server.conf.gz /etc/openvpn # On copie l'archive dans /etc/openvpn
cd /etc/openvpn # On se rend dans /etc/openvpn
gunzip server.conf.gz # On décompresse l'archive

On se retrouve donc avec un fichier "server.conf" que nous allons modifier à notre souhait.

Avant de le modifier, il nous faut copier les éléments de l'ICP nécessaire au serveur:

cp /usr/share/doc/openvpn/example/easy-rsa/2.0/keys/ca.crt /etc/openvpn/
cp /usr/share/doc/openvpn/example/easy-rsa/2.0/keys/serveur.key /etc/openvpn/
cp /usr/share/doc/openvpn/example/easy-rsa/2.0/keys/serveur.crt /etc/openvpn/
cp /usr/share/doc/openvpn/example/easy-rsa/2.0/keys/dh1024.pem /etc/openvpn/

Nous pouvons maintenant aller configurer notre serveur. Voila l'état du fichier de configuration simplifié avec les paramètres commentés:

OpenVPN04

VI. Configuration et connexion d'un client Linux

Il faut tout d'abord charger vers le client les fichiers "ca.crt" "client1.crt" et "client1.key" créés précédemment afin que celui-ci puisse les utiliser dans sa configuration ainsi que le fichier de configuration client se trouvant dans "/usr/share/doc/openvpn/examples/samples-config-files/client.conf". Vous pouvez pour cela utiliser la commande SCP par exemple.

Une fois que ces fichiers sont sur le client, il nous faut modifier le fichier de configuration du client afin que les paramètres correspondent à celui du serveur. Voici le fichier de configuration simplifié avec les paramètres commentés:

OpenVPN05

Il faut bien entendu mettre les différents certificats et la clé dans le même répertoire que votre fichier de configuration (dans /etc/openvpn) afin que le fichier de configuration puisse aller les lires lors de son utilisation.

Vous pouvez alors lancer la commande qui vous permettra de vous connecter à votre serveur VPN:

openvpn --config client.conf

Analysons un peu le débogage :

OpenVPN07

Ici, on voit une vérification des informations des certificats.

OpenVPN08

On voit enfin que la connexion est initialisée avec le serveur (192.168.1.100) et que l'interface virtuelle (tun0) est montée.

Nous voyons également l'échange qui est fait pour fournir une adresse et les informations réseau au client (sur les deux avant dernières lignes), on voit bien la passerelle, le réseau, son masque et l'adresse qui sera fournie au client (192.168.20.6). Si nous faisons la commande "ifconfig" sur le client, nous voyons d'ailleurs l'interface virtuelle "tun0" avec l'adresse IP fournie par le serveur OpenVPN

On peut d’ailleurs voir que le serveur a une nouvelle interface elle aussi nommé "tun0" qui sert à accueillir les hôtes venant du VPN. Ainsi, une fois qu'un client est connecté au VPN, il peut pinger l'IP de la passerelle, ici "192.168.20.1"

OpenVPN11

VII. Logs des clients actifs sur le serveur

Quand nous sommes sur le serveur, nous pouvons voir la liste des clients actuellement connectés à notre serveur VPN en consultant le fichier "/etc/openvpn/openvpn-status.log". Voici un aperçu de ce fichier après la connexion de notre client:

OpenVPN10

Voila le type d’informations que nous pouvons avoir dans ce fichier, nous y voyons par exemple le nom du client (ici client2) que contient le certificat qu'il utilise, son IP publique et locale, la date de connexion...

Il existe de nombreuses autres configurations et options possibles pour la mise en place d'un VPN avec OpenVPN.

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Mickael Dorigny

Fondateur d'IT-Connect.fr et d'Information-security.fr. Auditeur sécurité chez Amossys.

    mickael has 478 posts and counting.See all posts by mickael

    3 pensées sur “Installation d’OpenVPN

    • Bonjour à tous,

      J’ai eu des problèmes concernant Openvpn sur Ipcop,

      malgré les nombreux tutoriels que j’ai pu visiter je n’ai toujours pas réussi à faire fonctionné celui-ci.

      Je vous explique dans un premier temps l’autorité de certification a bien été téléchargé l’Openvpn à bien était activé j’ai correctement ajouté un utilisateur bref la total, tout comme le site officiel http://www.ipcop.org/2.0.0/en/admin/html/vpns-openvpn.html.

      Cependant, quand j’essaye de me connecter chez mon client, aucune synchronisation aucune connexion, bien entendue j’ai téléchargé le programme client Zip puis téléchargé chez mon client Windows l’application Openvpn. J’ai essayé plusieurs fois avec plusieurs compositions mais rien à faire je suis bloqué. Pouvez-vous m’aider s’il vous plait merci d’avance.

      Répondre
    • Bonsoir, il y’a quelques erreurs sur ce tuto :

      « /build-dh »

      c’est : ./build-dh

      « cp /usr/share/doc/openvpn/example/easy-rsa/2.0/keys/ca.crt /etc/openvpn/
      cp /usr/share/doc/openvpn/example/easy-rsa/2.0/keys/serveur.key /etc/openvpn/
      cp /usr/share/doc/openvpn/example/easy-rsa/2.0/keys/serveur.crt /etc/openvpn/
      cp /usr/share/doc/openvpn/example/easy-rsa/2.0/keys/dh1024.pem /etc/openvpn/
       »

      Il manque le « s » à « example » à la fin à chaque fois.

      Sinon j’ai tout suivis, et le serveur openvpn ne veut même pas démarrer, sans doute une erreur dans le server.conf, et comme ce tuto est pas à jour, j’ai du zapper un truc dans ce .conf, ou alors c’est autre chose ? 🙂

      Répondre

    Laisser un commentaire

    Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

     

    Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.