Comment installer et configurer un serveur OpenVPN sur CentOS 7

De Get Docs
Aller à :navigation, rechercher

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 :

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 entrer server ici. Si vous saisissez autre chose, vous devrez également mettre à jour les fichiers de configuration faisant référence à server.key et server.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 port 1194 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.