Mise en place d'un serveur OpenVPN sur un serveur Cloud

Testez-le maintenant pour 1 euro seulement !
Vous avez de grands projets d’hébergement avec beaucoup de ressources ? Avec le CloudServer (VPS) de hosting.fr, ce n’est pas un problème. Grâce à notre vaste gamme d’outils d’hébergement, vous bénéficiez d’une liberté absolue. Bien entendu, vous pouvez choisir librement le système d’exploitation en appuyant sur un bouton.
Réserver un serveur cloud maintenant

Logo OpenVPN

Un Réseau Privé Virtuel (VPN) permet de chiffrer et d’isoler la communication entre les appareils, comme par exemple entre les ordinateurs portables des agents de service client et le siège de l’entreprise via Internet. Pour cela, un serveur avec une adresse IP fixe, qui idéalement est disponible 24h/24 et 7j/7, est nécessaire. Un serveur Cloud de hosting.fr est par exemple bien adapté à cet usage.

Il existe plusieurs solutions logicielles pour les serveurs VPN. Cet article décrit la configuration du logiciel OpenVPN. Les composants principaux d’OpenVPN sont sous une licence GPL Open Source et peuvent donc être utilisés librement. Le chiffrement de la connexion se fait à l’aide de “OpenSSL” ou “mbed TLS”. Un “OpenVPN Access Server” payant existe aussi. Dans ce guide, nous allons montrer comment reproduire une fonctionnalité similaire à ce serveur à l’aide des composants Open Source.

Pour des raisons de sécurité, il est recommandé de configurer une identification et une authentification des partenaires de communication sur la base de méthodes de cryptographie asymétriques et de la cryptographie à clé publique. Le serveur reçoit un certificat TLS et peut créer des certificats avec lesquels les clients peuvent s’authentifier.

Prérequis

  • Vous disposez d’un serveur Cloud de hosting.fr.
  • Ce guide montre la configuration sur un serveur Cloud avec Debian 10 “Buster”. La configuration sur d’autres systèmes d’exploitation, comme par exemple Ubuntu ou CentOS, est similaire, mais peut différer dans certains détails.
  • Vous avez besoin d’un accès root sur le serveur.
  • Un éditeur de texte, par exemple nano ou vim, est nécessaire pour éditer les fichiers de configuration.

Installation d’OpenVPN

Veuillez vous connecter via SSH à votre serveur Cloud hosting.fr :

ssh demoserver.mustermann-domain.de

et passez en mode root pour obtenir les droits nécessaires :

sudo -s

Mettez ensuite à jour les sources de paquets et installez les paquets nécessaires :

apt update
apt install openvpn easy-rsa

Créez ensuite avec un éditeur de texte le fichier /etc/openvpn/easy-rsa/vars sur le serveur avec les contenus suivants :

export KEY_COUNTRY="FR"
export KEY_PROVINCE="IDF"
export KEY_CITY="Paris"
export KEY_ORG="Société Mustermann"
export KEY_EMAIL="info@mustermann-domain.fr"

Veuillez adapter les valeurs à vos besoins.

Configuration

Créer la chaîne de certificats du serveur

Créez la chaîne de certificats RSA du serveur à l’aide des commandes suivantes :

cd /etc/openvpn
make-cadir easy-rsa/

Ensuite, créez la chaîne de certificats à l’aide des commandes suivantes :

cd /etc/openvpn/easy-rsa
./easyrsa init-pki

La sortie devrait ressembler à ceci :

Note: using Easy-RSA configuration from: ./vars

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /etc/openvpn/easy-rsa/pki

Ensuite, nous allons créer une autorité de certification (CA) à l’aide de la commande :

./easyrsa build-ca

Au cours de la création, vous serez invité à entrer une passphrase pour protéger la clé privée de l’autorité de certification. Choisissez un mot de passe sûr ici. Veuillez utiliser le nom d’hôte complet du serveur comme “Nom commun”, c’est-à-dire par exemple demoserver.mustermann-domain.de. La sortie de la commande devrait ressembler à ceci :

Note: using Easy-RSA configuration from: ./vars

Using SSL: openssl OpenSSL 1.1.1d  10 Sep 2019

Enter New CA Key Passphrase: 
Re-Enter New CA Key Passphrase: 
Generating RSA private key, 2048 bit long modulus (2 primes)
..............+++++
...................+++++
e is 65537 (0x010001)
Can't load /etc/openvpn/easy-rsa/pki/.rnd into RNG
139654556873856:error:2406F079:random number generator:RAND_load_file... 
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:demoserver.mustermann-domain.de

CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/etc/openvpn/easy-rsa/pki/ca.crt

Maintenant, un certificat et une clé pour le serveur doivent être créés. D’abord, un certificat de demande et une clé privée pour le serveur doivent être créés :

