Comment configurer un serveur OpenVPN sur Ubuntu 20.04

Guide ultime pour configurer un serveur OpenVPN sécurisé sur Ubuntu 20.04

Un réseau privé virtuel (VPN) vous permet de vous connecter de manière sécurisée et privée à un réseau privé distant, par exemple, votre réseau de bureau ou Internet de la même manière que si vous étiez directement connecté à un réseau privé.

VPN fonctionne dans une architecture serveur-client. Un serveur VPN est déployé sur une machine et est accessible publiquement sur Internet. Le serveur VPN peut être configuré pour autoriser la connexion à un réseau local privé, tel qu'un réseau de bureau, ou autoriser les connexions à Internet. L'utilisateur se connecte au serveur VPN à l'aide d'un client VPN sur sa machine locale. La communication entre le serveur VPN et le client s'effectue à l'aide d'un protocole de tunneling sécurisé. Pour Internet, il semble que la destination du trafic soit le serveur VPN ; cependant, le trafic passe au client via le serveur.

Le VPN a de nombreuses utilisations dans la vie quotidienne, comme la connexion sécurisée à un réseau Wifi public, qui est souvent compromis ou le contournement des restrictions géographiques sur certains sites Web en se connectant à un VPN basé dans un pays autorisé par le site Web.

OpenVPN est une implémentation VPN largement utilisée qui permet un large éventail de configurations et d'options. Il utilise le protocole Secure Sockets Layer (SSL) pour le cryptage des données et des clés pré-partagées, nom d'utilisateur/mot de passe ou certificats pour l'authentification du client VPN. Dans cet article, nous verrons comment configurer un serveur VPN et un client VPN sur Ubuntu 20.04.

Installation

OpenVPN est disponible dans les référentiels officiels Ubuntu dans le package openvpn. Ce package installe à la fois le serveur OpenVPN et le client.

sudo apt installer openvpn

Comme mentionné précédemment, OpenVPN utilise des certificats SSL pour crypter les données entre le serveur et le client. Nous devons configurer notre propre autorité de certification (CA) pour émettre des certificats pour le VPN. Notez que cela doit être configuré sur une machine différente de celle sur laquelle OpenVPN est configuré ; la raison en est que s'il se trouve sur le même serveur et s'il est compromis, un attaquant peut accéder à la clé privée et ainsi attaquer la connexion VPN.

Nous utiliserons un outil appelé « Easy-RSA » pour configurer l'autorité de certification. Pour l'installer, exécutez ce qui suit sur la machine CA, la machine serveur OpenVPN et la machine cliente, car la configuration est requise sur les trois pour configurer la CA.

sudo apt installer easy-rsa

Nous allons maintenant d'abord configurer l'autorité de certification sur la machine CA et effectuer certaines étapes de configuration requises pour la même chose sur la machine serveur Open VPN.

Configuration de l'autorité de certification

Configuration initiale sur la machine CA

Maintenant, ce paquet installe une commande appelée faire-cadir qui est utilisé pour créer un dossier pour la configuration de l'autorité de certification. Créons un dossier en utilisant ceci et entrons dans le dossier.

make-cadir cert_authority && cd cert_authority

Ouvrez le fichier appelé vars créé dans ce répertoire. Ce fichier contient des variables de configuration que nous devons modifier. Les valeurs à modifier se trouvent aux lignes 91-96, après le commentaire sur Champs organisationnels qui décrit ces champs. Décommentez les lignes et remplissez les valeurs appropriées à la place des exemples de valeurs.

Enregistrez et quittez le fichier. Si vous utilisez l'éditeur vim, appuyez sur Esc, taper :wq et appuyez sur Entrer pour enregistrer et quitter.

Ensuite, nous exécutons le easyrsa programme dans l'annuaire pour configurer l'infrastructure à clé publique (PKI), qui sera utilisée pour générer la clé publique et les certificats.

./easyrsa init-pki

L'étape suivante générera la clé CA et le certificat. Lorsque la commande vous demande un mot de passe, entrez un mot de passe pour la clé CA. Saisissez également un nom commun lorsque vous y êtes invité. Si vous laissez ce champ vide, le nom par défaut Easy-RSA CA name sera utilisé.

./easyrsa build-ca

Comme nous pouvons le voir sur la sortie, le certificat et la clé ont été générés. Cette clé sera utilisée pour signer les certificats client et serveur, elle ne doit donc jamais être touchée/modifiée.

