COMPUTING > Virtual Private Cloud > VMware vCloud Director > Comment établir une connexion VPN avec OpenVPN sur Ubuntu 20.04

3.4.1.2 Comment établir une connexion VPN avec OpenVPN sur Ubuntu 20.04

Un VPN (Virtual Private Network) est un réseau privé virtuel qui permet de connecter deux réseaux informatiques indépendants exposés sur internet l'un à l'autre en toute sécurité. Grâce à un VPN, il est donc possible à partir d'un serveur ou d'un PC (client) connecté à un certain point d'Internet d'accéder aux ressources réseau d'un autre serveur, créant virtuellement une connexion réseau directe entre les deux et garantissant en pratique que la connexion physique entre les deux points du réseau sont émulés.

OpenVPN est un logiciel open source qui vous permet de créer un VPN et qui est basé sur les protocoles TLS/SSL (Transport Layer Security/Secure Sockets Layer), utilisant des certificats pour crypter en toute sécurité le trafic entre le Serveur et le Client.
 
Ce guide décrit la configuration/implémentation d'un VPN utilisant OpenVPN, sur un Serveur et un Client Linux avec Ubuntu 20.04. Cela ne signifie pas que les indications fournies ne peuvent pas être utilisées en partie (celles relatives au Serveur ou au Client) pour des configurations/implémentations hybrides (par exemple Serveur Linux et Client Windows ou inversement).

Pour suivre les instructions du guide, vous aurez besoin:
  • Serveur - serveur principal (Ubuntu) pour la connexion VPN;
  • Machine CA - serveur (Ubuntu) qui agira comme une machine CA ou comme une autorité de certification et aura pour tâche de vérifier la validité des certificats (il pourrait coïncider avec le serveur principal pour la connexion VPN);
  • Client - périphérique secondaire (Ubuntu) pour la connexion VPN.
Vous devrez vous connecter à votre Serveur, votre machine CA et le Client via une connexion SSH.
 
Tout d'abord, accédez à votre Serveur et installez OpenVPN (ces indications sont également valables côté Client).
 
Le programme d'installation peut être utilisé à la fois côté serveur et côté client sur le système d'exploitation Linux.

N.B. OpenVPN est déjà disponible dans le référentiel officiel Ubuntu, vous n'avez donc pas besoin d'en ajouter plus.

Tapez:
 

$ sudo apt update
$ sudo apt install openvpn

À ce stade, vous aurez installé avec succès OpenVPN sur votre serveur.
 
Les mêmes opérations d'installation d'OpenVPN seront répliquées côté client.
Continuez en téléchargeant EasyRSA sur votre serveur et sur votre machine CA en tapant sur les deux machines:
 

$ wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.4/EasyRSA-3.0.4.tgz

Vous pouvez télécharger la dernière version depuis https://github.com/OpenVPN/easy-rsa/releases
 

$ cd ~
$ sudo tar xvf EasyRSA-3.0.4.tgz



N.B. Le nom peut différer selon la version téléchargée.
Terminez la configuration du serveur en tapant:
 

$ sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
$ sudo gzip -d /etc/openvpn/server.conf.gz
$ sudo nano /etc/openvpn/server.conf

