OpenVPN

OpenVPN

Dans cet article, je vais vous montrer comment mettre en place un tunnel VPN SSL grâce à l’outil OpenVPN.

Explication

Type VPN

Sachez qu’il existe deux grands types de VPN: IPSec et VPN SSL

– IPSec agit au niveau de la couche IP:

  • Protection unique pour l’ensemble des applications
  • Protège de bout en bout
  • Protège les données pair à pair
  • L’ensemble des équipements utilisant le tunnel bénéficient de ces avantages

 

– VPN SSL dans le cas de OpenVPN, agit sur les couches réseau, transport, session, présentation et application:

  • Authentification et chiffrement par SSL
  • Configuration à réaliser sur chacun des clients
  • Passe facilement les NAT

 

Dans ce tutoriel je vais vous expliquez étape par étape comment mettre en place un VPN SSL sur une distribution Ubuntu 18.04. Nous allons installer un serveur puis des clients OpenVPN sous Linux, Windows et Android.

 

OpenVPN

Types

Il existe plusieurs configurations possibles avec OpenVPN:

La première consiste à utiliser des clés statiques, simple à mettre en œuvre mais peu adaptée dans une architecture avec beaucoup de clients et peu sécurisée. En effet, l’interception de la clé partagée va dévoiler tous les échanges y compris ceux déjà passés.

La seconde, plus sécurisée, consiste à utiliser des certificats. C’est celle-ci que nous allons mettre en place. Nous monterons un tunnel en UDP sur le port 1194 (port par défaut).

 

Installation et configuration

Serveur

Avant de commencer, mettez à jour votre serveur:

sudo apt-get update
sudo apt-get upgrade

 

Installez les paquets nécessaires:

sudo apt-get install openvpn easy-rsa

 

Le serveur est installé, nous allons maintenant le configurer. Commençons par  générer les certificats et clés nécessaires. Nous allons tout mettre dans le même dossier, lancez les deux commandes suivantes afin de le créer et d’aller dans ce dossier:

make-cadir certificats
cd certificats

 

A partir de cette étape, lancez toutes les commandes dans le dossier que vous venez de créer « certificats ». Nous allons ensuite modifier les variables:

sudo nano vars

 

Afin de définir précisément le chemin du fichier openssl.cnf. Remplacez la ligne:

export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA`

 

Par:

export KEY_CONFIG="$EASY_RSA/openssl-1.0.0.cnf"

 

Toujours dans le fichier vars, vous pouvez modifier les valeurs qui vous sont proposées par défaut lors de la création du certificat, en remplaçant les valeurs entre «  »:

export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="me@myhost.mydomain"
export KEY_OU="MyOrganizationalUnit"

 

Pour prendre en compte ces nouvelles variables, entrez la commande ci-dessous:

source vars

 

Notre environnement est prêt, nous allons pouvoir créer notre autorité de certification. Utilisez les scripts présents dans le dossier certificats:

./clean-all && ./build-ca

 

Remplissez les champs ou laissez par défaut si vous aviez déjà modifié les valeurs dans le fichier vars.

Notre autorité de certification étant créée, nous allons générer le certificat et la clé du serveur OpenVPN. Lancez la commande suivante:

./build-key-server server

 

Les champs « challenge password » et « company name » sont optionnels, je les laisse vides pour ce tutoriel.

 

Nous allons générer les paramètres Diffie-Hellman, cette étape peut prendre quelques minutes:

./build-dh

 

En plus d’utiliser un certificat, nous allons également générer une clé TLS pour avoir encore plus de sécurité. Utilisez la commande ci-dessous:

openvpn --genkey --secret keys/ta.key

 

Copiez les fichiers qui sont dans /certificats/keys dans le dossier /etc/openvpn afin qu’ils soient pris en compte:

sudo cp keys/{server.crt,server.key,ca.crt,dh2048.pem,ta.key} /etc/openvpn

 

Pour la configuration de OpenVPN, un exemple du fichier server.conf est situé ici : /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz. Nous allons le décompresser et le placer dans /etc/openvpn:

gzip -d -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf

 

Par défaut, seul le trafic entre votre serveur et votre client va passer dans le tunnel (le trafic internet ne passera pas dans celui-ci par exemple). Dans le fichier server.conf, nous allons dé-commenter la ligne qui concerne ce point afin que tout le trafic passe dans le tunnel:

sudo nano /etc/openvpn/server.conf

 

Dé-commentez la ligne:

push "redirect-gateway def1 bypass-dhcp"

 

Contenu du fichier de configuration du serveur OpenVPN (server.conf):

port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key # This file should be kept secret
dh dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
push "redirect-gateway def1 bypass-dhcp"
keepalive 10 120
tls-auth ta.key 0 # This file is secret
cipher AES-256-CBC
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
verb 3
explicit-exit-notify 1

 

Démarrez le service OpenVPN:

sudo systemctl start openvpn@server

 

Vérifiez qu’il est bien actif:

sudo systemctl status openvpn@server

 

Nous allons maintenant passer à la configuration des clients. Nous allons créer le certificat du client pour le serveur ainsi que le certificat et la clé pour le client.

 

Utilisez la commande ci dessous (vérifiez que vous êtes toujours dans le répertoire certificats):

source vars && ./build-key client

 

Créez un répertoire pour le client dans /etc/openvpn et copiez le certificat du client, la clé du client, le certificat du serveur et la clé TLS dedans:

sudo mkdir /etc/openvpn/client1
sudo cp keys/{client.crt,client.key,ca.crt,ta.key} /etc/openvpn/client1 && cd /etc/openvpn/client1

 

Nous allons créer le fichier de configuration du client. Comme pour le serveur nous allons utiliser un modèle déjà présent sur le serveur:

sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf client.ovpn

 

Éditez le fichier:

sudo nano client.ovpn

 

Sur la ligne suivante, remplacez « my-server » par l’IP de votre serveur OpenVPN, laissez 1194 si vous avez laissé le port par défaut sinon modifiez-le:

remote my-server-1 1194

 

Le contenu de client.ovpn sera le suivant:

client
dev tun
proto udp
remote IP_SRV_OPENVPN 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
remote-cert-tls server
tls-auth ta.key 1
cipher AES-256-CBC
verb 3

 

Nous allons créer un zip contenant les informations devant être sur le poste client. Le fichier zip contiendra:

  • ca.crt : certificat du serveur OpenVPN
  • client.crt : certificat du client
  • client.key : clé du client
  • ta.key : clé TLS
  • client.ovpn : fichier configuration vpn

 

Dans le répertoire du client, faites un zip du dossier:

sudo zip client.zip *.*

 

C’est ce fichier que nous allons mettre sur le client afin qu’il puisse se connecter au serveur OpenVPN.

 

Clients

Linux

Copiez le fichier zip précédemment créé sur la machine. Ouvrez un terminal et installez le paquet nécessaire:

sudo apt-get install network-manager-openvpn-gnome

 

Dézipper le fichier:

unzip client

 

En haut a droite, cliquez sur l’icône réseau puis sur « Modification des connexions… »:

 

Cliquez sur le bouton « Ajouter »:

 

Sélectionnez « Importer une configuration VPN enregistrée … »:

 

Sélectionnez le fichier client.ovpn, la fenêtre va être pré-remplie. Si ce n’est pas le cas, vérifiez que les noms des éléments dans le fichier .ovpn soient les mêmes que les éléments eux-même:

 

Sélectionnez la connexion VPN que nous venons de créer en cliquant à nouveau sur l’icône réseau, puis sur « Connexions VPN » puis sur le nom de votre connexion:

 

Patientez quelques secondes, le tunnel va s’établir:

 

Vous avez désormais un cadenas sur votre icône de connexion réseau qui signifie que vous êtes connecté en VPN.

 

Windows

Téléchargez le fichier d’installation sur le site de OpenVPN en cliquant ici. Lancez l’installation, lors de celle-ci vérifiez que « TAP Virtual Ethernet Adapter » et « OpenVPN GUI » soient cochés. « OpenVPN Service » n’est pas nécessaire. Cliquez sur « Next » puis sur « Install »:

 

Durant l’installation, une fenêtre Windows va vous demander si vous souhaitez installer TAP, cliquez sur « Installer ». Une fois l’installation terminée, cliquez sur « Finish », puis ajoutez le dossier dézipper dans l’emplacement suivant:

C:\Users\VOTREnomUSER\OpenVPN\config\client1

 

Lancez l’outil « OpenVPN GUI ». Faites un clic droit sur l’icône dans la barre des tâches et cliquez sur « Connecter »:

 

Vous aurez une notification vous indiquant que la connexion est réussie:

 

 

Android

Téléchargez OpenVPN sur le Play Store et copiez le fichier déjà dézippé sur votre smartphone. Une fois l’application lancée, cliquez sur « OVPN profile »:

 

Sélectionnez le profil .ovpn dans vos fichiers:

 

Votre profil est importé, vous pouvez personnaliser le nom de votre connexion:

 

Cliquez sur le profil pour vous connecter. Un avertissement va apparaître, cliquez sur « OK »:

 

Vous êtes maintenant connecté à votre serveur OpenVPN:

 

Résolutions problèmes

Si votre tunnel VPN ne fonctionne pas, vérifiez les points suivants:

  • Configuration cohérente entre votre serveur et votre client: même numéro de port (1194 par défaut), même protocole (UDP)…
  • Les bonnes clés et certificats sont présents sur votre client: client.crt (certificat du client), ca.crt (certificat du serveur), client.key (clé du client) et ta.key (clé TLS)
  • Vos machines arrivent à communiquer ensemble
  • Les règles de votre firewall si vous en avez un sur votre serveur. Une configuration supplémentaire doit être réalisée afin d’autoriser le trafic nécessaire.
  • Les logs du serveur et du client OpenVPN

 

C’est la fin de cet article. Vous avez appris comment configurer un serveur OpenVPN et à installer des clients Linux, Windows et Android.

 

 

 

À propos de l’auteur

Vincent Krahenbuhl administrator

Passionné d’informatique, ma motivation et ma curiosité m’ont permis de réaliser des études en alternance, tout d’abord en tant que technicien informatique au sein du groupe Edscha puis administrateur réseau au sein de FM Logistic. Fort de ces expériences dans deux entreprises internationales, j’exerce aujourd’hui le rôle d’ingénieur réseau et sécurité chez FM Logistic.

Laisser un commentaire

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