Maintenant, nous avons la configuration PKI. L'étape suivante consiste à créer une clé de serveur et un certificat sur la machine que nous utiliserons comme serveur OpenVPN. Ce certificat sera plus tard signé par la machine CA.

Génération de la clé et du certificat du serveur sur la machine serveur

Nous avons déjà installé Easy RSA sur la machine serveur. Effectuez maintenant les trois étapes sur la machine serveur, que nous avons précédemment effectuées sur la machine CA, à savoir. création d'un répertoire CA à l'aide faire-cadir et en allant à l'intérieur, en modifiant les variables dans le vars fichier et génération de PKI à l'aide ./easyrsa init-pki commander.

Ensuite, nous devons exécuter la commande pour générer une demande de certificat de serveur et une clé.

./easyrsa gen-req serveur nopass

Notez que nous avons passé l'option pas de passe afin que la commande ne nous invite pas à saisir un mot de passe pour la clé du serveur. Il vous demandera toujours un nom commun pour le serveur, que vous pouvez saisir n'importe quoi, ou le laisser vide pour le nom par défaut (serveur) à utiliser.

Déplacez le fichier de clé généré à l'intérieur du /etc/openvpn annuaire.

sudo mv pki/private/server.key /etc/openvpn

Envoyez la demande de certificat à la machine CA. Nous utiliserons la commande scp dans ce but.

scp pki/reqs/server.req user@CA_MACHINE_HOSTNAME:/directory

Dans la capture d'écran ci-dessus, l'hôte 45.79.125.41 est la machine CA. Nous avons copié le certificat dans le répertoire /root.

Maintenant, le certificat du serveur a été copié sur la machine CA. L'étape suivante consiste à revenir sur la machine CA et à signer ce certificat.

Signature du certificat de serveur dans l'AC

Tout d'abord, vérifions si le fichier de demande de certificat du serveur a été copié sur la machine CA. Allez dans le répertoire où nous avons copié le fichier (/root dans mon exemple) et exécutez ls.

:~# cd /root && ls cert_authority server.req

Comme on peut le voir, le fichier serveur.req est présent. Ensuite, allez dans le répertoire CA et importez cette demande.

cd cert_authority ./easyrsa import-req /root/server.req serveur

Pour signer cette demande, exécutez la commande suivante.

./easyrsa sign-req serveur serveur

Ici, le premier argument est le type de demande, c'est-à-dire, serveur, et le deuxième argument est le nom commun de la machine serveur, pour laquelle nous avons précédemment utilisé la valeur par défaut, c'est-à-dire, serveur.

Entrez l'expression Oui, et le mot de passe de la clé CA lorsque vous y êtes invité.

Nous pouvons maintenant supprimer le fichier de demande de certificat et copier le certificat généré pour le serveur, ainsi que le certificat public CA sur la machine serveur.

rm /root/server.req scp pki/issued/server.crt [email protected]:/root scp pki/ca.crt [email protected]:/root

Ensuite, nous devons effectuer quelques étapes supplémentaires pour assurer une connexion sécurisée du VPN.

Génération des paramètres DH

L'échange de clés DH (Diffie-Hellman) est un algorithme permettant d'assurer un échange sécurisé de clés cryptographiques sur un canal non sécurisé. Tout d'abord, déplaçons le certificat reçu et le certificat public CA vers /etc/openvpn.

mv /root/ca.crt /root/server.crt /etc/openvpn

Accédez au dossier CA sur la machine serveur et exécutez la commande suivante pour générer les paramètres DH. La génération peut prendre beaucoup de temps.

./easyrsa gen-dh

Maintenant, déplacez le fichier généré vers /etc/openvpn.

mv /root/cert_authority/pki/dh.pem /etc/openvpn

Génération des clés TA

OpenVPN utilise une autre mesure de sécurité supplémentaire utilisant la clé d'authentification TLS. Pour générer la clé d'authentification TLS, exécutez :

openvpn --genkey --secret tls_auth.key

Et déplacez la clé vers /etc/openvpn.

mv tls_auth.key /etc/openvpn

La configuration de la clé du serveur et l'installation de l'autorité de certification sont maintenant terminées. Passons maintenant à la configuration réelle du serveur VPN.

Configuration du serveur OpenVPN