Trouvez la section qui fait référence à HMAC ("'tls-auth"'). Si la ligne est commentée, supprimez le "';"'.
Trouver la section sur le cryptage ("'cipher"'). Si la ligne est commentée, supprimez le "';"' et ajoutez une nouvelle ligne juste en dessous contenant le texte "'auth SHA256"'.
Trouvez la section "'dh"' qui définit les paramètres Diffie-Hellman et supprimez "'2048"' du nom (vous devriez avoir "'dh dh.pem"').

Trouvez la section "'user"' et "'group"' et supprimez les "';"' pour rendre les lignes non commentées.
Sur votre machine CA, après l'installation d'EasyRSA, un fichier de configuration a été créé, utile pour définir les variables de votre CA. Tapez:
 

$ cd ~/EasyRSA-3.0.4/
$ sudo cp vars.example vars
$ sudo nano vars

Décommentez les instructions indiquées dans la figure:

Modifica le variabili

Exécutez le script "'easyrsa"' pour initialiser l'infrastructure de la clé publique (PKI):
 

$ sudo ./easyrsa init-pki
$ sudo ./easyrsa build-ca nopass

Deux fichiers seront créés avec cette commande:
  • ca.crt: certificat public de la machine CA utilisée par le serveur et le client pour se notifier qu'ils font partie du même réseau de confiance.
  • ca.key: clé privée que la machine CA utilise pour signer les clés et les certificats pour le serveur et le client. Ce fichier doit être conservé uniquement sur la machine CA (non accessible par des tiers) car sinon la sécurité du réseau peut être compromise.
Vous serez invité à entrer un nom. Laissez vide et appuyez sur Entrée.
Maintenant que la machine CA est configurée, vous devez demander au serveur de générer une clé privée et une demande de certificat et de les envoyer à la machine CA pour les faire signer:
 

$ cd ~/EasyRSA-3.0.4
$ sudo ./easyrsa init-pki
$ sudo ./easyrsa gen-req server nopass

Pour plus de simplicité, laissez "'server"' comme nom de machine ou vous devrez faire plusieurs changements plus tard.

Vous venez de créer une clé privée pour le serveur et une demande de certificat appelée "'server.req"':
 

$ sudo cp ~/EasyRSA-v3.0.6/pki/private/server.key /etc/openvpn/

Copiez le fichier server.req sur la machine CA:
 

$ sudo scp ~/EasyRSA-3.0.4/pki/reqs/server.req user@your_CA_ip:/tmp

Sur votre machine CA dans le dossier EasyRSA, importez le fichier que vous venez de copier et signez-le:
 

$ cd ~/EasyRSA-3.0.4/
$ sudo ./easyrsa import-req /tmp/server.req server
$ sudo ./easyrsa sign-req server server

Tapez "'yes"' et appuyez sur Entrée.

Transférez le certificat signé et le ca.crt au serveur VPN:
 

$ sudo scp pki/issued/server.crt user@your_server_ip:/tmp
$ sudo scp pki/ca.crt user@your_server_ip:/tmp

Ensuite sur votre Serveur copiez les fichiers reçus dans les répertoires appropriés:
 

$ sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/
$ cd ~/EasyRSA-3.0.4/

et générez une clé d'échange:
 

$ sudo ./easyrsa gen-dh
$ sudo openvpn --genkey --secret ta.key

Copiez les fichiers générés dans le dossier "'/etc/openvpn/"':
 

$ sudo cp ~/EasyRSA-3.0.4/ta.key /etc/openvpn/
$ sudo cp ~/EasyRSA-3.0.4/pki/dh.pem /etc/openvpn/

Vous devez maintenant vous connecter à la machine Ubuntu qui agira en tant que client dans la connexion VPN.

Après avoir installé OpenVPN sur cette machine, créez un dossier pour stocker les certificats et les clés client. N'ayant qu'un seul Client dans ce guide il s'appellera "'client1"', mais l'opération devra être répétée pour chaque Client en changeant le nom.
 

$ sudo mkdir -p ~/client-configs/keys
$ sudo chmod -R 700 ~/client-configs
$ cd ~/EasyRSA-3.0.4/
$ sudo ./easyrsa gen-req client1 nopass

Appuyez sur Entrée pour accepter le nom standard proposé.
Copiez la clé client dans le dossier créé ci-dessus:
 

$ sudo cp pki/private/client1.key ~/client-configs/keys/


Envoyez le fichier client1.req à la machine CA:
 

$ sudo scp pki/reqs/client1.req user@your_CA_IP:/tmp

Importez la demande de certificat sur votre machine CA:
 

$ cd ~/EasyRSA-3.0.4/
$ sudo ./easyrsa import-req /tmp/client1.req client1
$ sudo ./easyrsa sign-req client client1

Tapez "'yes"' pour autoriser la signature.
Transférez le certificat sur votre machine serveur:
 

$ sudo scp pki/issued/client1.crt utente@IP_SERVER:/tmp

Dans votre serveur, copiez les fichiers suivants dans les dossiers appropriés:
 

$ sudo mkdir -p ~/client-configs/keys
$ sudo chmod -R 700 ~/client-configs
$ sudo cp /tmp/client1.crt ~/client-configs/keys/
$ sudo cp ~/EasyRSA-3.0.4/ta.key ~/client-configs/keys/
$ sudo cp /etc/openvpn/ca.crt ~/client-configs/keys/

Pour le moment, les certificats et les clés du serveur et du client ont été générés.
Maintenant, du côté du serveur, vous devez modifier les règles de transfert IP.
 

$ sudo nano /etc/sysctl.conf

Trouvez la section "'net.ipv4.ip_forward"' et supprimez le "'#"' pour que l'instruction ne soit pas commentée.

Vous devez modifier certaines règles de pare-feu afin d'acheminer correctement les connexions Client.
 

$ ip route | grep default

Mémorisez le nom après "'dev"' (dans la figure, le nom est "'eth0"').

Configura la rete di OpenVPN

$ sudo nano /etc/ufw/before.rules

Ajoutez les commandes comme dans la figure ci-dessous, en remplaçant "'eth0"' par le nom de votre interface réseau.

Configura la rete di OpenVPN

Enregistrez et sortez.
 

$ sudo nano /etc/default/ufw

Changez la valeur du paramètre "'DEFAULT_FORWARD_POLICY"' avec "'ACCEPT"'.

Activez le port 1194 pour le trafic UDP et le port 22 pour le trafic SSH:
 

$ sudo ufw allow 1194/udp $ sudo ufw allow OpenSSH

Redémarrez le firewall:
 

$ sudo ufw disable
$ sudo ufw enable

Démarrez le service de OpenVPN:
 

$ sudo systemctl start openvpn

Vérifiez l'état du service. Si tout s'est bien passé, vous trouverez un écran similaire à celui de la figure.
 

$ sudo systemctl status openvpn

Stato del servizio di OpenVPN

Exécutez le service au démarrage du serveur:
 

$ sudo systemctl enable openvpn

Créez la configuration de base pour les Clients:
 

$ sudo mkdir -p ~/client-configs/files
$ sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
$ sudo nano ~/client-configs/base.conf

Trouvez la section "'remote"' et assurez-vous qu'il indique "'remote IP_Server 1194"'
 
  • IP_Server: Entrez l'IP du Serveur
  • 1194: port choisi précédemment.
Trouvez la section "'proto"' pour vous assurer que le serveur est défini sur UDP (vous trouverez la ligne TCP commentée par un "';"').

Trouvez la section "'user"' et "'group"' et supprimez les "';"' pour les rendre "'sans commentaires"'.

Trouvez les sections "'ca.crt"' - "'client.crt"' - "'client.key"' - "'ta.key"' et commentez-les avec un "'#"' au début de chaque ligne.

Trouvez la section "'cipher"' et ajoutez l'instruction "'auth SHA256"' sous l'instruction "'cipher AES-256-CBC"'.

Ajoutez n'importe où l'instruction "'key-direction 1"'.

Ajoutez n'importe où ces lignes commentées. Si le client est une machine Linux, ils doivent être rendus non commentés.
 

# script-security 2
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf

Enregistrez et fermez.
Sur votre Serveur, créez un script qui compilera automatiquement la configuration d'un Client:
 

$ sudo nano ~/client-configs/make_config.sh

Copiez et collez le texte suivant:
 

#!/bin/bash
# First argument: Client identifier
KEY_DIR=~/client-configs/keys
OUTPUT_DIR=~/client-configs/files
BASE_CONFIG=~/client-configs/base.conf
cat ${BASE_CONFIG} \
    <(echo -e '<ca>') \
    ${KEY_DIR}/ca.crt \
    <(echo -e '</ca>\n<cert>') \
    ${KEY_DIR}/${1}.crt \
    <(echo -e '</cert>\n<key>') \
    ${KEY_DIR}/${1}.key \
    <(echo -e '</key>\n<tls-auth>') \
    ${KEY_DIR}/ta.key \
    <(echo -e '</tls-auth>') \
    > ${OUTPUT_DIR}/${1}.ovpn

Enregistrez le fichier et rendez-le exécutable:
 

$ sudo chmod 700 ~/client-configs/make_config.sh

Essayez enfin de générer la configuration pour le Client "'client1"':
 

$ cd ~/client-configs
$ sudo ./make_config.sh client1

Le fichier client1.ovpn sera créé.

Vous devez maintenant transférer ce fichier sur l'appareil que vous avez l'intention d'utiliser en tant que client car il sera utilisé par le logiciel VPN pour la connexion.
Pour révoquer les certificats d'un client, exécutez les commandes suivantes sur votre ordinateur CA:
 

$ cd EasyRSA-3.0.4/
$ sudo ./easyrsa revoke client1

client1 est le nom du Client auquel les autorisations doivent être révoquées.

Tapez "'yes"' pour confirmer.

Générez le fichier crl.pem et envoyez-le à votre serveur:
 

$ sudo ./easyrsa gen-crl
$ sudo scp ~/EasyRSA-3.0.4/pki/crl.pem user@IP_Server:/tmp

Mettez à jour la configuration sur votre serveur pour vérifier la révocation:
 

$ sudo cp /tmp/crl.pem /etc/openvpn
$ sudo nano /etc/openvpn/server.conf

Ajoutez "'crl-verify crl.pem"' à la fin du fichier.

Enregistrez et fermez.
 

$ sudo systemctl restart openvpn@server

Redémarrez le serveur pour que les modifications prennent effet.