Comment configurer un serveur OpenVPN sur Debian 8
Introduction
OpenVPN est une application VPN open source qui vous permet de créer et de rejoindre un réseau privé en toute sécurité sur l'Internet public. En bref, cela permet à l'utilisateur final de masquer les connexions et de naviguer de manière plus sécurisée sur un réseau non fiable.
Cela dit, ce didacticiel vous apprend à configurer OpenVPN, une solution VPN SSL (Secure Socket Layer) open source, sur Debian 8.
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
Ce didacticiel suppose que vous disposez des éléments suivants :
- Une nouvelle droplet Debian 8.1
- Un utilisateur racine
- Facultatif : une fois ce didacticiel terminé, utilisez un compte non root compatible sudo pour la maintenance générale ; vous pouvez en configurer un en suivant les étapes 2 et 3 de ce tutoriel
Étape 1 — Installer OpenVPN
Avant d'installer des packages, mettez à jour l'index des packages apt.
apt-get update
Maintenant, nous pouvons installer le serveur OpenVPN avec easy-RSA pour le cryptage.
apt-get install openvpn easy-rsa
Étape 2 — Configurer OpenVPN
L'exemple de fichier de configuration du serveur VPN doit être extrait vers /etc/openvpn
afin que nous puissions l'incorporer dans notre configuration. Cela peut être fait avec une seule commande :
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf
Une fois extrait, ouvrez le fichier de configuration du serveur à l'aide de nano ou de votre éditeur de texte préféré.
nano /etc/openvpn/server.conf
Dans ce fichier, nous devrons apporter quatre modifications (chacune sera expliquée en détail) :
- Serveur sécurisé avec cryptage de niveau supérieur
- Transférer le trafic Web vers la destination
- Empêcher les requêtes DNS de fuir en dehors de la connexion VPN
- Autorisations de configuration
Tout d'abord, nous allons doubler la longueur de la clé RSA utilisée lors de la génération des clés serveur et client. Après le bloc de commentaires principal et plusieurs autres morceaux, recherchez la ligne qui se lit comme suit :
/etc/openvpn/server.conf
# Diffie hellman parameters. # Generate your own with: # openssl dhparam -out dh1024.pem 1024 # Substitute 2048 for 1024 if you are using # 2048 bit keys. dh dh1024.pem
Remplacez dh1024.pem
par dh2048.pem
, de sorte que la ligne indique maintenant :
/etc/openvpn/server.conf
dh dh2048.pem
Deuxièmement, nous nous assurerons de rediriger tout le trafic vers le bon emplacement. Toujours dans server.conf
, faites défiler d'autres blocs de commentaires et recherchez la section suivante :
/etc/openvpn/server.conf
# If enabled, this directive will configure # all clients to redirect their default # network gateway through the VPN, causing # all IP traffic such as web browsing and # and DNS lookups to go through the VPN # (The OpenVPN server machine may need to NAT # or bridge the TUN/TAP interface to the internet # in order for this to work properly). ;push "redirect-gateway def1 bypass-dhcp"
Décommentez push "redirect-gateway def1 bypass-dhcp"
afin que le serveur VPN transmette le trafic Web des clients à sa destination. Cela devrait ressembler à ceci une fois terminé:
/etc/openvpn/server.conf
push "redirect-gateway def1 bypass-dhcp"
Troisièmement, nous dirons au serveur d'utiliser OpenDNS pour la résolution DNS lorsque cela est possible. Cela peut aider à empêcher les requêtes DNS de fuir en dehors de la connexion VPN. Immédiatement après le bloc précédemment modifié, éditez ce qui suit :
/etc/openvpn/server.conf
# Certain Windows-specific network settings # can be pushed to clients, such as DNS # or WINS server addresses. CAVEAT: # http://openvpn.net/faq.html#dhcpcaveats # The addresses below refer to the public # DNS servers provided by opendns.com. ;push "dhcp-option DNS 208.67.222.222" ;push "dhcp-option DNS 208.67.220.220"
Décommentez push "dhcp-option DNS 208.67.222.222"
et push "dhcp-option DNS 208.67.220.220"
. Cela devrait ressembler à ceci une fois terminé:
/etc/openvpn/server.conf
push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 208.67.220.220"
Quatrièmement, nous définirons les autorisations dans server.conf
:
/etc/openvpn/server.conf
# You can uncomment this out on # non-Windows systems. ;user nobody ;group nogroup
Décommentez à la fois user nobody
et group nogroup
. Cela devrait ressembler à ceci une fois terminé:
/etc/openvpn/server.conf
user nobody group nogroup
Par défaut, OpenVPN s'exécute en tant qu'utilisateur root et dispose donc d'un accès root complet au système. Nous limiterons plutôt OpenVPN à l'utilisateur nobody et au groupe nogroup. Il s'agit d'un utilisateur non privilégié sans capacités de connexion par défaut, souvent réservé à l'exécution d'applications non approuvées telles que des serveurs Web.
Maintenant, enregistrez vos modifications et quittez.
Étape 3 - Activer le transfert de paquets
Dans cette section, nous dirons au noyau du serveur de transférer le trafic des services clients vers Internet. Sinon, le trafic s'arrêtera au niveau du serveur.
Activez le transfert de paquets pendant l'exécution en entrant cette commande :
echo 1 > /proc/sys/net/ipv4/ip_forward
Ensuite, nous devrons rendre cela permanent afin que ce paramètre persiste après un redémarrage du serveur. Ouvrez le fichier de configuration sysctl
à l'aide de nano ou de votre éditeur de texte préféré.
nano /etc/sysctl.conf
Près du haut du fichier sysctl
, vous verrez :
/etc/openvpn/server.conf
# Uncomment the next line to enable packet forwarding for IPv4 #net.ipv4.ip_forward=1
Décommentez net.ipv4.ip_forward
. Cela devrait ressembler à ceci une fois terminé:
/etc/openvpn/server.conf
# Uncomment the next line to enable packet forwarding for IPv4 net.ipv4.ip_forward=1
Enregistrez vos modifications et quittez.
Étape 4 - Installer et configurer ufw
UFW est un frontal pour IPTables. Nous n'avons besoin que de quelques règles et modifications de configuration. Ensuite, nous allons activer le pare-feu. Comme référence pour d'autres utilisations d'UFW, voir Comment configurer un pare-feu avec UFW sur un serveur cloud Ubuntu et Debian.
Tout d'abord, installez le package ufw
.
apt-get install ufw
Deuxièmement, définissez UFW pour autoriser SSH :
ufw allow ssh
Ce tutoriel utilisera OpenVPN sur UDP, donc UFW doit également autoriser le trafic UDP sur le port 1194
.
ufw allow 1194/udp
La politique de transfert UFW doit également être définie. Nous le ferons dans le fichier de configuration principal.
nano /etc/default/ufw
Recherchez la ligne suivante :
/etc/default/ufw
DEFAULT_FORWARD_POLICY="DROP"
Cela doit être changé de DROP
à ACCEPT
. Cela devrait ressembler à ceci une fois terminé:
/etc/default/ufw
DEFAULT_FORWARD_POLICY="ACCEPT"
Sauvegarder et quitter.
Ensuite, nous ajouterons des règles UFW supplémentaires pour la traduction d'adresses réseau et le masquage IP des clients connectés.
nano /etc/ufw/before.rules
Ensuite, ajoutez la zone en rouge pour OPENVPN RULES :
/etc/ufw/before.rules
# # 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 eth0 -A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE COMMIT # END OPENVPN RULES # Don't delete these required lines, otherwise there will be errors *filter
Sauvegarder et quitter.
Avec les modifications apportées à UFW, nous pouvons maintenant l'activer. Entrez dans l'invite de commande :
ufw enable
L'activation d'UFW renverra l'invite suivante :
Command may disrupt existing ssh connections. Proceed with operation (y|n)?
Répondez y
. Le résultat sera cette sortie :
Firewall is active and enabled on system startup
Pour vérifier les règles de pare-feu principales d'UFW :
ufw status
La commande status doit renvoyer ces entrées :
Status: active To Action From -- ------ ---- 22 ALLOW Anywhere 1194/udp ALLOW Anywhere 22 (v6) ALLOW Anywhere (v6) 1194/udp (v6) ALLOW Anywhere (v6)
Étape 5 - Configurer et créer l'autorité de certification
OpenVPN utilise des certificats pour chiffrer le trafic.
Dans cette section, nous allons configurer notre propre autorité de certification (CA) en deux étapes : (1) configurer les variables et (2) générer la CA.
OpenVPN prend en charge l'authentification bidirectionnelle basée sur des certificats, ce qui signifie que le client doit authentifier le certificat du serveur et le serveur doit authentifier le certificat client avant que la confiance mutuelle ne soit établie. Nous utiliserons les scripts d'Easy RSA pour ce faire.
Première copie sur les scripts de génération Easy-RSA.
cp -r /usr/share/easy-rsa/ /etc/openvpn
Ensuite, créez un répertoire pour héberger la clé.
mkdir /etc/openvpn/easy-rsa/keys
Ensuite, nous allons définir les paramètres de notre certificat. Ouvrez le fichier de variables à l'aide de nano ou de votre éditeur de texte préféré.
nano /etc/openvpn/easy-rsa/vars
Les variables ci-dessous marquées en rouge doivent être modifiées selon vos préférences.
/etc/openvpn/easy-rsa/vars
export KEY_COUNTRY="US" export KEY_PROVINCE="TX" export KEY_CITY="Dallas" export KEY_ORG="My Company Name" export KEY_EMAIL="[email protected]" export KEY_OU="MYOrganizationalUnit"
Dans le même fichier vars
, modifiez également cette ligne indiquée ci-dessous. Pour plus de simplicité, nous utiliserons server
comme nom de clé. Si vous souhaitez utiliser un nom différent, vous devrez également mettre à jour les fichiers de configuration OpenVPN faisant référence à server.key
et server.crt
.
Ci-dessous, dans le même fichier, nous spécifierons le bon certificat. Recherchez la ligne, juste après le bloc précédemment modifié qui se lit
/etc/openvpn/easy-rsa/vars
# X509 Subject Field export KEY_NAME="EasyRSA"
Remplacez la valeur par défaut de KEY_NAME
de EasyRSA
par le nom de serveur souhaité. Ce didacticiel utilisera le nom server
.
/etc/openvpn/easy-rsa/vars
# X509 Subject Field export KEY_NAME="server"
Sauvegarder et quitter.
Ensuite, nous allons générer les paramètres Diffie-Helman à l'aide d'un outil OpenSSL intégré appelé dhparam
; cela peut prendre plusieurs minutes.
Le drapeau -out
spécifie où enregistrer les nouveaux paramètres.
openssl dhparam -out /etc/openvpn/dh2048.pem 2048
Notre certificat est maintenant généré, et il est temps de générer une clé.
Tout d'abord, nous allons basculer dans le répertoire easy-rsa
.
cd /etc/openvpn/easy-rsa
Maintenant, nous pouvons commencer à configurer l'autorité de certification elle-même. Tout d'abord, initialisez l'infrastructure à clé publique (PKI).
Faites attention au point (.) et espace devant la commande ./vars
. Cela signifie le répertoire de travail actuel (source).
. ./vars
L'avertissement suivant sera imprimé. Ne vous inquiétez pas, car le répertoire spécifié dans l'avertissement est vide. NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys
.
Ensuite, nous effacerons toutes les autres clés susceptibles d'interférer avec notre installation.
./clean-all
Enfin, nous allons construire l'AC à l'aide d'une commande OpenSSL. Cette commande vous invitera à confirmer les variables « Nom distinctif » qui ont été saisies précédemment. Appuyez sur ENTER
pour accepter les valeurs existantes.
./build-ca
Appuyez sur ENTER
pour parcourir chaque invite puisque vous venez de définir leurs valeurs dans le fichier vars
.
L'autorité de certification est maintenant configurée.
Étape 6 - Générer un certificat et une clé pour le serveur
Dans cette section, nous allons configurer et lancer notre serveur OpenVPN.
Tout d'abord, toujours à partir de /etc/openvpn/easy-rsa
, construisez votre clé avec le nom du serveur. Cela a été spécifié précédemment comme KEY_NAME
dans votre fichier de configuration. La valeur par défaut pour ce didacticiel est server
.
./build-key-server server
Encore une fois, la sortie demandera la confirmation du nom distinctif. Appuyez sur ENTER
pour accepter les valeurs par défaut définies. Cette fois, il y aura deux invites supplémentaires.
Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
Les deux doivent être laissés vides, il suffit donc d'appuyer sur ENTER pour les parcourir.
Deux requêtes supplémentaires à la fin nécessitent une réponse positive (y
) :
Sign the certificate? [y/n] 1 out of 1 certificate requests certified, commit? [y/n]
Vous serez alors invité avec ce qui suit, indiquant le succès.
OutputWrite out database with 1 new entries Data Base Updated
Étape 7 - Déplacez les certificats et les clés du serveur
Nous allons maintenant copier le certificat et la clé sur /etc/openvpn
, car OpenVPN recherchera dans ce répertoire l'autorité de certification, le certificat et la clé du serveur.
cp /etc/openvpn/easy-rsa/keys/{server.crt,server.key,ca.crt} /etc/openvpn
Vous pouvez vérifier que la copie a réussi avec :
ls /etc/openvpn
Vous devriez voir le certificat et les fichiers de clé du serveur.
À ce stade, le serveur OpenVPN est prêt à fonctionner. Démarrez-le et vérifiez l'état.
service openvpn start service openvpn status
La commande status renverra quelque chose à l'effet suivant :
Output* openvpn.service - OpenVPN service Loaded: loaded (/lib/systemd/system/openvpn.service; enabled) Active: active (exited) since Thu 2015-06-25 02:20:18 EDT; 9s ago Process: 2505 ExecStart=/bin/true (code=exited, status=0/SUCCESS) Main PID: 2505 (code=exited, status=0/SUCCESS)
Plus important encore, à partir de la sortie ci-dessus, vous devriez trouver Active: active (exited) since...
au lieu de Active: inactive (dead) since...
.
Votre serveur OpenVPN est maintenant opérationnel. Si le message d'état indique que le VPN ne fonctionne pas, consultez le fichier /var/log/syslog
pour les erreurs telles que :
Options error: --key fails with 'server.key': No such file or directory
Cette erreur indique que server.key
n'a pas été copié correctement dans /etc/openvpn
. Recopiez le fichier et réessayez.
Étape 8 - Générer des certificats et des clés pour les clients
Jusqu'à présent, nous avons installé et configuré le serveur OpenVPN, créé une autorité de certification et créé le certificat et la clé du serveur. Dans cette étape, nous utilisons l'autorité de certification du serveur pour générer des certificats et des clés pour chaque appareil client qui se connectera au VPN.
Création de clés et de certificats
Il est idéal que chaque client se connectant au VPN ait son propre certificat et sa propre clé. Ceci est préférable à la génération d'un certificat général et d'une clé à utiliser sur tous les appareils clients.
Remarque : Par défaut, OpenVPN n'autorise pas les connexions simultanées au serveur à partir de clients utilisant le même certificat et la même clé. (Voir duplicate-cn
dans /etc/openvpn/server.conf
.)
Pour créer des identifiants d'authentification distincts pour chaque appareil que vous avez l'intention de connecter au VPN, vous devez effectuer cette étape pour chaque appareil, mais changer le nom client1
ci-dessous en quelque chose de différent tel que client2
ou [X223X ]. Avec des informations d'identification distinctes par appareil, elles peuvent ensuite être désactivées individuellement sur le serveur, si nécessaire. Les exemples restants de ce didacticiel utiliseront client1
comme nom de notre exemple de périphérique client.
Comme nous l'avons fait avec la clé du serveur, nous en construisons maintenant une pour notre exemple client1
. Vous devriez toujours travailler avec /etc/openvpn/easy-rsa
.
./build-key client1
Une fois de plus, il vous sera demandé de modifier ou de confirmer les variables du nom distinctif et ces deux invites qui doivent rester vides. Appuyez sur ENTER
pour accepter les valeurs par défaut.
Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
Comme précédemment, ces deux confirmations à la fin du processus de génération nécessitent une réponse (y
) :
Sign the certificate? [y/n] 1 out of 1 certificate requests certified, commit? [y/n]
Vous recevrez alors la sortie suivante, confirmant la réussite de la construction de la clé.
Write out database with 1 new entries. Data Base Updated
Ensuite, nous copierons la clé générée dans le répertoire Easy-RSA keys
que nous avons créé précédemment. Notez que nous changeons l'extension de .conf
à .ovpn
. C'est pour correspondre à la convention.
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/easy-rsa/keys/client.ovpn
Vous pouvez répéter cette section pour chaque client, en remplaçant client1
par le nom de client approprié tout au long.
Remarque : Le nom de votre client.ovpn
dupliqué n'a pas besoin d'être lié à l'appareil client. L'application OpenVPN côté client utilisera le nom de fichier comme identifiant pour la connexion VPN elle-même. Au lieu de cela, vous devez dupliquer client.ovpn
sur ce que vous voulez que l'étiquette de nom du VPN soit dans votre système d'exploitation. Par exemple : work.ovpn sera identifié comme work, school.ovpn comme school, etc.
Nous devons modifier chaque fichier client pour inclure l'adresse IP du serveur OpenVPN afin qu'il sache à quoi se connecter. Ouvrez client.ovpn
à l'aide de nano ou de votre éditeur de texte préféré.
nano /etc/openvpn/easy-rsa/keys/client.ovpn
Tout d'abord, modifiez la ligne commençant par remote
. Remplacez my-server-1
par your_server_ip
.
/etc/openvpn/easy-rsa/keys/client.ovpn
# 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
Ensuite, recherchez la zone ci-dessous et décommentez user nobody
et group nogroup
, comme nous l'avons fait dans server.conf
à l'étape 1. Remarque : Cela ne s'applique pas à Windows, vous pouvez donc l'ignorer. Cela devrait ressembler à ceci une fois terminé:
/etc/openvpn/easy-rsa/keys/client.ovpn
# Downgrade privileges after initialization (non-Windows only) user nobody group no group
Transfert de certificats et de clés vers des appareils clients
Rappelez-vous des étapes ci-dessus que nous avons créé les certificats et les clés client, et qu'ils sont stockés sur le serveur OpenVPN dans le répertoire /etc/openvpn/easy-rsa/keys
.
Pour chaque client, nous devons transférer les fichiers de certificat client, de clé et de modèle de profil vers un dossier sur notre ordinateur local ou un autre appareil client.
Dans cet exemple, notre appareil client1
nécessite son certificat et sa clé, situés sur le serveur dans :
/etc/openvpn/easy-rsa/keys/client1.crt
/etc/openvpn/easy-rsa/keys/client1.key
Les fichiers ca.crt
et client.ovpn
sont les mêmes pour tous les clients. Téléchargez également ces deux fichiers ; notez que le fichier ca.crt
se trouve dans un répertoire différent des autres.
/etc/openvpn/easy-rsa/keys/client.ovpn
/etc/openvpn/ca.crt
Bien que les applications exactes utilisées pour effectuer ce transfert dépendent de votre choix et du système d'exploitation de l'appareil, vous souhaitez que l'application utilise SFTP (protocole de transfert de fichiers SSH) ou SCP (Secure Copy) sur le backend. Cela transportera les fichiers d'authentification VPN de votre client sur une connexion cryptée.
Voici un exemple de commande SCP utilisant notre exemple client1
. Il place le fichier client1.key
dans le répertoire Téléchargements sur l'ordinateur local.
scp root@your-server-ip:/etc/openvpn/easy-rsa/keys/client1.key Downloads/
Voici plusieurs outils et tutoriels pour transférer en toute sécurité des fichiers du serveur vers un ordinateur local :
- WinSCP
- Comment utiliser SFTP pour transférer des fichiers en toute sécurité avec un serveur distant
- Comment utiliser Filezilla pour transférer et gérer des fichiers en toute sécurité sur votre VPS
À la fin de cette section, assurez-vous d'avoir ces quatre fichiers sur votre appareil client :
- ``client1
.crt
- ``client1
.key
client.ovpn
ca.crt
Étape 9 - Création d'un profil OpenVPN unifié pour les appareils clients
Il existe plusieurs méthodes pour gérer les fichiers clients mais la plus simple utilise un profil unifié. Celui-ci est créé en modifiant le fichier de modèle client.ovpn
pour inclure l'autorité de certification du serveur, ainsi que le certificat du client et sa clé. Une fois fusionné, seul le profil unique client.ovpn
doit être importé dans l'application OpenVPN du client.
La zone indiquée ci-dessous nécessite que les trois lignes indiquées soient commentées afin que nous puissions à la place inclure le certificat et la clé directement dans le fichier client.ovpn
. Cela devrait ressembler à ceci une fois terminé:
/etc/openvpn/easy-rsa/keys/client.ovpn
# SSL/TLS parms. # . . . ;ca ca.crt ;cert client.crt ;key client.key
Enregistrez les modifications et quittez. Nous ajouterons les certificats par code.
Tout d'abord, ajoutez l'autorité de certification.
echo '<ca>' >> /etc/openvpn/easy-rsa/keys/client.ovpn cat /etc/openvpn/ca.crt >> /etc/openvpn/easy-rsa/keys/client.ovpn echo '</ca>' >> /etc/openvpn/easy-rsa/keys/client.ovpn
Deuxièmement, ajoutez le certificat.
echo '<cert>' >> /etc/openvpn/easy-rsa/keys/client.ovpn cat /etc/openvpn/easy-rsa/keys/client1.crt >> /etc/openvpn/easy-rsa/keys/client.ovpn echo '</cert>' >> /etc/openvpn/easy-rsa/keys/client.ovpn
Troisièmement et enfin, ajoutez la clé.
echo '<key>' >> /etc/openvpn/easy-rsa/keys/client.ovpn cat /etc/openvpn/easy-rsa/keys/client1.key >> /etc/openvpn/easy-rsa/keys/client.ovpn echo '</key>' >> /etc/openvpn/easy-rsa/keys/client.ovpn
Nous avons maintenant un profil client unifié. En utilisant scp
, vous pouvez ensuite copier le fichier client.ovpn
sur votre deuxième système.
Étape 10 - Installation du profil client
Diverses plates-formes ont des applications plus conviviales pour se connecter à ce serveur OpenVPN. Pour obtenir des instructions spécifiques à la plate-forme, consultez l'étape 5 de ce didacticiel.
Conclusion
Toutes nos félicitations! Vous avez maintenant un serveur OpenVPN et un fichier client fonctionnels.
Depuis votre client OpenVPN, vous pouvez tester la connexion en utilisant Google pour révéler votre adresse IP publique. Sur le client, chargez-le une fois avant de démarrer la connexion OpenVPN et une fois après. L'adresse IP devrait changer.