Le fichier de configuration pour le serveur OpenVPN n'est pas créé automatiquement, cependant nous pouvons utiliser un modèle de fichier de configuration à partir du openvpn paquet.

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

Ouvrez le fichier en utilisant vim ou n'importe quel éditeur de votre choix.

cd /etc/openvpn vim server.conf

Nous devons entrer les noms communs des clés et des certificats que nous avons générés précédemment. Allez à la ligne n° 78. Puisque nous avons utilisé tous les noms par défaut, nous les gardons inchangés. Vérifiez ensuite le nom du fichier de paramètres DH à la ligne 85. Nous avons utilisé le nom dh.pem, alors modifions-le.

Ensuite, modifions les privilèges du serveur OpenVPN. Allez aux lignes 274 et 275 et supprimez le premier ; pour le décommenter.

De même, allez à la ligne 192 et supprimez le point-virgule. Cette directive permet au trafic de tous les clients de passer par le VPN.

Enregistrez et quittez le fichier.

Changez la propriété du dossier /etc/openvpn en root.

sudo chown -R root:root /etc/openvpn

Configuration du réseau et du pare-feu

Nous devons autoriser le transfert IP sur le serveur afin de permettre le transfert de paquets depuis et vers le client VPN. Décommentez la ligne 28 sur /etc/sysctl.conf:

Enregistrez et quittez le fichier.

Redémarrage systemctl pour que ces changements aient lieu.

sudo sysctl -p

Nous devons configurer la traduction d'adresses réseau (NAT) sur le serveur à l'aide d'un pare-feu UFW afin de permettre au client VPN d'accéder à Internet en utilisant l'adresse IP du serveur VPN. Tout d'abord, activons le transfert de paquets dans la configuration du pare-feu. Ouvert /etc/default/ufw et changez la variable à la ligne 19 pour ACCEPTER.

Enregistrez et quittez le fichier.

Ajoutez maintenant les règles suivantes au fichier /etc/ufw/before.rules avant le filtre ligne dans le fichier.

*nat :POSTROUTING ACCEPT [0:0] -A POSTROUTING -s 10.8.0.0/8 -o -j MASQUERADE COMMIT

Entrez votre interface réseau à la place de . Vous pouvez voir votre interface réseau avec la commande ifconfig.

Autorisez le trafic pour le service OpenVPN sur le pare-feu et autorisez le port 1194.

sudo ufw autorise openvpn && sudo ufw autorise 1194

Rechargez le service de pare-feu.

sudo ufw recharger

Nous pouvons maintenant redémarrer le démon du serveur Open VPN en exécutant :

redémarrage du service sudo openvpn

Activez-le pour qu'il démarre au démarrage en exécutant :

sudo systemctl activer openvpn

Le serveur OpenVPN est maintenant configuré et a démarré. Passons maintenant à la demande de certificat client, à la génération de clés et à d'autres configurations.

Configuration du client OpenVPN

Nous devons générer une clé et une demande de certificat pour le client. La procédure pour ce faire est la même que pour le serveur.

Bien qu'une clé client et une demande de certificat puissent être créées sur la machine cliente puis transférées vers la machine CA, il est recommandé de les créer sur la machine serveur. L'avantage de le faire sur le serveur est que vous pouvez créer un script pour effectuer toutes les étapes requises sur le serveur, ce qui permet à un nouveau client de rejoindre plus facilement le VPN.

Accédez au dossier CA sur le serveur et exécutez la commande suivante :

cd ~/cert_authority ./easyrsa gen-req client nopass

De la même manière que précédemment, entrez un nom commun lorsque vous y êtes invité, ou laissez-le vide pour utiliser le nom commun par défaut, c'est-à-dire, client.

Copiez maintenant la demande de certificat client générée sur la machine CA.

scp pki/reqs/client.req [email protected]:/root

Importons cette requête dans la machine CA :

./easyrsa import-req /root/client.req client

Et signons-le maintenant :

./easyrsa sign-req client client

EntrerOui lorsqu'il vous est demandé de continuer. Saisissez le mot de passe de la clé CA lorsque vous y êtes invité.

Nous pouvons maintenant supprimer le fichier demandé pour le client et recopier la demande sur la machine serveur VPN.

rm /root/client.req scp pki/issued/client.crt [email protected]:/root