./easyrsa gen-req demoserver.mustermann-domain.de nopass

Ensuite, le certificat doit être signé à l’aide de la clé de l’autorité de certification. À ce stade, vous devrez entrer la passphrase que vous avez définie précédemment avec la commande suivante :

./easyrsa sign-req server demoserver.mustermann-domain.de

Enfin, les paramètres de Diffie-Hellman doivent également être créés, ce qui peut prendre un certain temps :

./easyrsa gen-dh

Une HMAC-signature est également nécessaire :

openvpn --genkey --secret ta.key

Cela peut également fournir une protection supplémentaire contre les attaques par déni de service (DoS).

Modifier les fichiers de configuration du serveur

Veuillez modifier le fichier /etc/openvpn/server.conf par exemple à l’aide de l’éditeur de texte et ajoutez le contenu suivant :

port 1194
proto udp
dev tun
ca /etc/openvpn/easy-rsa/pki/ca.crt
cert /etc/openvpn/easy-rsa/pki/issued/demoserver.mustermann-domain.de.crt
key /etc/openvpn/easy-rsa/pki/private/demoserver.mustermann-domain.de.key
dh /etc/openvpn/easy-rsa/pki/dh.pem
server 10.8.0.0 255.255.255.0
server-ipv6 fd8f:d4dc:abcd::/64
keepalive 10 120
tls-auth /etc/openvpn/easy-rsa/ta.key 0
user nobody
group nogroup
ifconfig-pool-persist ipp.txt
persist-key
persist-tun
status      /var/log/openvpn/openvpn-status.log
log         /var/log/openvpn/openvpn.log
log-append  /var/log/openvpn/openvpn.log
verb 3
cipher AES-256-CBC
explicit-exit-notify 1

Démarrez ensuite le serveur avec :

systemctl start openvpn@server

Vérifiez l’état du serveur avec :

systemctl status openvpn@server

Activez l’autostart du serveur :

systemctl enable openvpn@server

Accès Internet pour les clients via le tunnel VPN et NAT avec le serveur en tant que passerelle

Bien sûr, vous pouvez utiliser le tunnel VPN uniquement pour la communication entre le client et le serveur, ainsi qu’entre les clients eux-mêmes. Cependant, vous souhaitez souvent également tunneliser l’intégralité du trafic Internet des clients via le VPN. Cela est particulièrement intéressant pour les appareils mobiles professionnels qui peuvent souvent se trouver dans des réseaux Wi-Fi non protégés, par exemple dans des hôtels ou chez des clients. Vous pouvez configurer une “Translation de l’adresse réseau” (NAT) sur le serveur, permettant aux appareils du VPN d’utiliser les adresses IP du serveur.

Modifiez le fichier /etc/sysctl.conf et ajoutez les lignes suivantes :

net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1

ou, s’il existe déjà une ligne commentée, retirez le # pour activer cette option. Pour que la configuration soit active, exécutez la commande

sudo sysctl -p /etc/sysctl.conf

Pour configurer une Translation de l’adresse réseau (NAT), procédez comme suit. À partir de Debian Buster, nftables est utilisé par défaut au lieu de iptables pour configurer le pare-feu. Si nftables n’est pas installé, veuillez d’abord l’installer avec :

sudo -s
apt install nftables
systemctl enable nftables.service

Créez maintenant les règles NAT correspondantes en ajoutant les lignes suivantes dans le fichier /etc/nftables.conf :

table ip nat {
        chain postrouting {
                type nat hook postrouting priority 100; policy accept;
                ip saddr 10.8.0.0/24 oif "eth0" snat to <IPV4_IP_DES_SERVERS>
        }
}

table ip6 nat {
        chain postrouting {
                type nat hook postrouting priority 100; policy accept;
                ip6 saddr fd8f:d4dc:abcd::/64  oif "eth0" snat to <IPV6_IP_DES_SERVERS>
        }
}

Remplacez <IPV4_IP_DES_SERVERS> par l’adresse IPv4 publique de votre serveur et <IPV6_IP_DES_SERVERS> par l’adresse IPv6 publique de votre serveur. L’identifiant de l’interface eth0 doit éventuellement être adapté à l’identifiant réel de l’interface sur laquelle les adresses IP publiques sont configurées. Vous pouvez découvrir laquelle c’est avec ifconfig. Pour activer les nouvelles règles, exécutez la commande suivante avec des droits root :

nft -f /etc/nftables.conf

Des lignes supplémentaires doivent être ajoutées au fichier de configuration du serveur OpenVPN pour acheminer tout le trafic des clients VPN via le tunnel VPN :

