Comment configurer un serveur OpenVPN sur Debian 8

De Get Docs
Aller à :navigation, rechercher

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) :

  1. Serveur sécurisé avec cryptage de niveau supérieur
  2. Transférer le trafic Web vers la destination
  3. Empêcher les requêtes DNS de fuir en dehors de la connexion VPN
  4. 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 :

À 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.