vendredi 1 avril 2016

COMMENT METTRE EN PLACE UN RESEAU PRIVE VIRTUEL (VPN) ENTRE DEUX SITES DISTANTS VIA UN SERVEUR OPENVPN


Bonjour,
Aujourd’hui je vais vous montrer comment configurer un réseau privé virtuel (Virtual Private Network, VPN) entre deux sites qui se trouvent géographiquement dans deux zones différentes, et ceci à partir d’un serveur OpenVPN que l’on configurera. Mais tout d’abord,

Qu’est ce qu’un VPN ?

Un Réseau Privé Virtuel ou Virtual Private Network (VPN) est un réseau qui permet d’interconnecter de manière sécurisé deux entités (une entreprise et sa succursale, une entreprise et ses employés domiciliés, un serveur et un client mobile, …) situés à une certaine distance l’un de l’autre. Le VPN permet de créer une liaison directe logique (virtuelle) entre plusieurs équipements distants; ainsi un employé depuis son domicile peut accéder facilement et de manière sécurisé au réseau interne (Intranet) de son entreprise. Le VPN crée une sorte de tunnel entre les différents équipements qui s’y trouvent.
Le VPN est une technologie accessible et toujours autant utilisé notamment parce qu’elle permet de: préserver la confidentialité et l’anonymat des utilisateurs sur des réseaux publics (Internet) en changeant leur adresse IP (Internet Protocol) , sécuriser les échanges inter-site, sécuriser les communications et données entre entités distinctes via des protocoles de chiffrements qu’il peut intégrer en son sein, contourner certaines restrictions géographique par exemple avoir accès à du contenu disponible uniquement dans un pays ou une zone bien déterminée; peut-être certains parmi vous ont déjà en essayant de visionner certaines vidéos reçu le message « cette vidéo n’est pas disponible dans votre pays » ou encore « ce contenu n’est pas disponible dans votre zone géographique », avec un VPN vous n’aurez plus ce genre de souci :).

Les protocoles utilisés pour la mise en place d’un réseau privé virtuel sont : L2TP/ IPSec (Layer 2 Tunneling Protocol/ Internet Protocol Security), PPTP (Point-to-Point Tunneling Protocol), SSL/TLS (Secure Socket Layer/Transport Layer Security) et OpenVPN ; c’est ce dernier qui est le protocole le plus utilisé actuellement.

Qu’est ce que OpenVPN ?

OpenVPN est un protocole open source de création de VPN qui utilise SSL pour gérer les authentifications et se basant sur l’établissement d’un tunnel IP via le protocole UDP (User Datagram Protocol) ou TCP (Transmission Control Protocol). Le logiciel open-source portant le même nom permet quant à lui aux clients de se connecter à un serveur abritant le protocole OpenVPN en son sein à l’aide d’une clé privée partagée à l’avance, de certificats électroniques, ou encore de couple nom d’utilisateur/mot de passe (login/password). OpenVPN est le protocole le plus utilisé actuellement en partie à cause de son taux de chiffrement élevé, sa stabilité, sa rapidité, sa fiabilité, sa compatibilité multi-plates-formes, et de son usage sur n’importe quel port en écoute coté serveur.

Maintenant que vous en savez un peu plus sur les Réseaux Privés Virtuels et sur le  protocole OpenVPN, nous allons entrer dans le vif du sujet et passer à la mise en place d’un serveur OpenVPN au sein d’un réseau étendu.

Configuration d’un Serveur OpenVPN pour la mise en place d’un VPN inter-sites

L’architecture réseau (topologie) utilisée est la suivante :
Le but est de permettre à l’utilisateur Client_Jacques (192.128.1.5/24) qui se trouve chez lui ou dans une filiale d’avoir accès au réseau interne de l’entreprise générale par exemple pour utiliser les services du serveur Serveur_Application (192.168.1.69/24) qui héberge une application dont il à besoin. Le procédé consistera à relier Client_Jacques à Serveur_Applications via le serveur Serveur_OpenVPN qui va créer un tunnel entre les deux équipements et leur attribuer des adresses dans la plage (10.8.0.0/24) pour qu’ils puissent communiquer.

(PS : le serveur que nous utiliserons est une distribution GNU/Linux en occurrence Debian)

Nous allons démarrer la configuration de notre Serveur OpenVPN, pour ce faire nous allons tout d’abord lancer le terminal de notre futur serveur OpenVPN, 


Pour installer OpenVPN sur le serveur il suffit que ce dernier soit connecter à internet et d’y entrer la commande « apt-get  install openvpn » :

On copie ensuite les fichiers de configurations de OpenVPN dans le repertoire easy-rsa qu’on aura préalablement créé,

Ensuite nous configurons une autorité de certification; pour ce faire on édite le fichier « vars »  qui contient les informations d’identification pour créer les certificats et les clés :

Nous modifions à notre convenance certaines lignes du fichier :

Puis il nous faut initialiser les variables ; pour ce faire nous allons entrer une succession de commande dont la premiere « ./clean-all » permet de créer ou de réinitialiser le sous-dossier « keys »,