push "redirect-gateway def1 bypass-dhcp"
push "redirect-gateway ipv6"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
push "dhcp-option DNS 2620:119:35::35"
push "dhcp-option DNS 2620:119:53::53"

Ici, les serveurs DNS de OpenDNS sont utilisés. Alternativement, vous pouvez également utiliser les serveurs DNS du centre de données hosting.fr 95.129.51.51 et 80.244.244.244.

Préparation à la création de certificats clients

Pour ne pas avoir à copier plusieurs fichiers vers le client, il est judicieux de regrouper toutes les données nécessaires dans un fichier. Cela peut être réalisé avec un fichier .ovpn. Pour créer le fichier, vous pouvez utiliser le script suivant. Veuillez sauvegarder les lignes suivantes dans le fichier /etc/openvpn/easy-rsa/new-client.sh. Utilisez un éditeur de texte pour cela. Veuillez ajuster le nom d’hôte demoserver.mustermann-domain.de pour qu’il corresponde à votre serveur dans le script.

#!/bin/bash

## ici paramètres à définir

SERVER="demoserver.mustermann-domain.de"

## ne rien changer à partir d'ici

cat_file() {
  if [ -f "$1" ]; then
    cat $1
  else
    >&2 echo "Erreur : $1 n'existe pas."
  fi
}

