Comment installer et configurer un serveur OpenVPN sur CentOS 7
Introduction
Un réseau privé virtuel (VPN) vous permet de traverser des réseaux non fiables comme si vous étiez sur un réseau privé. Il vous donne la liberté d'accéder à Internet en toute sécurité depuis votre smartphone ou votre ordinateur portable lorsqu'il est connecté à un réseau non fiable, comme le WiFi d'un hôtel ou d'un café.
Lorsqu'elle est combinée avec les connexions HTTPS, cette configuration vous permet de sécuriser vos connexions et transactions sans fil. Vous pouvez contourner les restrictions géographiques et la censure, et protéger votre emplacement et tout trafic HTTP non chiffré du réseau non approuvé.
OpenVPN est une solution VPN SSL (Secure Socket Layer) open source complète qui s'adapte à un large éventail de configurations. Dans ce didacticiel, vous allez configurer OpenVPN sur un serveur CentOS 7, puis le configurer pour qu'il soit accessible depuis une machine cliente.
Remarque : Si vous envisagez de configurer un serveur OpenVPN sur un droplet DigitalOcean, sachez que, comme de nombreux hébergeurs, nous facturons les dépassements de bande passante. Pour cette raison, soyez attentif au volume de trafic que votre serveur gère.
Voir cette page pour plus d'informations.
Conditions préalables
Pour suivre ce tutoriel, vous aurez besoin de :
- Un serveur CentOS 7 avec un utilisateur sudo non root et un pare-feu configuré avec firewalld, que vous pouvez réaliser avec notre guide Configuration initiale du serveur avec CentOS 7 et le Étapes supplémentaires recommandées pour le nouveau CentOS 7 Serveurs.
- Un domaine ou un sous-domaine qui correspond à votre serveur que vous pouvez utiliser pour les certificats. Pour configurer cela, vous devrez d'abord enregistrer un nom de domaine , puis ajouter un enregistrement DNS via le panneau de configuration DigitalOcean . Notez que le simple fait d'ajouter un enregistrement A répondra aux exigences de ce didacticiel.
- Une machine cliente que vous utiliserez pour vous connecter à votre serveur OpenVPN. Pour les besoins de ce didacticiel, il est recommandé d'utiliser votre machine locale comme client OpenVPN.
Une fois ces prérequis en place, vous êtes prêt à commencer à installer et à configurer un serveur OpenVPN sur CentOS 7.
Étape 1 - Installation d'OpenVPN
Pour commencer, nous allons installer OpenVPN sur le serveur. Nous installerons également Easy RSA, un outil de gestion d'infrastructure à clé publique qui nous aidera à mettre en place une autorité de certification (CA) interne à utiliser avec notre VPN. Nous utiliserons également Easy RSA pour générer ultérieurement nos paires de clés SSL afin de sécuriser les connexions VPN.
Connectez-vous au serveur en tant qu'utilisateur sudo non root et mettez à jour les listes de packages pour vous assurer que vous disposez de toutes les dernières versions.
sudo yum update -y
Le référentiel Extra Packages for Enterprise Linux (EPEL) est un référentiel supplémentaire géré par le projet Fedora contenant des packages non standard mais populaires. OpenVPN n'est pas disponible dans les référentiels CentOS par défaut, mais il est disponible dans EPEL, installez donc EPEL :
sudo yum install epel-release -y
Ensuite, mettez à jour vos listes de packages une fois de plus :
sudo yum update -y
Ensuite, installez OpenVPN et wget
, que nous utiliserons pour installer Easy RSA :
sudo yum install -y openvpn wget
À l'aide de wget
, téléchargez Easy RSA. Pour les besoins de ce didacticiel, nous vous recommandons d'utiliser easy-rsa-2 car il existe plus de documentation disponible pour cette version. Vous pouvez trouver le lien de téléchargement de la dernière version d'easy-rsa-2 sur la page Releases du projet :
wget -O /tmp/easyrsa https://github.com/OpenVPN/easy-rsa-old/archive/2.3.3.tar.gz
Ensuite, extrayez le fichier compressé avec tar
:
tar xfz /tmp/easyrsa
Cela créera un nouveau répertoire sur votre serveur appelé easy-rsa-old-2.3.3
. Créez un nouveau sous-répertoire sous /etc/openvpn
et nommez-le easy-rsa
:
sudo mkdir /etc/openvpn/easy-rsa
Copiez les fichiers Easy RSA extraits dans le nouveau répertoire :
sudo cp -rf easy-rsa-old-2.3.3/easy-rsa/2.0/* /etc/openvpn/easy-rsa
Changez ensuite le propriétaire du répertoire en votre utilisateur sudo non root :
sudo chown sammy /etc/openvpn/easy-rsa/
Une fois ces programmes installés et déplacés vers les bons emplacements sur votre système, l'étape suivante consiste à personnaliser la configuration côté serveur d'OpenVPN.
Étape 2 - Configuration d'OpenVPN
Comme de nombreux autres outils open source largement utilisés, des dizaines d'options de configuration sont à votre disposition. Dans cette section, nous fournirons des instructions sur la façon de configurer une configuration de serveur OpenVPN de base.
OpenVPN a plusieurs exemples de fichiers de configuration dans son répertoire de documentation. Tout d'abord, copiez l'exemple de fichier server.conf
comme point de départ pour votre propre fichier de configuration.
sudo cp /usr/share/doc/openvpn-2.4.4/sample/sample-config-files/server.conf /etc/openvpn
Ouvrez le nouveau fichier pour le modifier avec l'éditeur de texte de votre choix. Nous utiliserons nano dans notre exemple, que vous pouvez télécharger avec la commande yum install nano
si vous ne l'avez pas déjà sur votre serveur :
sudo nano /etc/openvpn/server.conf
Il y a quelques lignes que nous devons changer dans ce fichier, dont la plupart doivent simplement être décommentées en supprimant le point-virgule, ;
, au début de la ligne. Les fonctions de ces lignes, et des autres lignes non mentionnées dans ce didacticiel, sont expliquées en détail dans les commentaires au-dessus de chacune.
Pour commencer, recherchez et décommentez la ligne contenant push "redirect-gateway def1 bypass-dhcp"
. Cela indiquera à votre client de rediriger tout son trafic via votre serveur OpenVPN. Sachez que l'activation de cette fonctionnalité peut entraîner des problèmes de connectivité avec d'autres services réseau, tels que SSH :
/etc/openvpn/server.conf
push "redirect-gateway def1 bypass-dhcp"
Étant donné que votre client ne pourra pas utiliser les serveurs DNS par défaut fournis par votre FAI (car son trafic sera redirigé), vous devez lui indiquer quels serveurs DNS il peut utiliser pour se connecter à OpenVPN. Vous pouvez choisir différents serveurs DNS, mais ici nous utiliserons les serveurs DNS publics de Google qui ont les adresses IP de 8.8.8.8
et 8.8.4.4
.
Définissez ceci en décommentant les deux lignes push "dhcp-option DNS ..."
et en mettant à jour les adresses IP :
/etc/openvpn/server.conf
push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 8.8.4.4"
Nous voulons qu'OpenVPN s'exécute sans privilèges une fois qu'il a démarré, nous devons donc lui dire de s'exécuter avec un utilisateur et un groupe de nobody. Pour l'activer, décommentez les lignes user nobody
et group nobody
:
/etc/openvpn/server.conf
user nobody group nobody
Décommentez ensuite la ligne topology subnet
. Ceci, avec la ligne server 10.8.0.0 255.255.255.0
en dessous, configure votre installation OpenVPN pour qu'elle fonctionne comme un sous-réseau et indique à la machine cliente quelle adresse IP elle doit utiliser. Dans ce cas, le serveur deviendra 10.8.0.1
et le premier client deviendra 10.8.0.2
:
/etc/openvpn/server.conf
topology subnet
Il est également recommandé d'ajouter la ligne suivante au fichier de configuration de votre serveur. Cela vérifie que tous les certificats client entrants proviennent vraiment d'un client, ce qui renforce les paramètres de sécurité que nous établirons dans les étapes ultérieures :
/etc/openvpn/server.conf
remote-cert-eku "TLS Web Client Authentication"
Enfin, OpenVPN recommande fortement aux utilisateurs d'activer l'authentification TLS, un protocole cryptographique qui garantit des communications sécurisées sur un réseau informatique. Pour ce faire, vous devrez générer une clé de chiffrement statique (nommée dans notre exemple myvpn.tlsauth
, bien que vous puissiez choisir n'importe quel nom). Avant de créer cette clé, commentez la ligne du fichier de configuration contenant tls-auth ta.key 0
en la faisant précéder d'un point-virgule. Ensuite, ajoutez tls-crypt myvpn.tlsauth
à la ligne en dessous :
/etc/openvpn/server.conf
;tls-auth ta.key 0 tls-crypt myvpn.tlsauth
Enregistrez et quittez le fichier de configuration du serveur OpenVPN (dans nano, appuyez sur CTRL - X
, Y
, puis ENTER
pour le faire), puis générez la clé de chiffrement statique avec la commande suivante :
sudo openvpn --genkey --secret /etc/openvpn/myvpn.tlsauth
Maintenant que votre serveur est configuré, vous pouvez passer à la configuration des clés SSL et des certificats nécessaires pour vous connecter en toute sécurité à votre connexion VPN.
Étape 3 - Génération de clés et de certificats
Easy RSA utilise un ensemble de scripts installés avec le programme pour générer des clés et des certificats. Afin d'éviter de reconfigurer chaque fois que vous devez générer un certificat, vous pouvez modifier la configuration d'Easy RSA pour définir les valeurs par défaut qu'il utilisera pour les champs du certificat, y compris votre pays, votre ville et votre adresse e-mail préférée.
Nous commencerons notre processus de génération de clés et de certificats en créant un répertoire dans lequel Easy RSA stockera toutes les clés et tous les certificats que vous générez :
sudo mkdir /etc/openvpn/easy-rsa/keys
Les variables de certificat par défaut sont définies dans le fichier vars
dans /etc/openvpn/easy-rsa
. Ouvrez donc ce fichier pour le modifier :
sudo nano /etc/openvpn/easy-rsa/vars
Faites défiler vers le bas du fichier et modifiez les valeurs commençant par export KEY_
pour qu'elles correspondent à vos informations. Ceux qui comptent le plus sont :
KEY_CN
: ici, entrez le domaine ou le sous-domaine correspondant à votre serveur.KEY_NAME
: Vous devez entrerserver
ici. Si vous saisissez autre chose, vous devrez également mettre à jour les fichiers de configuration faisant référence àserver.key
etserver.crt
.
Les autres variables de ce fichier que vous voudrez peut-être modifier sont :
KEY_COUNTRY
: Pour cette variable, entrez l'abréviation à deux lettres du pays de votre résidence.KEY_PROVINCE
: il doit s'agir du nom ou de l'abréviation de l'État de votre résidence.KEY_CITY
: saisissez ici le nom de la ville dans laquelle vous habitez.KEY_ORG
: il doit s'agir du nom de votre organisation ou de votre entreprise.KEY_EMAIL
: saisissez l'adresse e-mail que vous souhaitez connecter au certificat de sécurité.KEY_OU
: il doit s'agir du nom de l'« unité organisationnelle » à laquelle vous appartenez, généralement le nom de votre service ou de votre équipe.
Le reste des variables peut être ignoré en toute sécurité en dehors de cas d'utilisation spécifiques. Une fois vos modifications effectuées, le fichier devrait ressembler à ceci :
/etc/openvpn/easy-rsa/vars
. . . # These are the default values for fields # which will be placed in the certificate. # Don't leave any of these fields blank. export KEY_COUNTRY="US" export KEY_PROVINCE="NY" export KEY_CITY="New York" export KEY_ORG="DigitalOcean" export KEY_EMAIL="[email protected]" export [email protected] export KEY_CN=openvpn.example.com export KEY_NAME="server" export KEY_OU="Community" . . .
Enregistrez et fermez le fichier.
Pour commencer à générer les clés et les certificats, déplacez-vous dans le répertoire easy-rsa
et source
dans les nouvelles variables que vous avez définies dans le fichier vars
:
cd /etc/openvpn/easy-rsa source ./vars
Exécutez le script clean-all
d'Easy RSA pour supprimer les clés et les certificats déjà présents dans le dossier et générer l'autorité de certification :
./clean-all
Ensuite, créez l'autorité de certification avec le script build-ca
. Vous serez invité à entrer des valeurs pour les champs de certificat, mais si vous définissez les variables dans le fichier vars
plus tôt, toutes vos options seront déjà définies comme valeurs par défaut. Vous pouvez appuyer sur ENTER
pour accepter les valeurs par défaut pour chacun :
./build-ca
Ce script génère un fichier nommé ca.key
. Il s'agit de la clé privée utilisée pour signer les certificats de votre serveur et de vos clients. S'il est perdu, vous ne pouvez plus faire confiance aux certificats de cette autorité de certification, et si quelqu'un est en mesure d'accéder à ce fichier, il peut signer de nouveaux certificats et accéder à votre VPN à votre insu. Pour cette raison, OpenVPN recommande de stocker ca.key
dans un emplacement qui peut être hors ligne autant que possible, et il ne doit être activé que lors de la création de nouveaux certificats.
Créez ensuite une clé et un certificat pour le serveur à l'aide du script build-key-server
:
./build-key-server server
Comme pour la construction de l'autorité de certification, vous verrez les valeurs que vous avez définies comme valeurs par défaut afin que vous puissiez appuyer sur ENTER
à ces invites. De plus, vous serez invité à entrer un mot de passe de défi et un nom d'entreprise facultatif. Si vous entrez un mot de passe challenge, il vous sera demandé lors de la connexion au VPN depuis votre client. Si vous ne souhaitez pas définir de mot de passe de défi, laissez simplement cette ligne vide et appuyez sur ENTER
. À la fin, entrez Y
pour valider les modifications.
La dernière partie de la création des clés de serveur et des certificats consiste à générer un fichier d'échange de clés Diffie-Hellman. Utilisez le script build-dh
pour cela :
./build-dh
Cela peut prendre quelques minutes.
Une fois que votre serveur a fini de générer le fichier d'échange de clés, copiez les clés et les certificats du serveur du répertoire keys
dans le répertoire openvpn
:
cd /etc/openvpn/easy-rsa/keys sudo cp dh2048.pem ca.crt server.crt server.key /etc/openvpn
Chaque client aura également besoin d'un certificat pour que le serveur OpenVPN l'authentifie. Ces clés et certificats seront créés sur le serveur et vous devrez ensuite les copier sur vos clients, ce que nous ferons dans une étape ultérieure. Il est conseillé de générer des clés et des certificats distincts pour chaque client que vous avez l'intention de connecter à votre VPN.
Comme nous n'allons configurer qu'un seul client ici, nous l'avons appelé client
, mais vous pouvez le remplacer par un nom plus descriptif si vous le souhaitez :
cd /etc/openvpn/easy-rsa ./build-key client
Enfin, copiez le fichier de configuration OpenSSL versionné, openssl-1.0.0.cnf
, sous un nom sans version, openssl.cnf
. Ne pas le faire pourrait entraîner une erreur où OpenSSL ne peut pas charger la configuration car il ne peut pas détecter sa version :
cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf
Maintenant que toutes les clés et tous les certificats nécessaires ont été générés pour votre serveur et votre client, vous pouvez passer à la configuration du routage entre les deux machines.
Étape 4 - Routage
Jusqu'à présent, vous avez installé OpenVPN sur votre serveur, l'avez configuré et généré les clés et les certificats nécessaires pour que votre client puisse accéder au VPN. Cependant, vous n'avez pas encore fourni à OpenVPN d'instructions sur l'endroit où envoyer le trafic Web entrant des clients. Vous pouvez stipuler comment le serveur doit gérer le trafic client en établissant des règles de pare-feu et des configurations de routage.
En supposant que vous ayez suivi les prérequis au début de ce didacticiel, vous devriez déjà avoir pare-feu installé et en cours d'exécution sur votre serveur. Pour autoriser OpenVPN à travers le pare-feu, vous devez savoir quelle est votre zone de pare-feu active. Trouvez ceci avec la commande suivante :
sudo firewall-cmd --get-active-zones
Outputtrusted Interfaces: tun0
Ensuite, ajoutez le service openvpn
à la liste des services autorisés par firewalld dans votre zone active, puis rendez ce paramètre permanent en exécutant à nouveau la commande mais avec l'option --permanent
ajoutée :
sudo firewall-cmd --zone=trusted --add-service openvpn sudo firewall-cmd --zone=trusted --add-service openvpn --permanent
Vous pouvez vérifier que le service a été ajouté correctement avec la commande suivante :
sudo firewall-cmd --list-services --zone=trusted
Outputopenvpn
Ensuite, ajoutez une mascarade à l'instance d'exécution actuelle, puis ajoutez-la à nouveau avec l'option --permanent
pour ajouter la mascarade à toutes les instances futures :
sudo firewall-cmd --add-masquerade sudo firewall-cmd --permanent --add-masquerade
Vous pouvez vérifier que le mascarade a été ajouté correctement avec cette commande :
sudo firewall-cmd --query-masquerade
Outputyes
Ensuite, transférez le routage vers votre sous-réseau OpenVPN. Vous pouvez le faire en créant d'abord une variable (SHARK
dans notre exemple) qui représentera l'interface réseau principale utilisée par votre serveur, puis en utilisant cette variable pour ajouter de manière permanente la règle de routage :
SHARK=$(ip route get 8.8.8.8 | awk 'NR==1 {print $(NF-2)}') sudo firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o $SHARK -j MASQUERADE
Assurez-vous d'appliquer ces modifications à vos règles de pare-feu en rechargeant firewalld :
sudo firewall-cmd --reload
Ensuite, activez le transfert IP. Cela acheminera tout le trafic Web de votre client vers l'adresse IP de votre serveur, et l'adresse IP publique de votre client sera effectivement masquée.
Ouvrez sysctl.conf
pour l'édition :
sudo nano /etc/sysctl.conf
Ajoutez ensuite la ligne suivante en haut du fichier :
/etc/sysctl.conf
net.ipv4.ip_forward = 1
Enfin, redémarrez le service réseau pour que le transfert IP prenne effet :
sudo systemctl restart network.service
Avec les règles de routage et de pare-feu en place, nous pouvons démarrer le service OpenVPN sur le serveur.
Étape 5 - Démarrage d'OpenVPN
OpenVPN est géré en tant que service systemd utilisant systemctl
. Nous configurerons OpenVPN pour qu'il démarre au démarrage afin que vous puissiez vous connecter à votre VPN à tout moment tant que votre serveur est en cours d'exécution. Pour ce faire, activez le serveur OpenVPN en l'ajoutant à systemctl
:
sudo systemctl -f enable [email protected]
Démarrez ensuite le service OpenVPN :
sudo systemctl start [email protected]
Vérifiez que le service OpenVPN est actif avec la commande suivante. Vous devriez voir active (running)
dans la sortie :
sudo systemctl status [email protected]
Output● [email protected] - OpenVPN Robust And Highly Flexible Tunneling Application On server Loaded: loaded (/usr/lib/systemd/system/[email protected]; enabled; vendor preset: disabled) Active: **active (running)** since Wed 2018-03-14 15:20:11 EDT; 7s ago Main PID: 2824 (openvpn) Status: "Initialization Sequence Completed" CGroup: /system.slice/system-openvpn.slice/[email protected] └─2824 /usr/sbin/openvpn --cd /etc/openvpn/ --config server.conf . . .
Nous avons maintenant terminé la configuration côté serveur pour OpenVPN. Ensuite, vous allez configurer votre machine cliente et vous connecter au serveur OpenVPN.
Étape 6 - Configuration d'un client
Quel que soit le système d'exploitation de votre ordinateur client, il aura besoin d'une copie enregistrée localement du certificat CA et de la clé client et du certificat générés à l'étape 3, ainsi que de la clé de chiffrement statique que vous avez générée à la fin de l'étape 2.
Localisez les fichiers suivants sur votre serveur . Si vous avez généré plusieurs clés client avec des noms descriptifs uniques, les noms de clé et de certificat seront différents. Dans cet article, nous avons utilisé client
.
/etc/openvpn/easy-rsa/keys/ca.crt /etc/openvpn/easy-rsa/keys/client.crt /etc/openvpn/easy-rsa/keys/client.key /etc/openvpn/myvpn.tlsauth
Copiez ces fichiers sur votre ordinateur client. Vous pouvez utiliser SFTP ou votre méthode préférée. Vous pouvez même simplement ouvrir les fichiers dans votre éditeur de texte et copier et coller le contenu dans de nouveaux fichiers sur votre ordinateur client. Quelle que soit la méthode que vous utilisez, assurez-vous de noter où vous enregistrez ces fichiers.
Ensuite, créez un fichier appelé client.ovpn
sur votre machine cliente. Il s'agit d'un fichier de configuration pour un client OpenVPN, lui indiquant comment se connecter au serveur :
sudo nano client.ovpn
Ajoutez ensuite les lignes suivantes à client.ovpn
. Notez que beaucoup de ces lignes reflètent celles que nous avons décommentées ou ajoutées au fichier server.conf
, ou qui y étaient déjà par défaut :
client.ovpn
client tls-client ca /path/to/ca.crt cert /path/to/client.crt key /path/to/client.key tls-crypt /path/to/myvpn.tlsauth remote-cert-eku "TLS Web Client Authentication" proto udp remote your_server_ip 1194 udp dev tun topology subnet pull user nobody group nobody
Lors de l'ajout de ces lignes, veuillez noter ce qui suit :
- Vous devrez modifier la première ligne pour refléter le nom que vous avez donné au client dans votre clé et votre certificat ; dans notre cas, c'est juste
client
- Vous devez également mettre à jour l'adresse IP de
your_server_ip
vers l'adresse IP de votre serveur ; le port1194
peut rester le même - Assurez-vous que les chemins d'accès à vos fichiers de clé et de certificat sont corrects
Ce fichier peut maintenant être utilisé par n'importe quel client OpenVPN pour se connecter à votre serveur. Vous trouverez ci-dessous des instructions spécifiques au système d'exploitation pour savoir comment connecter votre client :
Les fenêtres:
Sous Windows, vous aurez besoin des fichiers binaires officiels OpenVPN Community Edition qui sont fournis avec une interface graphique. Placez votre fichier de configuration .ovpn
dans le répertoire approprié, C:\Program Files\OpenVPN\config
, et cliquez sur Connect dans l'interface graphique. L'interface graphique OpenVPN sous Windows doit être exécutée avec des privilèges administratifs.
Mac OS :
Sur macOS, l'application open source Tunnelblick fournit une interface similaire à l'interface graphique OpenVPN sous Windows, et est livrée avec OpenVPN et les pilotes TUN/TAP requis. Comme avec Windows, la seule étape requise est de placer votre fichier de configuration .ovpn
dans le répertoire ~/Library/Application Support/Tunnelblick/Configurations
. Vous pouvez également double-cliquer sur votre fichier .ovpn
.
Linux :
Sous Linux, vous devez installer OpenVPN à partir des dépôts officiels de votre distribution. Vous pouvez ensuite invoquer OpenVPN en exécutant :
sudo openvpn --config ~/path/to/client.ovpn
Après avoir établi une connexion client réussie, vous pouvez vérifier que votre trafic est acheminé via le VPN en vérifiant Google pour révéler votre adresse IP publique.
Conclusion
Vous devriez maintenant avoir un réseau privé virtuel entièrement opérationnel fonctionnant sur votre serveur OpenVPN. Vous pouvez naviguer sur le Web et télécharger du contenu sans vous soucier des acteurs malveillants qui suivent votre activité.
Vous pouvez suivre plusieurs étapes pour personnaliser davantage votre installation OpenVPN, telles que la configuration de votre client pour qu'il se connecte automatiquement au VPN ou la configuration de règles et de politiques d'accès spécifiques au client. Pour ces personnalisations OpenVPN et d'autres, vous devez consulter la documentation officielle OpenVPN. Si vous êtes intéressé par d'autres moyens de vous protéger, vous et vos machines, sur Internet, consultez notre article sur 7 mesures de sécurité pour protéger vos serveurs.