Ensuite nous créons dans le sous-dossier nouvellement crée le fichier « dh1024.pem » avec la commande « ./build-dh »:

Après nous entrons la commande « ./pkitool –initca » pour générer une clé privé chiffré avec l'algorithme RSA (Rivest Shamir Adleman) qui sera enregistrée dans la clé ca.key du serveur,

Nous faisons de même avec la clé server.key cette fois-ci en entrant la commande suivante :

Ensuite nous créons la clé spéciale pour éviter les attaques de type « Man in the middle » ;

Une fois cette suite de commandes exécutées convenablement, nous copions les clés et les certificats qui nous seront utiles pour le serveur dans le répertoire « /etc/openvpn »,   

Avant de poursuivre nous créons un répertoire dans lequel le processus OpenVPN sera "chrooté" afin de limiter les pannes dans OpenVPN ;

Maintenant on crée le fichier de configuration /etc/openvpn/server.conf :

Dans notre cas, nous l’avons édité comme suit :

Le fichier ci-dessus permet de créer un serveur VPN SSL routé basée sur le protocole TCP et utilisant le port 443 comme port d’écoute, qui a comme interface réseau virtuelle "tun"; les fichiers utilisés pour l’authentification des clients sont : ca.crt, cert.crt, server.key ;les fichiers de chiffrement des données (dh1024.pem, ta.key, …), la plage d’adresse attribuées aux clients est 10.8.0.0/24, enfin on rend actif la compression de données avec comp-lzo, et la persistance de la connexion (persist-key, persist-tun).

A présent nous testons la configuration en saisissant la commande suivante :
Si l’on obtient les messages suivants,
C’est que tout c’est bien passé. Il ne nous reste plus qu’à démarrer notre serveur OpenVPN, avec la commande suivante :

A ce niveau en effectuant la commande « ifconfig » nous nous rendrons compte qu’une nouvelle interface réseau à été ajoutée (tun).

A présent que le service OpenVPN est démarrer sur notre serveur on vérifie si nos interfaces sont convenablement configurées, 

Nous activons ensuite le routage en décommentant la ligne suivante dans le fichier /etc/sysctl.conf :


Dans notre cas nous avons configuré certaines routes statiques et définit une règle IPtable :


Notre serveur OpenVPN est actuellement fonctionnel il ne nous reste plus qu’à configurer des clients qui pourront s’y connecter.

Configuration de compte Client OpenVPN

Nous allons créer le répertoire /etc/openvpn/clientconf qui contiendra tous les fichiers de configuration de nos clients : 
  
Créons également le dossier qui va contenir tous les fichiers de notre client Client_Jacques ;

Si nous souhaitons par exemple créer un certificat et une clé pour le client Client_Jacques, nous entrons les commandes suivantes :

Puis effectuer « ./build-key-pass nom_client» qui permet de demander un mot de passe à l’utilisateur lors de  la connexion au tunnel VPN, le script va vous demander d’entrer un certains nombre d’informations pour pouvoir générer les fichiers dont le client aura besoin pour se connecter sur le serveur : 



Toutes ces étapes suite à l’exécution de la commande « ./build-key-pass » vont générer trois fichiers dans le répertoire /etc/openvpn/easy-rsa/keys : clientjacques.crt (le certificat du client), clientjacques.csr (certificat qui va rester sur le serveur et va permettre la correspondance avec celui du client)  et le fichier clientjacques.key (la clé du client).

A présent nous devons copier les trois fichiers nouvellement crées ainsi que les fichiers ca.crt (certificat du serveur) et ta.key (du serveur) :


Puis on crée le fichier « clientjacques.conf » avec la commande suivante ;

Dans notre cas ce fichier ressemble à ça :

L’adresse 212.217.42.3 représente l’une des adresses publique de notre serveur et 443 le port d’écoute.
Puis on génère en extension .ovpn le fichier de configuration du client c’est ce dernier qu’il utilisera pour se connecter via le logiciel OpenVPN sur le serveur ; 

En résumé on devrait avoir dans le dossier du client Client_Jacques les fichiers suivants :

Il ne nous reste plus qu’a rassembler tous ces fichiers dans une archive (.tar par exemple) et de la transmettre au client Client_Jacques ;


Connexion du Client au Serveur OpenVPN

Une fois que nous avons transféré et décompresser l’archive, 

On télécharge le logiciel OpenVPN sur le site officiel de OpenVPN :

telecharger OpenVPN

Une fois installé on lance le logiciel, et on clique sur le bouton (+) comme le montre la capture d’image suivante, pour pouvoir ajouter une nouvelle connexion VPN,


Puis on sélectionne l’option « Local file » ensuite sur le bouton « Import » :


Le logiciel va vous inviter à sélectionner le fichier de configuration en .ovpn à utiliser, dans notre cas ça correspond au fichier « clientjacques.ovpn ».

Puis on clique sur le bouton « Save » enfin de sauvegarder la configuration :


Nous obtenons la fenêtre suivante avec notre profil sélectionné plus haut:


Il ne nous reste plus qu’a cliquer sur le profil nouvellement crée pour entrer les paramètres de connexions du client au serveur :

 