if [ $# -eq 0 ]
  then
    >&2 echo "Veuillez indiquer un nom de client."
  else

# Créez les certificats et clés

./easyrsa gen-req "$1" nopass   # Créez une demande
./easyrsa sign-req client "$1"  # Signez la demande

systemctl restart openvpn@server

# Créez le fichier ovpn

cat - > "$1".ovpn <<EOF
client
dev tun
proto udp
remote $SERVER 1194
resolv-retry infinite
nobind
persist-key
persist-tun
<ca>
$(cat_file pki/ca.crt)
</ca>
<cert>
$(cat_file pki/issued/"$1".crt)
</cert>
<key>
$(cat_file pki/private/"$1".key)
</key>
remote-cert-tls server
<tls-auth>
$(cat_file ta.key)
</tls-auth>
key-direction 1
cipher AES-256-CBC
verb 3
EOF

chmod 600 "$1".ovpn

fi

Rendez ensuite le fichier exécutable sur le serveur avec :

chmod +x /etc/openvpn/easy-rsa/build-ovpn.sh

Création de certificats clients

Sur le serveur, le script new-client.sh que nous avons créé précédemment peut être utilisé pour créer les clés et certificats, ainsi que le fichier .ovpn nécessaire.

Pour créer un nouveau client, par exemple appelé mustermann-windows, vous pouvez procéder comme suit :

cd /etc/openvpn/easy-rsa
./new-client.sh mustermann-windows

Le script posera quelques questions. Veuillez confirmer avec yes si nécessaire et entrez la passphrase que vous avez déjà définie lorsque l’on vous le demande.

Dans notre exemple, le script générera le fichier mustermann-windows.ovpn, qui est requis par le client.

La clé et le certificat pour le client peuvent être créés directement sur le serveur et ensuite copiés via un canal sécurisé, par exemple SFTP, vers le client.

Configuration du client

Dans cette section, nous expliquerons comment le client OpenVPN peut être configuré.

Windows

Le client OpenVPN doit être installé, et peut être téléchargé depuis le site officiel d’OpenVPN.

Veuillez copier le fichier ovpn sur le client via une connexion sécurisée. À cette fin, par exemple, WinSCP peut être utilisé. Ensuite, veuillez lancer le programme “OpenVPN GUI”. Vous pouvez alors cliquer avec le bouton droit de la souris sur l’icône correspondante dans la barre des tâches et sélectionner “Importer un fichier…”:

Logo OpenVPN

Sélectionnez le fichier ovpn précédemment importé et importez-le. Après l’importation, vous pouvez dans le même menu choisir l’option “Connecter” :

Logo OpenVPN

S’ouvre alors brièvement une fenêtre avec des informations détaillées :

Logo OpenVPN

Si la connexion a réussi, la fenêtre disparaît et un message court apparaît, indiquant que la connexion a été établie avec succès :

Logo OpenVPN

Si la connexion n’a pas réussi, la fenêtre avec les informations sur l’état ou les sorties du log reste ouverte, ce qui vous permet d’effectuer directement un dépannage. Après l’établissement de la connexion, vous pouvez par exemple pinger l’IP de l’appareil à partir du serveur ou vérifier que le client navigue sur Internet avec l’adresse IP du serveur, si le NAT a été configuré précédemment.

Linux

Nous allons montrer ici un exemple de configuration d’un client avec Debian Linux en version 10. Installez d’abord OpenVPN avec les commandes suivantes :

sudo apt update 
sudo apt install openvpn

Créez le fichier ovpn pour le nouveau client Linux sur le serveur comme décrit ci-dessus. Puis copiez le fichier, par exemple, avec :

scp root@demoserver.mustermann-domain.de:/etc/openvpn/easy-rsa/mustermann-linux.ovpn .

déplacez le fichier sur votre machine vers /etc/openvpn/client/client.conf et assurez-vous que le fichier possède les autorisations d’accès adéquates :

sudo mv mustermann-linux.ovpn /etc/openvpn/client/client.conf
sudo chmod 600 /etc/openvpn/client/client.conf

Pour que les options DNS du serveur soient également appliquées automatiquement sur le client Linux, un travail supplémentaire est nécessaire. Cette étape n’est nécessaire que si vous souhaitez acheminer tout le trafic des clients via le serveur.

Veuillez installer le paquet openresolv :

sudo apt install openresolv

et ajoutez les lignes suivantes au fichier /etc/openvpn/client/client.conf sous Debian :

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

(Sur d’autres distributions Linux, il peut être nécessaire de remplacer “update-resolv-conf” par “update-resolv-conf.sh”.)

Démarrez ensuite le client OpenVPN :

sudo systemctl start openvpn-client@client.service

Avec la commande

sudo systemctl status openvpn-client@client.service

vous pouvez afficher l’état actuel du client. Si la sortie contient “Active: active (running)”, alors le client fonctionne. Vous pouvez alors, par exemple, pinger l’IP de l’appareil à partir du serveur ou, si le NAT a été configuré précédemment, vérifier que le client utilise l’adresse IP du serveur pour naviguer sur Internet.

Si vous souhaitez que le client OpenVPN établisse une connexion automatiquement au démarrage de l’ordinateur, exécutez la commande suivante :

sudo systemctl enable openvpn-client@client.service

Android

Veuillez copier le fichier ovpn que vous avez créé sur le serveur sur l’appareil. Cela peut se faire par exemple par câble USB, à l’aide d’un client SSH, ou également via un fichier ZIP chiffré dans un Nextcloud.

Installez l’application OpenVPN depuis le Google Playstore. Après le démarrage de l’application OpenVPN, vous verrez la vue suivante :

OpenVPN sous Android

Cliquez alors sur le symbole “+” pour définir un nouveau profil VPN :

OpenVPN sous Android

Sélectionnez ensuite le fichier ovpn sur votre téléphone. Un protocole d’importation apparaîtra :

OpenVPN sous Android

Cliquez sur la disquette pour enregistrer le nouveau profil. Si nécessaire, vous pouvez modifier le nom du profil au préalable. Le profil apparaîtra alors dans la liste des profils existants. Lorsque vous cliquez sur le profil, la connexion au serveur OpenVPN sera établie :

OpenVPN sous Android

Si vous revenez à l’aperçu, le statut de la connexion sera affiché :

OpenVPN sous Android

Vérifiez la connexion en pingant, par exemple, l’adresse IP du téléphone ou en vous rendant sur https://www.whatsmyip.org/ pour vérifier si l’adresse IP du serveur s’affiche à partir de votre smartphone et si le NAT fonctionne correctement.

iOS

Veuillez installer l’application “OpenVPN Connect” depuis l’AppStore. Utilisez l’option “Importer un profil” et choisissez ensuite le fichier *.ovpn que vous avez précédemment transféré sur votre téléphone par un moyen le plus sécurisé possible, par exemple par USB ou Nextcloud :

OpenVPN sous iOS

Après avoir sélectionné le fichier *.ovpn, un aperçu apparaîtra. Veuillez cliquer sur “AJOUTER” :

OpenVPN sous iOS

Une fois le profil importé avec succès, le message suivant apparaîtra :

OpenVPN sous iOS

Cliquez ici sur “AJOUTER”. Le profil est maintenant importé et peut être activé avec le curseur :

OpenVPN sous iOS

Ensuite, iOS posera la question de savoir si OpenVPN peut agir en tant que fournisseur VPN :

OpenVPN sous iOS

Si la connexion est établie avec succès, le message “CONNECTÉ” apparaîtra :

OpenVPN sous iOS

Si des problèmes surviennent lors de la connexion, vous pouvez consulter le journal via la section correspondante en haut à droite :

OpenVPN sous iOS

Vérifiez la connexion en pingant, par exemple, l’adresse IP du téléphone ou en visitant https://www.whatsmyip.org/ pour voir si l’adresse IP du serveur est affichée à partir de votre iPhone et si le NAT fonctionne correctement.

Références

N'hésitez pas à vous inscrire à notre newsletter



Nous vous remercions de votre inscription à la newsletter hosting.fr.
Détails du contrat OpenVPN Accord de traitement des données RGPD DP