Comment configurer et configurer un serveur OpenVPN sur CentOS 7

introduction

Un Virtual Private Network (VPN) vous permet de parcourir des réseaux non approuvés 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 lorsque vous êtes connecté à un réseau non sécurisé, comme le WiFi d’un hôtel ou d’un café.

Lorsqu’elle est associée aux HTTPS connections, 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é.

https://openvpn.net [OpenVPN] est une solution VPN SSL (Secure Socket Layer) à code source ouvert et à sources complètes, qui prend en charge 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 à partir d’un ordinateur client.

Conditions préalables

Pour suivre ce tutoriel, vous aurez besoin de:

Avec ces conditions préalables en place, vous êtes prêt à commencer à configurer et à configurer un serveur OpenVPN sur CentOS 7.

Étape 1 - Installer 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 à configurer une autorité de certification interne à utiliser avec notre réseau privé virtuel. Nous utiliserons également Easy RSA pour générer nos paires de clés SSL ultérieurement afin de sécuriser les connexions VPN.

Connectez-vous au serveur en tant qu’utilisateur sudo non root et mettez à jour les listes de paquetages pour vous assurer que vous disposez des dernières versions.

sudo yum update -y

Le référentiel EPEL (Extra Packages) pour Enterprise Linux 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

Puis mettez à jour vos listes de paquets 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

En utilisant + wget +, téléchargez Easy RSA. Pour les besoins de ce didacticiel, nous vous recommandons d’utiliser easy-RSA-2 car la documentation disponible pour cette version est plus étendue. 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/.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- +. 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-/easy-rsa//* /etc/openvpn/easy-rsa

Puis changez le propriétaire du répertoire en votre utilisateur sudo non-root:

sudo chown  /etc/openvpn/easy-rsa/

Une fois ces programmes installés et déplacés aux emplacements appropriés sur votre système, l’étape suivante consiste à personnaliser la configuration côté serveur d’OpenVPN.

Étape 2 - Configuration d’OpenVPN

À l’instar de nombreux autres outils Open Source largement utilisés, de nombreuses options de configuration sont à votre disposition. Dans cette section, nous expliquerons comment configurer une configuration de serveur OpenVPN de base.

OpenVPN a plusieurs exemples de fichiers de configuration dans son répertoire de documentation. Commencez par copier le fichier exemple + server.conf + en tant que point de départ pour votre propre fichier de configuration.

sudo cp /usr/share/doc/openvpn-/sample/sample-config-files/server.conf /etc/openvpn

Ouvrez le nouveau fichier pour le modifier avec l’éditeur de texte de votre choix. Nous allons utiliser 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 à modifier dans ce fichier, dont la plupart doivent simplement être supprimées en supprimant le point-virgule «+; +» au début de la ligne. Les fonctions de ces lignes, ainsi que les autres lignes non mentionnées dans ce didacticiel, sont expliquées en détail dans les commentaires ci-dessus.

Pour commencer, trouvez et décommentez la ligne contenant + push" redirect-gateway def1 bypass-dhcp "+. Cela fera dire à 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"

Comme votre client ne pourra pas utiliser les serveurs DNS par défaut fournis par votre fournisseur de services Internet (son trafic sera réacheminé), vous devez lui indiquer les serveurs DNS qu’il peut utiliser pour se connecter à OpenVPN. Vous pouvez choisir différents serveurs DNS, mais nous utiliserons ici les serveurs DNS publics de Google, qui ont les adresses IP «+ 8.8.8.8 » et « 8.8.4.4 +».

Définissez-le en supprimant la mise en commentaire des deux lignes `+ push" DNS dhcp-option …​ "et en mettant à jour les adresses IP:

/etc/openvpn/server.conf

push "dhcp-option DNS "
push "dhcp-option DNS "

Nous voulons que OpenVPN s’exécute sans privilèges une fois qu’il a démarré. Nous devons donc lui dire de fonctionner avec un utilisateur et un groupe de * nobody *. Pour cela, décommentez les lignes + utilisateur nobody + et + groupe 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 à l’ordinateur client 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 clients entrants proviennent réellement d’un client, en renforçant les paramètres de sécurité que nous établirons dans les étapes suivantes:

/etc/openvpn/server.conf

remote-cert-eku "TLS Web Client Authentication"

Enfin, OpenVPN recommande vivement aux utilisateurs d’activer l’authentification TLS, un protocole cryptographique assurant des communications sécurisées sur un réseau informatique. Pour ce faire, vous devez générer une clé de chiffrement statique (nommée dans notre exemple par + .tlsauth +, bien que vous puissiez choisir le nom de votre choix). Avant de créer cette clé, commentez la ligne dans le fichier de configuration contenant + tls-auth ta.key 0 + en l’ajoutant au point-virgule. Ajoutez ensuite + tls-crypt .tlsauth + à la ligne située en dessous:

/etc/openvpn/server.conf

tls-auth ta.key 0
tls-crypt .tlsauth

Enregistrez et quittez le fichier de configuration du serveur OpenVPN (sous nano, appuyez sur + CTRL - X +, + Y + , puis + ENTER + `pour le faire), puis générez la clé de cryptage statique à l’aide de la commande suivante:

sudo openvpn --genkey --secret /etc/openvpn/.tlsauth

Maintenant que votre serveur est configuré, vous pouvez passer à la configuration des clés SSL et des certificats nécessaires pour vous connecter de manière sécurisée à votre connexion VPN.

Étape 3 - Générer des clés et des certificats

Easy RSA utilise un ensemble de scripts fournis avec le programme pour générer des clés et des certificats. Pour éviter de reconfigurer chaque fois que vous devez générer un certificat, vous pouvez modifier la configuration de Easy RSA pour définir les valeurs par défaut à utiliser pour les champs de certificat, y compris votre pays, votre ville et votre adresse électronique préférée.

Nous allons commencer 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

Les variables de certificat par défaut sont définies dans le fichier + var dans` + / etc / openvpn / easy-rsa`, aussi ouvrez 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 qui se résout sur votre serveur.

  • + KEY_NAME +: Vous devez entrer + serveur + ici. Si vous entrez autre chose, vous devrez également mettre à jour les fichiers de configuration qui font référence à + ​​server.key + et + server.crt +.

Les autres variables de ce fichier que vous pouvez modifier sont les suivantes:

  • + KEY_COUNTRY +: Pour cette variable, entrez l’abréviation à deux lettres du pays de votre résidence.

  • + KEY_PROVINCE +: Cela devrait être le nom ou l’abréviation de l’état de votre résidence.

  • + KEY_CITY +: Ici, entrez le nom de la ville dans laquelle vous vivez.

  • + KEY_ORG +: Cela devrait être le nom de votre organisation ou entreprise.

  • + KEY_EMAIL +: Entrez l’adresse e-mail que vous souhaitez connecter au certificat de sécurité.

  • + KEY_OU +: Cela devrait être le nom de «l’unité organisationnelle» à laquelle vous appartenez, généralement le nom de votre service ou de votre équipe.

Les autres variables peuvent être ignorées en toute sécurité en dehors de cas d’utilisation spécifiques. Une fois vos modifications apporté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=""
export KEY_PROVINCE=""
export KEY_CITY=""
export KEY_ORG=""
export KEY_EMAIL=""
export KEY_EMAIL=
export KEY_CN=
export KEY_NAME=""
export KEY_OU=""
. . .

Enregistrez et fermez le fichier.

Pour commencer à générer les clés et les certificats, accédez au 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 + de 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 suivante:

./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 paramètres par défaut pour chacun d’eux:

./build-ca

Ce script génère un fichier appelé + ca.key +. C’est la clé privée utilisée pour signer votre serveur et les certificats des clients. S’il est perdu, vous ne pouvez plus faire confiance aux certificats de cette autorité de certification et, si quelqu’un peut 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 autant que possible hors ligne, et ne doit être activé que lors de la création de nouveaux certificats.

Ensuite, créez une clé et un certificat pour le serveur en utilisant le script + build-key-server +:

./build-key-server server

Comme lors de la création de l’AC, les valeurs que vous avez définies sont définies par défaut. Vous pouvez ainsi appuyer sur les touches "+ ENTRÉE " à ces invites. En outre, vous serez invité à saisir un mot de passe de challenge et un nom de société facultatif. Si vous entrez un mot de passe de 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 challenge, 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 génère un fichier d’échange de clés Diffie-Hellman. Utilisez le script + build-dh + pour faire ceci:

./build-dh

Cela peut prendre quelques minutes à compléter.

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 pouvoir être authentifié par le serveur OpenVPN. 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 souhaitez 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 souhaitez:

cd /etc/openvpn/easy-rsa
./build-key

Enfin, copiez le fichier de configuration OpenSSL versionné, + openssl-1.0.0.cnf +, dans un nom sans version, + openssl.cnf +. Sinon, vous risquez de rencontrer 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 ordinateurs.

É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 à votre client pour accéder au VPN. Cependant, vous n’avez pas encore fourni à OpenVPN d’instructions sur l’endroit où envoyer le trafic Web entrant à partir des clients. Vous pouvez spécifier 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 conditions préalables au début de ce tutoriel, vous devriez déjà avoir installé firewalld sur votre serveur. Pour autoriser OpenVPN à traverser le pare-feu, vous devez connaître la zone active de votre pare-feu. Trouvez ceci avec la commande suivante:

sudo firewall-cmd --get-active-zones
Outputtrusted
 Interfaces: tun0

Ajoutez ensuite le service + openvpn + à la liste des services autorisés par firewalld dans votre zone active, puis rendez ce paramètre permanent en exécutant la commande à nouveau, en ajoutant l’option + - permanent +:

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