Créons un dossier appelé client pour conserver tous les fichiers liés au client sur le serveur VPN. Nous allons déplacer la clé cliente et le certificat dans ce dossier.

mkdir ~/client sudo mv ~/client.crt ~/cert_authority/pki/private/client.key ~/client

Créons maintenant un fichier de configuration à partir d'un modèle disponible, similaire à la façon dont nous avons créé le fichier de configuration du serveur.

cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client

Ouvrir le fichier client.conf. À la ligne 42, entrez le nom d'hôte ou l'adresse IP de votre machine serveur à la place de mon-serveur-1.

Décommentez les lignes 61 et 62 en supprimant le point-virgule de début, pour rétrograder les privilèges du fichier.

Ensuite, commentez les lignes 88-90 et 108. La raison en est que nous souhaitons ajouter manuellement le contenu des fichiers mentionnés au lieu d'utiliser les emplacements des fichiers. Le but de cela est que le fichier de configuration du client sera ensuite transféré au client, où nous n'aurons en fait pas les fichiers de clé et de certificat client ; par conséquent, nous copions le contenu de ceux dans le fichier de configuration lui-même.

Ajoutez ce qui suit au fichier de configuration client. Entrez le contenu des fichiers respectifs à l'intérieur des balises données.

 # Collez le contenu du fichier ca.crt ici # Collez le contenu du fichier client.crt ici # Collez le contenu du fichier client.key ici key-direction 1 # Collez le contenu du fichier tls_auth.key ici 

Enregistrez et quittez le fichier. Renommer ce fichier de client.conf à client.ovpn, car cette dernière est l'extension requise pour les fichiers de configuration qui peuvent être importés en tant que configurations réseau.

Maintenant, transférez le fichier client.ovpn au client, c'est-à-dire à la machine locale.

Courir scp sur votre machine cliente pour transférer le fichier de la machine serveur vers votre machine locale.

scp user@server_ip:/path_to_file local_destination_path

Enfin, nous devons utiliser ce fichier de configuration pour nous connecter au serveur VPN. Cela peut être fait à la fois via la ligne de commande et l'interface graphique.

Pour démarrer le client VPN à partir de la ligne de commande, exécutez :

sudo openvpn --config client.ovpn

Et c'est la seule commande que vous devez exécuter pour démarrer le client VPN.

Pour démarrer le client VPN via l'interface graphique, procédez comme suit.

Allez dans Paramètres » Réseau sur votre ordinateur client.

Clique sur le + dans la section VPN et choisissez « Importer depuis un fichier… » dans les options.

Cliquez sur « Ajouter » pour commencer à utiliser le VPN.

Notez que sous « Gateway », il s'agit de l'adresse IP du serveur.

Enfin, activez le bouton « VPN client » pour activer le VPN sur la machine.

L'établissement d'une connexion VPN peut prendre quelques secondes. Un nouveau logo de progression pour VPN apparaîtra dans le coin supérieur gauche de votre écran pendant sa configuration, et il se transformera en logo VPN une fois configuré.

Pour vérifier si le VPN fonctionne correctement, exécutez la commande suivante :

curl //ipinfo.io/ip

Il devrait renvoyer l'adresse IP de votre machine serveur. Ou bien, vous pouvez également vérifier votre adresse IP en recherchant simplement « Mon IP » sur Google. Il devrait afficher l'adresse IP de votre serveur VPN si notre configuration VPN fonctionne correctement.

Conclusion

Dans cet article, nous avons vu comment configurer un serveur OpenVPN, une autorité de certification et un client OpenVPN. Pour ajouter plus de clients au VPN, nous devons maintenant suivre la procédure pour générer et signer un certificat pour le client et utiliser le même fichier de configuration créé ici, avec uniquement la clé client et les valeurs du certificat modifiées.

Dans le cas de connexions Internet plus lentes, il est possible que si UDP est utilisé pour la communication, il y ait une perte de paquets considérable. L'utilisateur peut passer à TCP en décommentant la ligne protocole tcp et commentant la ligne UDP proto dans le fichier de configuration du serveur.

De plus, en cas d'autres erreurs, vous pouvez définir le niveau de journalisation avec le verbe directive dans les fichiers de configuration du serveur et du client. Vous pouvez saisir des valeurs comprises entre 0 et 9. Plus la valeur de cette directive est élevée, plus le journal sera détaillé.