Comme vous pouvez le voir sur la capture précédente, au moment de l’établissement du tunnel VPN le client doit entrer le mot de passe définit lors de la création du fichier client faite précédemment avec la commande « ./build-key-pass », et si les mots de passes et identifiants correspondent avec celui du fichier clientjacques.csr resté sur le serveur, la connexion est parfaitement établie.
  

Une fois la connexion établie au niveau du serveur OpenVPN nous pouvons vérifier les équipements qui y sont connectés, pour ce faire il faut examiner le fichier openvpn-status.log  se trouvant dans le répertoire /etc/openvpn/ :

A présent si on revient à notre exemple du début à savoir faire accéder le Client_Jacques à l’application hébergé sur le serveur Serveur_Application, il faut aussi configurer les fichiers du serveur Serveur_Application sur le serveur OpenVPN. La procédure est la même que celle décrite plus haut lors de la création du Client_Jacques. Puis on exporte également les fichiers sur le serveur Serveur_Application ;

Nous lançons OpenVPN sur le serveur Serveur_Application puis nous nous connectons au serveur OpenVPN :

Et à présent nous pouvons depuis le client Client_Jacques nous connecter au serveur Serveur_Application, en entrant l’adresse IP (attribué par le serveur OpenVPN) de ce dernier dans le navigateur web par exemple du client Client_Jacques ;

Nous constatons que le client Client_Jacques a bien accès à l’application hébergé sur le poste Serveur_Application situé dans un site distant. Et en consultant le fichier openvpn-status.log du Serveur OpenVPN on remarque que deux clients (Client_Jacques : 192.128.1.5 en Intranet et 10.8.0.6 dans le VPN; et Serveur_Application : 192.168.1.69 en Intranet et 10.8.0.10 dans le VPN) y sont bien connectés.  

Nous venons à présent de mettre en place un serveur OpenVPN au sein de notre réseau étendu, auquel des clients peuvent se connecter et travailler comme si ils se trouvaient logiquement dans le même Réseau local (Intranet).

Merci d’avoir suivi le tutoriel jusqu’à la fin.

A très bientôt !!!

10 commentaires :

  1. c'est intéressant ton article il est super. est ce que tu peux travailler avec moi sur mon mémoire; je travaille sur la sécurité bancaire(en faite je dois concevoir un algorithme qui sécurise les cartes bancaires au cameroun)
    et en suite créer une PKI(infrastructure des clés publics) si toi et moi nous réussissons il y a un grand sur ce projet sur les bancs que nous allons faire et gagner de l'argent donc si tu es d'accord tu me dis

    RépondreSupprimer
  2. Bonjour Jacques
    Merci pour ce tutoriel, étant à la masse avec Linux, est possible de créer son vpn depuis une plateforme Windows ? Ou sur le serveur application direçtement
    Ahmed

    RépondreSupprimer
    Réponses
    1. Bonjour Ahmed, oui c'est possible de créer son VPN directement sur Windows, il existe même une méthode pour le faire entièrement de manière graphique sans entrer la moindre commande dans l'Invite de commande (CMD)... Donc c'est possible.

      Supprimer
  3. Salut Jacques, je trouve ton tuto vraiment exceptionnelle mais je me disais si tu peut poster le même tuto pour Windows. Merci leonelzoko@gmail.com

    RépondreSupprimer
  4. Bonsoir,
    Merci pour le tuto !
    Serveuur Openvpn installé sur un VPS sous Debian
    Cela fonctionnne pour accès internet
    Mon problème:
    - j'ai installé un modem-routeur 4G (sous Linux) comme client VPN
    - je souhaiterai accéder aux ordinateurs derrière ce routeur par leurs adresses VPN. Par exemple:
    PC sur le Lan en IP 192.168.1.30
    Accéder à ce PC de l'extérieur par IP 10.8.0.30
    (Cela me permettrait d'accéder à mon réseau local via la 4G, ayant une connexion ADSL lamentable)
    Merci par avance

    RépondreSupprimer
    Réponses
    1. Bonjour,
      une solution à votre problème consisterait à vous assurer tout d'abord que l'ordinateur qui vous fera office de serveur OpenVPN soit accessible depuis internet donc possède une adresse (IP) publique. À présent il vous faudra configurer le service OpenVPN dessus ainsi que les comptes clients de manière statique (pour identifier chaque ordinateur de manière précise sur le LAN si vous le souhaitez en référence avec votre exemple) ou non, puis installer des clients OpenVPN sur toutes les machines (de votre réseau local) que vous souhaités joindre de l'extérieur ainsi que les fichiers clients prévus pour cela. Faudra également prévoir un fichier client ainsi qu'un logiciel client OpenVPN sur l'ordinateur qui sera utilisé pour joindre les stations depuis l'extérieur via internet. Si nécessaire faudra également avoir recours (sur le routeur d'entré qui vous fera aussi peut-être office de serveur OpenVPN) en fonction de comment vous allez vous y prendre à du NAT et/ou des règles d'IPtables.

      Supprimer