TP (Linux) OpenVpn
TP (Linux) OpenVpn
TP (Linux) OpenVpn
Introduction :
La construction d'un tunnel de communication sécurisé est une étape fondamentale dans le
domaine des réseaux informatiques. Elle permet de garantir la confidentialité et l'intégrité
des données transitant entre des dispositifs distants. Dans cet article, nous explorerons trois
approches différentes pour construire un tunnel.
Nous allons dans le premier TP créer un tunnel entre deux machines serveur et client dont le
bout de tunnel liée à la machine serveur va avoir comme adresse 10.0.0.1 et l’autre
extrémité du tunnel du client aura l’adresse 10.0.0.2
-pour les deux machines serveur (192.168.1.1) et client (192.168.1.2) nous allons installer
OpenVpn par la commande suivante :
-> sudo apt install openvpn
1
Après on aura la possibilité de créer le tunnel
Sur la machine serveur
➔ sudo openvpn --dev tun1 --ifconfig 10.0.0.1 10.0.0.2
On aura un warning qui dit que la communication entre le client et le serveur et non sécurisé
c’est-à-dire un attaquant capable de lire et de modifier tous les messages échangés entre les
deux machines qui est l’homme au milieux (man in the middle)
Sur la machine client :
➔ sudo openvpn --dev tun1 --remote 192.168.1.1 --ifconfig 10.0.0.2 10.0.0.1
Pour le test on applique dabord :
➔ hostname -I
Qui permet de déterminer les adresses assignées à la machine, il faut que l’adresse de
l’interface qui est en écoute apparait, on fait le ping pour les deux machines pour tester la
communication
➔ ping 192 .168 .1.2 (dans la machine serveur)
➔ ping 192.168.1.1 (dans la machine client)
2
➔ ip a
➔ whomi
➔ pwd
En fait tout cela pour savoir les informations qui vont nous aider pour envoyer la clé a la
machine client :
➔ scp key ‘whoami’@192.168.1.2:’pwd’
Cette commande scp doit être exécuté dans la machine serveur en remplaçant whoami par
le nom de la machine client et pwd par le chemin actuel de la machine client, après on
applique la communication par un tunnel ‘tun1’ en employant bien entendu la clé secrète
‘key’.
➔ Sudo openvpn --dev tun1 --ifconfig 10.0.0.1 10.0.0.2 --secret key
On obtient un warning qui dit : “using a --cipher with a larger block size (e.g AES-256-CBC)”,
l'option --cipher va nous permettre de spécifier le chiffrement à utiliser pour sécuriser la
connexion VPN. La taille du bloc est un aspect important d'un chiffrement elle a un avantage
en termes de sécurité contre les attaques crypyptographiques, et on peut effectivement
choisir un chiffrement avec une taille de bloc plus grande, comme AES-256-CBC.
Donc nous allons réexécuter la commande mais en utilisant --cipher avec algorithme de
chiffrement AES-256-CBC :
➔ Sudo openvpn --dev tun1 --ifconfig 10.0.0.1 10.0.0.2 --secret key --cipher AES-256-
CBC
On applique la meme chose pour la machine client :
➔ Sudo openvpn --dev tun1 --remote 192.168.1.1 --ifconfig 10.0.0.2 10.0.0.1 --secret
key --cipher AES-256-CBC
Ce qui permet de l’ouverture du port 1194 et pour le test il faut tout simplement faire le
ping.
3
même répertoire qu'openvpn, on facilite l'intégration entre les deux et la configuration des
certificats pour sécuriser les connexions vpn.
➔ sudo make-cadir /etc/openvpn/easyrsa
➔ cd /etc/openvpn
➔ sudo su
➔ cd easy-rsa
➔ ls
Pour accéder à easy-rsa il faut avoir les privilèges du root car les opérations sur les clés
privées et des certificats nécessitent des autorisations spéciales. On remarque que easy-rsa
contient les fichiers easyrsa, openssl-easyrsa.cnf, vars et x509-types.
- easyrsa : Il s'agit du script principal qui est utilisé pour effectuer diverses opérations liées à
la gestion des clés et des certificats. Ce script est exécuté avec des arguments spécifiques
pour générer des paires de clés, des certificats, des demandes de signature de certificat
(CSRs), etc.
- vars : Ce fichier contient des variables et des paramètres de configuration que le script
easyrsa utilise lors de son exécution. Les variables dans ce fichier incluent souvent des
informations telles que le nom du pays, de l'État, de la ville, etc.
-nous allons faire maintenant l’initialisation de la PKI :
PKI est une infrastructure à clé publique qui utilise la cryptographie asymétrique pour
sécuriser les communications. Elle permet de gérer la création, la distribution et le cycle de
vie des certificats numériques qui contiennent la clé publique et privée. Les certificats
numériques servent à s’authentifier, à signer électroniquement et à chiffrer les transactions.
➔ ./easyrsa init-pki
Cela implique la creation d’un répertoire pki qui contient : openssl-easyrsa.cnf, private , reqs,
safessl-easyrsa.cnf .
-toujours sur /etc/openvpn/easy-rsa# nous allons générer un certificat d’autorité (une entité
de confiance responsable de vérifier l'identité des parties demandant des certificats) :
➔ ./easyrsa build-ca
Après on nous demande d’entrer un passephrase, pour la protection de la clé privé. On
obtient dans le répertoire pki le certificat ca.crt et d’autres répertoires sont générées comme
issued dont ils auront sauvegardé les certificats
- pour voir les informations du certificat, on utilise par exemple
➔ Openssl x509 -in ca.crt -subject -issuer -dates -noout
Il faut noter aussi que la clé du certificat ca.crt va être généré dans le répertoire pki qui est
ca.key.
-on génère la clé du diffie-helman par :
4
➔ ./easyrsa gen-dh
Cela va permettre de générer la clé dh.pem qui va être placé dans le répertoire pki
-maintenant nous allons générer une demande de certificat que nous allons l’appeler EMSI
par exemple :
➔ ./easyrsa gen-req EMSI
Et en va la signer :
➔ ./easyrsa sign-req server EMSI
Dès que le certificat est signé on peut dire qu’on a créer le certificat qui va être placé dans le
répertoire issued
Après pour la simplicité on va mettre les informations qu’on déjà générer sur le répertoire
openvpn mais ce n’est pas obligatoire
➔ cp pki/dh.pem pki/private/EMSI.key pki/ca.crt pki/issued/EMSI.crt
/etc/openvpn
Maintenant nous allons générer le certificat pour le client qu’on va appeler cli, et nous allons
procéder de la même manière :
➔ ./easyrsa gen-req cli
➔ ./easyrsa sign-req client cli
5
Après nous allons envoyer ces informations au client mais il ne faut pas oublier de
redémarrer le service ssh sur la machine client avant de faire ce qui suit dans la machine
serveur :
➔ Scp pki/ca.crt pki/issued/cli.crt pki/private/cli.key
‘whoami’@192.168.1.2:’pwd’
Pour la configuration de fichier server.conf par lequel on va créer notre tunnel nous allons le
copier vers le répertoire /etc/openvpn :
➔ cp /usr/share/openvpn/examples/sample-config-files/server.conf /etc/openvpn
Puis nous allons entrer les informations correspondantes en changeant les ligne suivantes :
ca ca.crt -> ca /etc/openvpn/ca.crt
cert server.crt -> cert /etc/openvpn/EMSI.crt
key server.key -> key /etc/openvpn/EMSI.key
Ce n’est pas obligatoire de spécifier le chemin de ces certificats et la clé car nous allons
travailler sur le même chemin
-maintenant nous allons générer la clé ta.key pour le renforcement de la sécurité et la
protection contre les attaques par rejeu en s'assurant que les paquets ne sont pas rejoués
par un attaquant, et aussi les attaques de type man-in-the-middle. Et pour contribuer à
l'authentification mutuelle entre le client et le serveur. ta.key permet au serveur de vérifier
que le client possède la clé partagée correcte avant de lui accorder l'accès au réseau.
➔ openvpn --genkey --secret ta.key
➔ nano etc/sysctl.conf
On applique nano etc/sysctl.conf pour activer net.ipv4.ip-forward=1, pour activer la
redirection IP(permettre au noyau du système d'acheminer les paquets réseau d'une
interface réseau à une autre), ce qui est souvent utilisé dans le contexte de configurations de
routage ou de partage de connexion Internet sur des systèmes Linux.
-maintenant nous allons créer le tunnel entre les deux machines et on laisse la machine
serveur en écoute
➔ openvpn /etc/openvpn/server.conf
Dans une autre fenêtre mcd on copie la clé ta.key dans le chemin actuel de la machine client
➔ scp ta.key , ‘whoami’@192.168.1.2:’pwd’
-dans la machine client nous allons copier les informations qu’on a générer par le serveur
dans le répertoire /etc/openvpn/ :
➔ sudo cp ca.crt clientg6.crt clientg6.key ta.key /etc/openvpn/
-la configuration du fichier client.conf :
6
➔ sudo su
➔ cd /etc/openvpn
➔ cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf
➔ nano client.conf
Dans le fichier client.conf nous allons remplacer les ligne suivantes par les informations
convenable :
remote my-server-1 1194 -> remote 192.168.1.1 1194
ca ca.crt -> ca /etc/openvpn/ca.crt
cert client.crt -> cert /etc/openvpn/clientg6.crt
key client.key -> key /etc/openvpn/clientg6.key
tls-auth ta.key 1 -> tls /etc/openvpn/ta.key 1
7
8
9
10
11
12