Ajoutez ensuite un masquage à l’instance d’exécution en cours, puis ajoutez-le à nouveau avec l’option + - permanent + pour ajouter le masquage à toutes les instances futures:

sudo firewall-cmd --add-masquerade
sudo firewall-cmd --permanent --add-masquerade

Vous pouvez vérifier que le masquage 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 (++ 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:

=$(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 $ -j MASQUERADE

Veillez à implémenter ces modifications dans 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 le modifier:

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émarrer OpenVPN

OpenVPN est géré en tant que service systemd en utilisant + systemctl +. Nous allons configurer 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]

Puis démarrez le service OpenVPN:

sudo systemctl start [email protected]

Vérifiez que le service OpenVPN est actif avec la commande suivante. Vous devriez voir + actif (en cours d’exécution) + dans le résultat:

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 ordinateur client et vous connecter au serveur OpenVPN.

Étape 6 - Configuration d’un client

Quel que soit le système d’exploitation de votre ordinateur client, une copie du certificat de l’autorité de certification, de la clé client et du certificat généré à l’étape 3, ainsi que la clé de cryptage statique générée à la fin de l’étape 2, seront sauvegardés localement.

Localisez les fichiers suivants * sur votre serveur *. Si vous avez généré plusieurs clés de client avec des noms descriptifs uniques, les noms de clé et de certificat seront différents. Dans cet article, nous avons utilisé ++.

/etc/openvpn/easy-rsa/keys/ca.crt
/etc/openvpn/easy-rsa/keys/.crt
/etc/openvpn/easy-rsa/keys/.key
/etc/openvpn/.tlsauth

Copiez ces fichiers sur votre * machine cliente *. 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 / coller le contenu dans de nouveaux fichiers sur votre ordinateur client. Quelle que soit la méthode utilisée, assurez-vous de noter où vous enregistrez ces fichiers.

Ensuite, créez un fichier nommé + client.ovpn + * sur votre ordinateur client *. Ceci est 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 commentées ou ajoutées au fichier + server.conf +, ou y étions déjà par défaut:

client.ovpn

tls-client
ca ca.crt
cert .crt
key .key
tls-crypt tlsauth
remote-cert-eku "TLS Web Client Authentication"
proto udp
remote  1194 udp
dev tun
topology subnet
pull
user nobody
group nobody

Lorsque vous ajoutez ces lignes, veuillez noter les points suivants:

  • 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, ceci est juste ++

  • Vous devez également mettre à jour l’adresse IP de ++ vers l’adresse IP de votre serveur. le port + 1194 + peut rester le même

  • Assurez-vous que les chemins d’accès à votre clé et aux fichiers 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 à votre système d’exploitation pour la connexion de votre client:

Les fenêtres:

Sous Windows, vous aurez besoin des binaires officiels OpenVPN Community Edition, fournis avec une interface graphique. Placez votre fichier de configuration + .ovpn + dans le répertoire approprié, + C: \ Program Files \ OpenVPN \ config +, puis cliquez sur * Connect * dans l’interface graphique. L’interface graphique OpenVPN sous Windows doit être exécutée avec des privilèges d’administrateur.

  • macOS: *

Sur macOS, l’application open source Tunnelblick fournit une interface similaire à l’interface graphique OpenVPN de Windows et est fournie avec OpenVPN et les pilotes TUN / TAP requis. Comme avec Windows, la seule étape requise consiste à placer votre fichier de configuration + .ovpn + dans le répertoire + ~ / Bibliothèque / Application Support / Tunnelblick / Configurations +. Vous pouvez également double-cliquer sur votre fichier + .ovpn +.

  • Linux: *

Sous Linux, vous devez installer OpenVPN à partir des référentiels officiels de votre distribution. Vous pouvez ensuite appeler OpenVPN en exécutant:

sudo openvpn --config

Après avoir établi une connexion client réussie, vous pouvez vérifier que votre trafic est en cours d’acheminement via le réseau VPN en contrôler Google afin de révéler votre adresse IP publique. .

Conclusion

Vous devriez maintenant avoir un réseau privé virtuel pleinement opérationnel s’exécutant sur votre serveur OpenVPN. Vous pouvez naviguer sur le Web et télécharger du contenu sans vous soucier des acteurs malveillants surveillant votre activité.

Plusieurs étapes peuvent être suivies pour personnaliser votre installation OpenVPN, par exemple configurer votre client pour qu’il se connecte automatiquement au VPN ou configurer des règles et des stratégies d’accès spécifiques au client. Pour ces personnalisations et d’autres OpenVPN, vous devez consulter la documentation officielle OpenVPN. Si vous êtes intéressé par d’autres moyens de vous protéger et de protéger vos machines sur Internet, consultez notre article sur https://www.digitalocean.com/community/tutorials/7-security-measures-to-protect-your- serveurs [7 Mesures de sécurité pour protéger vos serveurs].