Manager, Developer Education
Une version précédente de ce tutoriel a été rédigée par Justin Ellingwood
Vous voulez accéder à Internet en toute sécurité depuis votre smartphone ou votre ordinateur portable connecté à un réseau non sécurisé tel que le WiFi d’un hôtel ou d’un café ? Un réseau privé virtuel (VPN) vous permet de traverser des réseaux non fiables de manière privée et sécurisée comme si vous étiez sur un réseau privé. Le trafic est issu du serveur VPN et continue son voyage jusqu’à destination.
Combinée aux 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é contre un réseau non fiable.
OpenVPN est une solution SSL (Secure Socket Layer) VPN complète et open source qui s’adapte à un large éventail de configurations. Dans ce tutoriel, vous allez configurer un serveur OpenVPN sur un serveur Ubuntu 18.04, puis configurer l’accès à celui-ci depuis Windows, macOS, iOS et/ou Android. Ce tutoriel vise à rendre les étapes d’installation et de configuration aussi simples que possible pour chacune de ces configurations.
Remarque : si vous prévoyez de configurer un serveur OpenVPN sur une Droplet DigitalOcean, sachez que, comme de nombreux fournisseurs d’hébergement, nous facturons les dépassements de bande passante. Veillez donc à surveiller la quantité de trafic gérée par votre serveur.
Consultez cette page pour plus d’informations.
Pour suivre ce tutoriel, vous devrez avoir accès à un serveur Ubuntu 18.04 pour héberger votre service OpenVPN. Vous devrez configurer un utilisateur non root avec privilèges sudo
avant de commencer ce guide. Vous pouvez suivre notre guide de configuration initiale de serveur Ubuntu 18.04 pour configurer un utilisateur avec les permissions appropriées. Le tutoriel joint permettra également de mettre en place un pare-feu, supposé rester en place tout au long de ce guide.
En outre, vous aurez besoin d’une machine distincte qui servira d’autorité de certification (AC). Bien qu’il soit techniquement possible d’utiliser votre serveur OpenVPN ou votre machine locale comme AC, ce n’est pas recommandé car cela expose votre VPN à certaines failles de sécurité. Selon la documentation officielle d’OpenVPN, vous devez placer votre AC sur une machine autonome qui est dédiée à l’importation et à la signature des demandes de certificats. Ce guide suppose donc que votre AC se trouve sur un serveur Ubuntu 18.04 distinct qui possède également un utilisateur non root avec privilèges sudo
et un pare-feu de base.
Veuillez noter que si vous désactivez l’authentification par mot de passe lors de la configuration des serveurs, vous risquez de rencontrer des difficultés lors du transfert de fichiers entre ces serveurs plus loin dans ce guide. Pour résoudre ce problème, vous pourrez réactiver l’authentification par mot de passe sur chaque serveur. Sinon, vous pourrez générer une paire de clés SSH pour chaque serveur, puis ajouter la clé SSH publique du serveur OpenVPN au fichier authorized_keys
de la machine AC et vice versa. Consultez Comment configurer des clés SSH sur Ubuntu 18.04 pour obtenir des instructions sur la manière d’exécuter l’une ou l’autre de ces solutions.
Lorsque ces conditions préalables sont remplies, vous pouvez passer à l’étape 1 de ce tutoriel.
Pour commencer, mettez à jour l’index des packages de votre** serveur VPN** et installez OpenVPN. OpenVPN est disponible dans les référentiels par défaut d’Ubuntu, vous pouvez donc utiliser apt
pour l’installation :
- sudo apt update
- sudo apt install openvpn
OpenVPN est un TLS/SSL VPN. Cela signifie qu’il utilise des certificats afin de chiffrer le trafic entre le serveur et les clients. Pour émettre des certificats de confiance, vous devez mettre en place votre propre autorité de certification (AC). Pour ce faire, nous téléchargerons la dernière version d’EasyRSA, que nous utiliserons pour construire l’infrastructure à clés publiques (PKI) de notre AC, à partir du référentiel officiel GitHub du projet.
Comme mentionné dans les conditions préalables, nous construirons l’AC sur un serveur distinct. La raison de cette approche est la suivante : si un attaquant parvenait à infiltrer votre serveur, il pourrait accéder à votre clé privée de l’AC et l’utiliser pour émettre de nouveaux certificats, ce qui lui donnerait accès à votre VPN. Par conséquent, la gestion de l’AC à partir d’une machine distincte permet d’empêcher les utilisateurs non autorisés d’accéder à votre VPN. Notez également qu’il est recommandé, par mesure de précaution supplémentaire, de laisser le serveur de l’AC éteint lorsqu’il n’est pas utilisé pour signer des clés.
Pour commencer à construire l’infrastructure de l’AC et de la PKI, utilisez wget
pour télécharger la dernière version d’EasyRSA à la fois sur votre machine de l’AC et sur votre serveur OpenVPN. Pour obtenir la dernière version, consultez la page Releases du projet GitHub officiel EasyRSA, copiez le lien de téléchargement du fichier se terminant par .tgz
, puis collez-le dans la commande suivante :
- wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.4/EasyRSA-3.0.4.tgz
Extrayez ensuite le tarball :
- cd ~
- tar xvf EasyRSA-3.0.4.tgz
Vous avez installé tous les logiciels requis sur votre serveur et votre machine AC. Continuez ci-dessous pour configurer les variables utilisées par EasyRSA et mettre en place un répertoire AC, à partir duquel vous générerez les clés et les certificats requis par votre serveur et vos clients pour accéder au VPN.
EasyRSA est installé avec un fichier de configuration que vous pouvez modifier pour définir un certain nombre de variables pour votre AC.
Sur votre machine AC, naviguez jusqu’au répertoire EasyRSA :
- cd ~/EasyRSA-3.0.4/
Dans ce répertoire, vous trouverez un fichier nommé vars.example
. Faites une copie de ce fichier, et nommez la copie vars
sans extension de fichier :
- cp vars.example vars
Ouvrez ce nouveau fichier en utilisant votre éditeur de texte préféré :
- nano vars
Trouvez les paramètres qui définissent les champs par défaut pour les nouveaux certificats. Ils ressembleront à cela :
. . .
#set_var EASYRSA_REQ_COUNTRY "US"
#set_var EASYRSA_REQ_PROVINCE "California"
#set_var EASYRSA_REQ_CITY "San Francisco"
#set_var EASYRSA_REQ_ORG "Copyleft Certificate Co"
#set_var EASYRSA_REQ_EMAIL "me@example.net"
#set_var EASYRSA_REQ_OU "My Organizational Unit"
. . .
Décommentez ces lignes et mettez à jour les valeurs mises en évidence selon vos préférences, mais ne les laissez pas vides :
. . .
set_var EASYRSA_REQ_COUNTRY "US"
set_var EASYRSA_REQ_PROVINCE "NewYork"
set_var EASYRSA_REQ_CITY "New York City"
set_var EASYRSA_REQ_ORG "DigitalOcean"
set_var EASYRSA_REQ_EMAIL "admin@example.com"
set_var EASYRSA_REQ_OU "Community"
. . .
Lorsque vous avez terminé, enregistrez et fermez le fichier.
Dans le répertoire EasyRSA se trouve un script appelé easyrsa
qui est utilisé pour effectuer diverses tâches liées à la construction et à la gestion de l’AC. Exécutez ce script avec l’option init-pki
pour lancer l’infrastructure à clé publique sur le serveur de l’AC :
- ./easyrsa init-pki
Output. . .
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /home/sammy/EasyRSA-3.0.4/pki
Ensuite, exécutez à nouveau le script easyrsa
, en le faisant suivre de l’option build-ca
. Cela permettra de construire l’AC et de créer deux fichiers importants - ca.crt
et ca.key
- qui constituent les côtés public et privé d’un certificat SSL.
ca.crt
est le fichier de certificat public de l’AC qui, dans le contexte d’OpenVPN, est utilisé par le serveur et le client pour s’informer mutuellement qu’ils font partie du même réseau de confiance et qu’il ne s’agit pas d’une personne effectuant une attaque de l’intercepteur. Pour cette raison, votre serveur et tous vos clients auront besoin d’une copie du fichier ca.crt
.ca.key
est la clé privée que la machine AC utilise pour signer les clés et les certificats des serveurs et des clients. Si un attaquant accède à votre AC et ensuite à votre fichier ca.key
, il pourra signer des demandes de certificat et accéder à votre VPN, ce qui nuira à sa sécurité. C’est pourquoi votre fichier ca.key
ne doit se trouver que sur votre machine AC et votre machine AC doit idéalement être maintenue hors ligne lorsqu’elle ne signe pas de demandes de certificat, par mesure de sécurité supplémentaire.Si vous ne voulez pas qu’un mot de passe vous soit demandé à chaque fois que vous interagissez avec votre AC, vous pouvez exécuter la commande build-ca
avec l’option nopass
, comme ceci :
- ./easyrsa build-ca nopass
Dans la sortie, il vous sera demandé de confirmer le nom commun ou common name de votre AC :
Output. . .
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:
Le nom commun est le nom utilisé pour désigner cette machine dans le contexte de l’autorité de certification. Vous pouvez saisir n’importe quelle chaîne de caractères pour le nom commun de l’AC mais, par souci de simplicité, appuyez sur ENTER
(ENTRÉE) pour accepter le nom par défaut.
Votre AC est ainsi en place et prête à signer les demandes de certificat.
Maintenant que vous avez une AC prête à fonctionner, vous pouvez générer une clé privée et une demande de certificat à partir de votre serveur, puis transférer la demande à votre AC pour qu’elle la signe, créant ainsi le certificat requis. Vous êtes également libre de créer des fichiers supplémentaires utilisés pendant le processus de chiffrement.
Commencez par rejoindre le répertoire EasyRSA sur votre serveur OpenVPN :
- cd EasyRSA-3.0.4/
De là, exécutez le script easyrsa
avec l’option init-pki
. Bien que vous ayez déjà exécuté cette commande sur la machine AC, il est nécessaire de l’exécuter ici car votre serveur et votre AC auront des répertoires PKI séparés :
- ./easyrsa init-pki
Puis exécutez à nouveau le script easyrsa
, en activant cette fois l’option gen-req
suivie d’un nom commun pour la machine. Encore une fois, vous êtes libre de choisir le nom que vous souhaitez, mais un nom descriptif peut être utile. Tout au long de ce tutoriel, le nom commun du serveur OpenVPN sera simplement « server ». Veillez à inclure également l’option nopass
. Dans le cas contraire, le fichier de demande sera protégé par un mot de passe, ce qui pourrait entraîner des problèmes de permissions par la suite :
Remarque : si vous choisissez un nom autre que « server » ici, vous devrez adapter certaines des instructions ci-dessous. Par exemple, en copiant les fichiers générés dans le répertoire /etc/openvpn
, vous devrez substituer les noms corrects. Vous devrez également modifier le fichier /etc/openvpn/server.conf
ultérieurement pour pointer vers les fichiers .crt
et .key
corrects.
- ./easyrsa gen-req server nopass
Cela permettra de créer une clé privée pour le serveur et un fichier de demande de certificat appelé server.req
. Copiez la clé du serveur dans le répertoire /etc/openvpn/
:
- sudo cp ~/EasyRSA-3.0.4/pki/private/server.key /etc/openvpn/
En utilisant une méthode sécurisée (comme SCP, dans notre exemple ci-dessous), transférez le fichier server.req
sur votre machine AC :
- scp ~/EasyRSA-3.0.4/pki/reqs/server.req sammy@your_CA_ip:/tmp
Puis, sur votre machine AC, naviguez jusqu’au répertoire EasyRSA :
- cd EasyRSA-3.0.4/
En utilisant à nouveau le script easyrsa
, importez le fichier server.req
, en suivant le chemin du fichier avec son nom commun :
- ./easyrsa import-req /tmp/server.req server
Signez ensuite la demande en exécutant le script easyrsa
avec l’option sign-req
, suivi du type de demande et du nom commun. Le type de requête peut être soit client
soit server
, donc pour la requête de certificat du serveur OpenVPN, assurez-vous d’utiliser le type de requête server
:
- ./easyrsa sign-req server server
Dans la sortie, il vous sera demandé de vérifier que la demande provient d’une source fiable. Tapez yes
puis appuyez sur ENTER
pour confirmer :
You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.
Request subject, to be signed as a server certificate for 3650 days:
subject=
commonName = server
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
Si vous avez chiffré votre clé AC, on vous demandera votre mot de passe à ce stade.
Ensuite, transférez le certificat signé sur votre serveur VPN en utilisant une méthode sécurisée :
- scp pki/issued/server.crt sammy@your_server_ip:/tmp
Avant de vous déconnecter de votre machine AC, transférez également le fichier ca.crt
sur votre serveur :
- scp pki/ca.crt sammy@your_server_ip:/tmp
Ensuite, reconnectez-vous à votre serveur OpenVPN et copiez les fichiers server.crt
et ca.crt
dans votre répertoire /etc/openvpn/
:
- sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/
Naviguez jusqu’à votre répertoire EasyRSA :
- cd EasyRSA-3.0.4/
De là, créez une clé Diffie-Hellman forte à utiliser lors de l’échange de clés en tapant :
- ./easyrsa gen-dh
Cela peut prendre quelques minutes. Une fois que c’est fait, générez une signature HMAC pour renforcer les capacités de vérification de l’intégrité TLS du serveur :
- openvpn --genkey --secret ta.key
Lorsque la commande est terminée, copiez les deux nouveaux fichiers dans votre répertoire /etc/openvpn/
:
- sudo cp ~/EasyRSA-3.0.4/ta.key /etc/openvpn/
- sudo cp ~/EasyRSA-3.0.4/pki/dh.pem /etc/openvpn/
Tous les fichiers de certificats et de clés nécessaires à votre serveur ont été générés. Vous êtes prêt à créer les certificats et clés correspondants que votre machine cliente utilisera pour accéder à votre serveur OpenVPN.
Bien que vous puissiez générer une clé privée et une demande de certificat sur votre machine cliente, puis l’envoyer à l’autorité de certification pour qu’elle la signe, ce guide décrit un processus de génération de la demande de certificat sur le serveur. L’avantage est que nous pouvons créer un script qui générera automatiquement des fichiers de configuration client contenant toutes les clés et tous les certificats requis. Cela vous évite d’avoir à transférer les clés, les certificats et les fichiers de configuration aux clients et rationalise le processus pour rejoindre le VPN.
Nous générerons une seule paire certificat/clé client dans ce guide. Si vous avez plus d’un client, vous pouvez répéter ce processus pour chacun d’entre eux. Veuillez noter, cependant, que vous devrez transmettre une valeur de nom unique au script pour chaque client. Tout au long de ce tutoriel, la première paire certificat/clé est appelée client1
.
Commencez par créer une structure de répertoire dans votre répertoire d’origine pour stocker les fichiers du certificat et de la clé client :
- mkdir -p ~/client-configs/keys
Étant donné que vous stockerez les paires certificats/clés et les fichiers de configuration de vos clients dans ce répertoire, vous devriez verrouiller ses autorisations dès maintenant par mesure de sécurité :
- chmod -R 700 ~/client-configs
Ensuite, retournez dans le répertoire EasyRSA et exécutez le script easyrsa
avec les options gen-req
et nopass
, ainsi que le nom commun du client :
- cd ~/EasyRSA-3.0.4/
- ./easyrsa gen-req client1 nopass
Appuyez surENTER
pour confirmer le nom commun. Ensuite, copiez le fichier client1.key
dans le répertoire /client-configs/keys/
que vous avez créé précédemment :
- cp pki/private/client1.key ~/client-configs/keys/
Ensuite, transférez le fichier client1.req
sur votre machine AC en utilisant une méthode sécurisée :
- scp pki/reqs/client1.req sammy@your_CA_ip:/tmp
Connectez-vous à votre machine AC, naviguez jusqu’au répertoire EasyRSA et importez la demande de certificat :
- ssh sammy@your_CA_ip
- cd EasyRSA-3.0.4/
- ./easyrsa import-req /tmp/client1.req client1
Signez ensuite la demande comme vous l’avez fait pour le serveur lors de l’étape précédente. Cette fois, cependant, veillez à préciser le type de demande client
:
- ./easyrsa sign-req client client1
Lorsque vous êtes invité à le faire, entrez yes
pour confirmer que vous souhaitez signer la demande de certificat et qu’elle provient d’une source fiable :
OutputType the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
Encore une fois, si vous avez chiffré votre clé AC, vous serez invité à entrer votre mot de passe ici.
Cela créera un fichier de certificat client nommé client1.crt
. Transférez ce fichier vers le serveur :
- scp pki/issued/client1.crt sammy@your_server_ip:/tmp
Connectez-vous via SSH à votre serveur OpenVPN et copiez le certificat client dans le répertoire /client-configs/keys/
:
- cp /tmp/client1.crt ~/client-configs/keys/
Ensuite, copiez également les fichiers ca.crt
et ca.key
dans le répertoire /client-configs/keys/
:
- cp ~/EasyRSA-3.0.4/ta.key ~/client-configs/keys/
- sudo cp /etc/openvpn/ca.crt ~/client-configs/keys/
Les certificats et les clés de votre serveur et de votre client ont tous été générés et sont stockés dans les répertoires appropriés de votre serveur. Il reste encore quelques actions à effectuer avec ces fichiers, mais elles interviendront dans une étape ultérieure. Pour l’instant, vous pouvez passer à la configuration d’OpenVPN sur votre serveur.
Maintenant que les certificats et les clés de votre client et de votre serveur ont été générés, vous pouvez commencer à configurer le service OpenVPN pour utiliser ces informations d’identification.
Commencez par copier un exemple de fichier de configuration OpenVPN dans le répertoire de configuration, puis extrayez-le afin de l’utiliser comme base pour votre installation :
- 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 de configuration du serveur dans votre éditeur de texte préféré :
- sudo nano /etc/openvpn/server.conf
Trouvez la section HMAC en cherchant la directive tls-auth
. Cette ligne devrait déjà être décommentée, mais si elle ne l’est pas, supprimez le «** ; **» pour la décommenter :
tls-auth ta.key 0 # This file is secret
Ensuite, trouvez la section sur les chiffres cryptographiques en recherchant les lignes cipher
commentées. Le chiffrement AES-256-CBC
offre un bon niveau de cryptage et est bien pris en charge. Encore une fois, cette ligne devrait déjà être décommentée, mais si elle ne l’est pas, il suffit d’enlever le « **; **» qui la précède :
cipher AES-256-CBC
En dessous, ajoutez une directive auth
pour sélectionner l’algorithme de synthèse des messages HMAC. À cette fin, SHA256
est un bon choix :
auth SHA256
Ensuite, trouvez la ligne contenant une directive dh
qui définit les paramètres de Diffie-Hellman. En raison de certaines modifications récentes apportées à EasyRSA, le nom de fichier de la clé Diffie-Hellman peut être différent de celui qui figure dans le fichier d’exemple de configuration du serveur. Si nécessaire, modifiez le nom de fichier indiqué ici en supprimant le 2048
afin qu’il s’aligne sur la clé que vous avez générée à l’étape précédente :
dh dh.pem
Enfin, trouvez les paramètres user
et group
et supprimez le «** ; **» au début de chacun pour décommenter ces lignes :
user nobody
group nogroup
Les modifications que vous avez apportées au fichier server.conf
jusqu’à présent sont nécessaires pour qu’OpenVPN puisse fonctionner. Les changements décrits ci-dessous sont facultatifs, bien qu’ils soient également nécessaires pour de nombreux cas d’utilisation courants.
Les paramètres ci-dessus créeront la connexion VPN entre les deux machines, mais ne forceront aucune connexion à utiliser le tunnel. Si vous souhaitez utiliser le VPN pour acheminer l’ensemble de votre trafic, vous voudrez probablement diriger les paramètres DNS vers les ordinateurs clients.
Il y a quelques directives dans le fichier server.conf
que vous devez modifier pour activer cette fonctionnalité. Trouvez la section redirect-gateway
et retirez le point-virgule « ;
» du début de la ligne redirect-gateway pour la décommenter :
push "redirect-gateway def1 bypass-dhcp"
Juste en dessous, vous trouverez la section dhcp-option
. Encore une fois, enlevez le «** ; **» devant les deux lignes pour les décommenter :
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
Cela aidera les clients à reconfigurer leurs paramètres DNS pour utiliser le tunnel VPN comme passerelle par défaut.
Par défaut, le serveur OpenVPN utilise le port 1194
et le protocole UDP pour accepter les connexions des clients. Si vous devez utiliser un autre port en raison des environnements réseau restrictifs de vos clients, vous pouvez changer l’option port
. Si vous n’hébergez pas de contenu web sur votre serveur OpenVPN, le port 443
est un choix populaire car il est généralement autorisé par les règles de pare-feu.
# Optional!
port 443
Souvent, le protocole est également limité à ce port. Si c’est le cas, changez la valeur proto
de UDP à TCP :
# Optional!
proto tcp
Si vous modifiez le protocole en TCP, vous devrez changer la valeur de la directive explicit-exit-notify
de 1
à 0
, car cette directive n’est utilisée que par UDP. Si vous ne la modifiez alors que vous utilisez le protocole TCP, des erreurs se produiront au démarrage du service OpenVPN :
# Optional!
explicit-exit-notify 0
Si vous n’avez pas besoin d’utiliser un port et un protocole différents, il est préférable de conserver les deux paramètres par défaut.
Si vous avez choisi un nom différent lors de la commande ./build-key-server
précédente, modifiez les lignes cert
et key
que vous voyez pour pointer vers les fichiers .crt
et .key
appropriés. Si vous avez utilisé le nom par défaut « server », celui-ci est déjà correctement défini :
cert server.crt
key server.key
Lorsque vous avez terminé, enregistrez et fermez le fichier.
Après avoir passé en revue la configuration OpenVPN de votre serveur et y avoir apporté les modifications nécessaires pour votre utilisation spécifique, vous pouvez commencer à apporter quelques changements à la mise en réseau de votre serveur.
Certains aspects de la configuration réseau du serveur doivent être modifiés afin qu’OpenVPN puisse acheminer correctement le trafic à travers le VPN. Le premier d’entre eux est le transfert IP, une méthode permettant de déterminer où le trafic IP doit être acheminé. Ceci est essentiel pour la fonctionnalité VPN que votre serveur fournira.
Ajustez le paramètre de transfert IP par défaut de votre serveur en modifiant le fichier /etc/sysctl.conf
:
- sudo nano /etc/sysctl.conf
À l’intérieur, cherchez la ligne commentée qui définit net.ipv4.ip_forward
. Supprimez le caractère «** #** » du début de la ligne pour décommenter ce paramètre :
net.ipv4.ip_forward=1
Enregistrez et fermez le fichier lorsque vous avez terminé.
Pour lire le fichier et ajuster les valeurs pour la session en cours, tapez :
- sudo sysctl -p
Outputnet.ipv4.ip_forward = 1
Si vous avez suivi le guide de configuration initiale de serveur Ubuntu 18.04 indiqué dans les conditions préalables, vous devriez avoir un pare-feu UFW en place. Que vous utilisiez ou non le pare-feu pour bloquer le trafic indésirable (ce que vous devriez presque toujours faire), pour ce guide, vous avez besoin d’un pare-feu pour manipuler une partie du trafic entrant dans le serveur. Certaines des règles du pare-feu doivent être modifiées pour permettre le masquage, un concept iptables qui fournit à la volée une traduction dynamique des adresses réseau (NAT) pour acheminer correctement les connexions des clients.
Avant d’ouvrir le fichier de configuration du pare-feu pour ajouter les règles de masquage, vous devez d’abord trouver l’interface de réseau public de votre machine. Pour ce faire, tapez :
- ip route | grep default
Votre interface publique est la chaîne de caractères qui se trouve dans la sortie de cette commande et qui suit le mot « dev ». Par exemple, ce résultat montre l’interface nommée wlp11s0
, qui est mise en évidence ci-dessous :
Outputdefault via 203.0.113.1 dev wlp11s0 proto static
Lorsque l’interface est associée à votre itinéraire par défaut, ouvrez le fichier /etc/ufw/before.rules
pour ajouter la configuration appropriée :
- sudo nano /etc/ufw/before.rules
Les règles UFW sont généralement ajoutées à l’aide de la commande ufw
. Les règles énumérées dans le fichier before.rules
sont toutefois lues et mises en place avant le chargement des règles UFW conventionnelles. En haut du fichier, ajoutez les lignes mises en évidence ci-dessous. Cela permettra de définir la politique par défaut pour la chaîne POSTROUTING
dans la table nat
et de masquer tout trafic provenant du VPN. N’oubliez pas de remplacer wlp11s0
dans la ligne -A POSTROUTING
ci-dessous par l’interface que vous avez trouvée dans la commande ci-dessus :
#
# rules.before
#
# Rules that should be run before the ufw command line added rules. Custom
# rules should be added to one of these chains:
# ufw-before-input
# ufw-before-output
# ufw-before-forward
#
# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic from OpenVPN client to wlp11s0 (change to the interface you discovered!)
-A POSTROUTING -s 10.8.0.0/8 -o wlp11s0 -j MASQUERADE
COMMIT
# END OPENVPN RULES
# Don't delete these required lines, otherwise there will be errors
*filter
. . .
Enregistrez et fermez le fichier lorsque vous avez terminé.
Ensuite, vous devez indiquer à UFW d’autoriser également les paquets transmis par défaut. Pour ce faire, ouvrez le fichier /etc/default/ufw
:
- sudo nano /etc/default/ufw
À l’intérieur, trouvez la directive DEFAULT_FORWARD_POLICY
et changez la valeur de DROP
à ACCEPT
:
DEFAULT_FORWARD_POLICY="ACCEPT"
Enregistrez et fermez le fichier lorsque vous avez terminé.
Ensuite, ajustez le pare-feu lui-même pour permettre le trafic vers OpenVPN. Si vous n’avez pas modifié le port et le protocole dans le fichier /etc/openvpn/server.conf,
vous devrez ouvrir le trafic UDP au port 1194
. Si vous avez modifié le port et/ou le protocole, utilisez ici les valeurs que vous avez sélectionnées.
Au cas où vous auriez oublié d’ajouter le port SSH en suivant le tutoriel préalable, ajoutez-le également ici :
- sudo ufw allow 1194/udp
- sudo ufw allow OpenSSH
Après avoir ajouté ces règles, désactivez et réactivez UFW pour le redémarrer et charger les modifications de tous les fichiers :
- sudo ufw disable
- sudo ufw enable
Votre serveur est maintenant configuré pour gérer correctement le trafic OpenVPN.
Vous êtes enfin prêt à lancer le service OpenVPN sur votre serveur. Faites-le en utilisant l’utilitaire systemd systemctl
.
Démarrez le serveur OpenVPN en spécifiant le nom de votre fichier de configuration comme variable d’instance après le nom de fichier de l’unité systemd. Le fichier de configuration de votre serveur s’appelle /etc/openvpn/server.conf,
ajoutez donc @server
à la fin de votre fichier d’unité lorsque vous l’appelez :
- sudo systemctl start openvpn@server
Vérifiez que le service a bien démarré en tapant :
- sudo systemctl status openvpn@server
Si tout s’est bien passé, votre sortie ressemblera à ceci :
Output● openvpn@server.service - OpenVPN connection to server
Loaded: loaded (/lib/systemd/system/openvpn@.service; disabled; vendor preset: enabled)
Active: active (running) since Tue 2016-05-03 15:30:05 EDT; 47s ago
Docs: man:openvpn(8)
https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage
https://community.openvpn.net/openvpn/wiki/HOWTO
Process: 5852 ExecStart=/usr/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/%i.conf --writepid /run/openvpn/%i.pid (code=exited, sta
Main PID: 5856 (openvpn)
Tasks: 1 (limit: 512)
CGroup: /system.slice/system-openvpn.slice/openvpn@server.service
└─5856 /usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/server.conf --writepid /run/openvpn/server.pid
Vous pouvez également vérifier que l’interface tun0
d’OpenVPN est disponible en tapant :
- ip addr show tun0
Cela produira une interface configurée :
Output4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 100
link/none
inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
valid_lft forever preferred_lft forever
Après avoir démarré le service, activez-le afin qu’il se lance automatiquement lors du démarrage du système :
- sudo systemctl enable openvpn@server
Votre service OpenVPN est maintenant opérationnel. Cependant, avant de pouvoir l’utiliser, vous devez créer un fichier de configuration pour la machine cliente. Ce tutoriel a déjà abordé la manière de créer des paires certificats/clés pour les clients. Dans la prochaine étape, nous montrerons comment créer une infrastructure qui générera facilement des fichiers de configuration pour les clients.
La création de fichiers de configuration pour les clients OpenVPN peut être quelque peu compliquée, car chaque client doit avoir sa propre configuration et chacun doit s’aligner sur les paramètres décrits dans le fichier de configuration du serveur. Plutôt que d’écrire un seul fichier de configuration qui ne peut être utilisé que sur un seul client, cette étape décrit un processus de construction d’une infrastructure de configuration client que vous pouvez utiliser pour générer des fichiers de configuration à la volée. Vous créerez d’abord un fichier de configuration « de base », puis un script qui vous permettra de générer des fichiers de configuration client, des certificats et des clés uniques selon les besoins.
Commencez par créer un nouveau répertoire dans lequel vous stockerez les fichiers de configuration du client dans le répertoire client-configs
que vous avez créé précédemment :
- mkdir -p ~/client-configs/files
Ensuite, copiez un exemple de fichier de configuration client dans le répertoire client-configs
pour l’utiliser comme configuration de base :
- cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
Ouvrez ce nouveau fichier dans votre éditeur de texte :
- nano ~/client-configs/base.conf
Dans celui-ci, localisez la directive remote
. Le client est alors dirigé vers l’adresse de votre serveur OpenVPN - l’adresse IP publique de votre serveur OpenVPN. Si vous avez décidé de modifier le port sur lequel le serveur OpenVPN écoute, vous devrez également changer 1194
pour le port que vous avez sélectionné :
. . .
# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
remote your_server_ip 1194
. . .
Assurez-vous que le protocole correspond à la valeur que vous utilisez dans la configuration du serveur :
proto udp
Ensuite, décommentez les directives user
et group
en supprimant le «** ; **» au début de chaque ligne :
# Downgrade privileges after initialization (non-Windows only)
user nobody
group nogroup
Trouvez les directives qui fixent ca
, cert
et key
. Commentez ces directives, car vous ajouterez bientôt les certificats et les clés dans le dossier lui-même :
# SSL/TLS parms.
# See the server config file for more
# description. It's best to use
# a separate .crt/.key file pair
# for each client. A single ca
# file can be used for all clients.
#ca ca.crt
#cert client.crt
#key client.key
De même, commentez la directive tls-auth
, car vous ajouterez ca.key
directement dans le fichier de configuration du client :
# If a tls-auth key is used on the server
# then every client must also have the key.
#tls-auth ta.key 1
Utilisez les mêmes paramètres cypher
et auth
que ceux que vous avez définis dans le fichier /etc/openvpn/server.conf
:
cipher AES-256-CBC
auth SHA256
Ensuite, ajoutez la directive key-direction
quelque part dans le fichier. Vous devez régler ce paramètre sur « 1 » pour que le VPN fonctionne correctement sur la machine cliente :
key-direction 1
Enfin, ajoutez quelques lignes commentées. Bien que vous puissiez inclure ces directives dans chaque fichier de configuration client, vous ne devez les activer que pour les clients Linux qui sont livrés avec un fichier /etc/openvpn/update-resolv-conf
. Ce script utilise l’utilitaire resolvconf
pour mettre à jour les informations DNS pour les clients Linux.
# script-security 2
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf
Si votre client fonctionne sous Linux et possède un fichier /etc/openvpn/update-resolv-conf
, décommentez ces lignes du fichier de configuration du client après qu’il a été généré.
Enregistrez et fermez le fichier lorsque vous avez terminé.
Ensuite, créez un simple script qui compilera votre configuration de base avec les fichiers de certificat, de clé et de chiffrement appropriés, puis placez la configuration générée dans le répertoire ~/client-configs/files
. Ouvrez un nouveau fichier appelé make_config.sh
dans le répertoire ~/client-configs
:
- nano ~/client-configs/make_config.sh
Dans ce fichier, ajoutez le contenu suivant :
#!/bin/bash
# First argument: Client identifier
KEY_DIR=~/client-configs/keys
OUTPUT_DIR=~/client-configs/files
BASE_CONFIG=~/client-configs/base.conf
cat ${BASE_CONFIG} \
<(echo -e '<ca>') \
${KEY_DIR}/ca.crt \
<(echo -e '</ca>\n<cert>') \
${KEY_DIR}/${1}.crt \
<(echo -e '</cert>\n<key>') \
${KEY_DIR}/${1}.key \
<(echo -e '</key>\n<tls-auth>') \
${KEY_DIR}/ta.key \
<(echo -e '</tls-auth>') \
> ${OUTPUT_DIR}/${1}.ovpn
Enregistrez et fermez le fichier lorsque vous avez terminé.
Avant de poursuivre, veillez à marquer ce fichier comme exécutable en tapant :
- chmod 700 ~/client-configs/make_config.sh
Ce script fera une copie du fichier base.conf
que vous avez créé, rassemblera tous les fichiers de certificats et de clés que vous avez créés pour votre client, extraira leur contenu, les ajoutera à la copie du fichier de configuration de la base et exportera tout ce contenu dans un nouveau fichier de configuration du client. Cela signifie que, plutôt que de devoir gérer séparément les fichiers de configuration, de certificat et de clé du client, toutes les informations requises sont stockées en un seul endroit. L’avantage est que si vous avez besoin d’ajouter un client à l’avenir, vous pouvez simplement exécuter ce script pour créer rapidement le fichier de configuration et vous assurer que toutes les informations importantes sont stockées dans un seul endroit facile d’accès.
Veuillez noter qu’à chaque fois que vous ajouterez un nouveau client, vous devrez générer de nouvelles clés et de nouveaux certificats pour lui avant de pouvoir exécuter ce script et générer son fichier de configuration. Vous vous entraînerez à utiliser ce script dans la prochaine étape.
Si vous avez suivi le guide, vous avez créé un certificat de client et une clé nommés respectivement client1.crt
et client1.key
à l’étape 4. Vous pouvez générer un fichier de configuration pour ces certificats en vous déplaçant dans votre répertoire ~/client-configs
et en exécutant le script que vous avez créé à la fin de l’étape précédente :
- cd ~/client-configs
- sudo ./make_config.sh client1
Cela créera un fichier nommé client1.ovpn
dans votre répertoire ~/client-configs/files
:
- ls ~/client-configs/files
Outputclient1.ovpn
Vous devez transférer ce fichier sur l’appareil que vous prévoyez d’utiliser en tant que client. Il peut s’agir, par exemple, de votre ordinateur local ou d’un appareil mobile.
Bien que les applications exactes utilisées pour effectuer ce transfert dépendent du système d’exploitation de votre appareil et de vos préférences personnelles, utiliser le SFTP (protocole de transfert de fichiers SSH) ou le SCP (Secure Copy) en back-end constitue une méthode fiable et sûre. Cela permettra de transporter les fichiers d’authentification VPN de votre client sur une connexion chiffrée.
Voici un exemple de commande SFTP utilisant l’exemple client1.ovpn
que vous pouvez exécuter depuis votre ordinateur local (macOS ou Linux). Il place le fichier .ovpn
dans votre répertoire de base :
- sftp sammy@your_server_ip:client-configs/files/client1.ovpn ~/
Voici plusieurs outils et tutoriels pour transférer en toute sécurité des fichiers du serveur vers un ordinateur local :
Cette section explique comment installer un profil VPN client sur Windows, macOS, Linux, iOS et Android. Aucune de ces instructions du client ne dépend d’une autre, alors n’hésitez pas à passer à celle qui s’applique à votre appareil.
La connexion OpenVPN portera le même nom que celui du fichier .ovpn
. Pour ce tutoriel, cela signifie que la connexion est nommée client1.ovpn
, s’alignant sur le premier fichier client que vous avez généré.
Installation
Téléchargez l’application client OpenVPN pour Windows depuis la page de téléchargement d’OpenVPN. Choisissez la version d’installation appropriée pour votre version de Windows.
Remarque
OpenVPN a besoin de privilèges administratifs pour s’installer.
Après avoir installé OpenVPN, copiez le fichier .ovpn
dans :
C:\Program Files\OpenVPN\config
Lorsque vous lancez OpenVPN, il voit automatiquement le profil et le rend disponible.
Vous devez exécuter OpenVPN en tant qu’administrateur à chaque fois qu’il est utilisé, même par des comptes administratifs. Pour effectuer cette action sans avoir à cliquer sur le bouton droit de la souris et à sélectionner Exécuter en tant qu’administrateur chaque fois que vous utilisez le VPN, vous devez le pré-régler à partir d’un compte administratif. Cela signifie également que les utilisateurs standard devront entrer le mot de passe de l’administrateur pour utiliser OpenVPN. Les utilisateurs standard ne peuvent pas se connecter correctement au serveur à moins que l’application OpenVPN sur le client n’ait des droits d’administrateur, les privilèges élevés sont donc nécessaires.
Pour que l’application OpenVPN s’exécute toujours en tant qu’administrateur, cliquez avec le bouton droit de la souris sur son icône de raccourci et allez dans Propriétés. En bas de l’onglet Compatibilité, cliquez sur le bouton Modifier les paramètres pour tous les utilisateurs. Dans la nouvelle fenêtre, cochez Exécuter ce programme en tant qu’administrateur.
Connexion
À chaque fois que vous lancez l’interface graphique d’OpenVPN, Windows vous demande si vous souhaitez autoriser le programme à apporter des modifications à votre ordinateur. Cliquez sur Oui. Le lancement de l’application client OpenVPN ne fait que placer l’applet dans la barre d’état système afin que vous puissiez connecter et déconnecter le VPN selon vos besoins : il n’établit pas réellement la connexion VPN.
Une fois qu’OpenVPN est lancé, initiez une connexion en vous rendant dans l’applet de la barre d’état système et en cliquant avec le bouton droit de la souris sur l’icône de l’applet OpenVPN. Cela ouvre le menu contextuel. Sélectionnez client1 en haut du menu (c’est votre profil client1.ovpn
) et choisissez Connecter.
Une fenêtre d’état s’ouvrira, montrant la sortie du journal pendant que la connexion est établie, et un message s’affichera une fois que le client sera connecté.
Déconnectez-vous du VPN de la même manière : allez dans l’applet de la barre d’état système, cliquez avec le bouton droit de la souris sur l’icône de l’applet OpenVPN, sélectionnez le profil du client et cliquez sur Déconnecter.
Installation
Tunnelblick est un client OpenVPN gratuit et open source pour macOS. Vous pouvez télécharger la dernière image disque à partir de la page de téléchargement de Tunnelblick. Double-cliquez sur le fichier .dmg
téléchargé et suivez les instructions pour l’installer.
Vers la fin du processus d’installation, Tunnelblick vous demandera si vous avez des fichiers de configuration. Répondez J’ai des fichiers de configuration et laissez Tunnelblick finir. Ouvrez une fenêtre du Finder et double-cliquez sur client1.ovpn
. Tunnelblick installera le profil du client. Des privilèges administratifs sont requis.
Connexion
Lancez Tunnelblick en double-cliquant sur l’icône de Tunnelblick dans le dossier Applications. Lorsque Tunnelblick est lancé, une icône Tunnelblick apparaît dans la barre de menu en haut à droite de l’écran pour contrôler les connexions. Cliquez sur l’icône, puis sur l’élément de menu Connecter client1 pour lancer la connexion VPN.
Si vous utilisez Linux, vous pouvez utiliser plusieurs outils en fonction de votre distribution. Votre environnement de bureau ou votre gestionnaire de fenêtres peut également inclure des utilitaires de connexion.
La façon la plus universelle de se connecter, cependant, est d’utiliser simplement le logiciel OpenVPN.
Sur Ubuntu ou Debian, vous pouvez l’installer comme vous l’avez fait sur le serveur en tapant :
- sudo apt update
- sudo apt install openvpn
Sur CentOS, vous pouvez activer les référentiels EPEL et les installer ensuite en tapant :
- sudo yum install epel-release
- sudo yum install openvpn
Vérifiez que votre distribution comprend un script /etc/openvpn/update-resolv-conf
:
- ls /etc/openvpn
Outputupdate-resolv-conf
Ensuite, modifiez le fichier de configuration client OpenVPN que vous avez transféré :
- nano client1.ovpn
Si vous avez trouvé un fichier update-resolv-conf
, décommentez les trois lignes que vous avez ajoutées pour ajuster les paramètres DNS :
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
Si vous utilisez CentOS, changez la directive group
de nogroup
à nobody
pour qu’elle corresponde aux groupes disponibles de la distribution :
group nobody
Enregistrez et fermez le fichier.
Maintenant, vous pouvez vous connecter au VPN en pointant simplement la commande openvpn
sur le fichier de configuration client :
- sudo openvpn --config client1.ovpn
Cela devrait vous connecter à votre VPN.
Installation
Depuis l’App Store d’iTunes, recherchez et installez OpenVPN Connect, l’application client OpenVPN officielle pour iOS. Pour transférer la configuration de votre client iOS sur l’appareil, connectez-le directement à un ordinateur.
La procédure à suivre pour effectuer le transfert avec iTunes est décrite ici. Ouvrez iTunes sur l’ordinateur et cliquez sur iPhone > apps. Faites défiler vers le bas jusqu’à la section Partage de fichiers et cliquez sur l’application OpenVPN. La fenêtre vide à droite, Documents OpenVPN, est destinée au partage de fichiers. Faites glisser le fichier .ovpn
vers la fenêtre Documents OpenVPN.
Lancez maintenant l’application OpenVPN sur l’iPhone. Vous recevrez une notification vous informant qu’un nouveau profil est prêt à être importé. Appuyez sur le signe + vert pour l’importer.
Connexion
OpenVPN est maintenant prêt à être utilisé avec le nouveau profil. Démarrez la connexion en faisant glisser le bouton Connect sur la position On. Déconnectez-vous en faisant glisser le même bouton sur Off.
Remarque
Le bouton VPN sous Settings ne peut pas être utilisé pour se connecter au VPN. Si vous essayez, vous recevrez un avis vous invitant à vous connecter uniquement à l’aide de l’application OpenVPN.
Installation
Ouvrez le Google Play Store. Recherchez et installez Android OpenVPN Connect, l’application client officielle d’OpenVPN sur Android.
Vous pouvez transférer le profil .ovpn
en connectant l’appareil Android à votre ordinateur par USB et en copiant le fichier dessus. Sinon, si vous disposez d’un lecteur de carte SD, vous pouvez retirer la carte SD de l’appareil, y copier le profil, puis réinsérer la carte dans l’appareil Android.
Lancez l’application OpenVPN et cliquez sur le menu pour importer le profil.
Naviguez ensuite jusqu’à l’emplacement du profil enregistré (la capture d’écran utilise /sdcard/Download/
) et sélectionnez le fichier. L’application vous notifiera que le profil a été importé.
Connexion
Pour vous connecter, cliquez simplement sur le bouton Connect. On vous demandera si vous faites confiance à l’application OpenVPN. Choisissez OK pour lancer la connexion. Pour vous déconnecter du VPN, retournez sur l’application OpenVPN et choisissez Disconnect.
**Remarque **: cette méthode pour tester votre connexion VPN ne fonctionnera que si vous avez choisi de faire passer tout votre trafic par le VPN à l’étape 5.
Une fois que tout est installé, une simple vérification confirme que tout fonctionne correctement. Sans avoir activé de connexion VPN, ouvrez un navigateur et allez sur DNSLeakTest.
Le site renvoie l’adresse IP attribuée par votre fournisseur d’accès à Internet et telle que vous apparaissez au reste du monde. Pour vérifier vos paramètres DNS sur le même site web, cliquez sur Extended test et il vous indiquera quels serveurs DNS vous utilisez.
Connectez maintenant le client OpenVPN au VPN de votre Droplet et rafraîchissez le navigateur. Une adresse IP complètement différente (celle de votre serveur VPN) devrait maintenant apparaître, et c’est ainsi que vous apparaissez au monde. Encore une fois, le test Extended Test de DNSLeakTest vérifiera vos paramètres DNS et confirmera que vous utilisez maintenant les résolveurs DNS poussés par votre VPN.
Il peut arriver que vous deviez révoquer le certificat d’un client pour empêcher tout accès ultérieur au serveur OpenVPN.
Pour ce faire, accédez au répertoire EasyRSA sur votre machine AC :
- cd EasyRSA-3.0.4/
Ensuite, lancez le script easyrsa
avec l’option revoke
, suivi du nom du client que vous souhaitez révoquer :
- ./easyrsa revoke client2
Il vous sera demandé de confirmer la révocation en entrant yes
:
OutputPlease confirm you wish to revoke the certificate with the following subject:
subject=
commonName = client2
Type the word 'yes' to continue, or any other input to abort.
Continue with revocation: yes
Après avoir confirmé l’action, l’AC révoquera entièrement le certificat du client. Cependant, votre serveur OpenVPN n’a actuellement aucun moyen de vérifier si les certificats des clients ont été révoqués et le client aura toujours accès au VPN. Pour corriger cela, créez une liste de révocation de certificats (CRL) sur votre machine AC :
- ./easyrsa gen-crl
Cette action entraînera la création d’un fichier appelé crl.pem
. Transférez ce fichier vers votre serveur OpenVPN en toute sécurité :
- scp ~/EasyRSA-3.0.4/pki/crl.pem sammy@your_server_ip:/tmp
Sur votre serveur OpenVPN, copiez ce fichier dans votre répertoire /etc/openvpn/
:
- sudo cp /tmp/crl.pem /etc/openvpn
Ensuite, ouvrez le fichier de configuration du serveur OpenVPN :
- sudo nano /etc/openvpn/server.conf
Au bas du fichier, ajoutez l’option crl-verify
, qui demandera au serveur OpenVPN de vérifier la liste de révocation de certificats que nous avons créée à chaque tentative de connexion :
crl-verify crl.pem
Enregistrez et fermez le fichier.
Enfin, redémarrez OpenVPN pour implémenter la révocation du certificat :
- sudo systemctl restart openvpn@server
Le client ne devrait plus être en mesure de se connecter au serveur en utilisant les anciennes informations d’identification.
Pour révoquer d’autres clients, procédez comme suit :
./easyrsa revoke client-name
crl.pem
sur votre serveur OpenVPN et copiez-le dans le répertoire /etc/openvpn
pour écraser l’ancienne liste.Vous pouvez utiliser cette méthode processus pour révoquer tout certificat que vous avez précédemment émis pour votre serveur.
Vous naviguez désormais en toute sécurité sur Internet en protégeant votre identité, votre emplacement et votre trafic des espions et des censeurs.
Pour configurer davantage de clients, il vous suffit de suivre les étapes 4 et 9-11 pour chaque appareil supplémentaire. Pour révoquer l’accès aux clients, il suffit de suivre l’étape 12.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
Sign up for Infrastructure as a Newsletter.
Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.
Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.