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 Internet. 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 approuvé.

Cela dit, ce didacticiel vous apprend à configurer OpenVPN, une solution VPN open source Secure Socket Layer (SSL), sous Debian 8.

Conditions préalables

Ce tutoriel suppose que vous disposiez des éléments suivants:

  • Une nouvelle goutte de Debian 8.1

  • Un utilisateur root

  • Facultatif: à l’issue de ce didacticiel, utilisez un compte non-root compatible avec sudo pour la maintenance générale. vous pouvez en configurer un en suivant les étapes 2 et 3 de this tutorial

Étape 1 - Installez OpenVPN

Avant d’installer un paquet, mettez à jour l’index du paquet apt.

apt-get update

Nous pouvons maintenant 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 + pour que nous puissions l’intégrer à notre configuration. Cela peut être fait avec une 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érez le trafic Web vers la destination

  3. Empêcher les demandes DNS de fuir en dehors de la connexion VPN

  4. Autorisations d’installation

Tout d’abord, nous doublerons la longueur de la clé RSA utilisée lors de la génération des clés de serveur et de 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

Remplacez + dh1024.pem + par + dh2048.pem +, de sorte que la ligne se lise maintenant:

/etc/openvpn/server.conf

dh

Deuxièmement, nous veillerons à rediriger tout le trafic vers le bon emplacement. Toujours dans + server.conf +, défilez devant 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 transfère 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 indiquerons au serveur d’utiliser https://opendns.com [OpenDNS] pour la résolution DNS dans la mesure du possible. Cela peut aider à empêcher les demandes DNS de fuir en dehors de la connexion VPN. Immédiatement après le bloc précédemment modifié, éditez les éléments suivants:

/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écommenter + 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 allons définir les permissions dans + server.conf +:

/etc/openvpn/server.conf

# You can uncomment this out on
# non-Windows systems.
;user nobody
;group nogroup

Décommentez à la fois + utilisateur nobody + et + groupe 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. Au lieu de cela, nous limiterons OpenVPN à l’utilisateur * nobody * et au groupe * nogroup *. Il s’agit d’un utilisateur sans privilège, sans capacités de connexion par défaut, souvent réservé à l’exécution d’applications non fiables telles que les serveurs Web.

Enregistrez maintenant 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 client vers Internet. Sinon, le trafic s’arrêtera sur le 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 ce paramètre permanent afin que ce paramètre persiste après le redémarrage du serveur. Ouvrez le fichier de configuration + sysctl + en utilisant nano ou votre éditeur de texte préféré.

nano /etc/sysctl.conf

En haut du fichier + sysctl +, vous verrez:

/etc/openvpn/server.conf

# Uncomment the next line to enable packet forwarding for IPv4

Décommenter + 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

Enregistrez vos modifications et quittez.

Étape 4 - Installer et configurer ufw

UFW est une interface 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 plus d’utilisations pour UFW, voir https://www.digitalocean.com/community/articles/how-to-setup-a-firewall-with-ufw-on-an-ubuntu-and-de-bian-cloud- serveur [Comment installer un pare-feu avec UFW sur un serveur cloud Ubuntu et Debian].

Commencez par installer le paquetage + ufw +.

apt-get install ufw

Deuxièmement, configurez 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=""

Ceci doit être changé de + DROP + à + ​​+ ACCEPT +. Cela devrait ressembler à ceci une fois terminé:

/ etc / default / ufw

DEFAULT_FORWARD_POLICY=""

Sauvegarder et quitter.

Nous ajouterons ensuite 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 dans pour * RÈGLES OPENVPN *:

/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
#










# 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 de UFW renvoie l’invite suivante:

Command may disrupt existing ssh connections. Proceed with operation (y|n)?

Répondre + 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 devrait 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 l’autorité de certification.

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 que le serveur doit authentifier le certificat du client avant que la confiance mutuelle ne soit établie. Pour ce faire, nous utiliserons les scripts d’Easy RSA.

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 en utilisant nano ou votre éditeur de texte préféré.

nano /etc/openvpn/easy-rsa/vars

Les variables ci-dessous marquées dans doivent être modifiées en fonction de vos préférences.

/ etc / openvpn / easy-rsa / vars

export KEY_COUNTRY=""
export KEY_PROVINCE=""
export KEY_CITY=""
export KEY_ORG=""
export KEY_EMAIL=""
export KEY_OU=""

Dans le même fichier + vars +, éditez également cette ligne ci-dessous. Pour simplifier, nous utiliserons + serveur + comme nom de clé. Si vous souhaitez utiliser un nom différent, vous devez également mettre à jour les fichiers de configuration OpenVPN qui font 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=""

Remplacez la valeur par défaut de + KEY_NAME + EasyRSA + par le nom de serveur souhaité. Ce tutoriel utilisera le nom ++.

/ etc / openvpn / easy-rsa / vars

# X509 Subject Field
export KEY_NAME=""

Sauvegarder et quitter.

Ensuite, nous allons générer les paramètres Diffie-Hellman en utilisant un outil OpenSSL intégré appelé + dhparam; cela peut prendre plusieurs minutes.

L’indicateur + -out + spécifie où sauvegarder 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é.

Premièrement, nous allons basculer dans le répertoire + easy-rsa +.

cd /etc/openvpn/easy-rsa

Nous pouvons maintenant commencer à configurer l’AC elle-même. Commencez par initialiser l’infrastructure à clé publique (PKI).

Faites attention au * point (.) * Et au * espace * devant la commande +. / Vars +. Cela signifie le répertoire de travail actuel (source).

. ./vars

Ensuite, nous effacerons toutes les autres clés susceptibles d’interférer avec notre installation.

./clean-all

Enfin, nous allons construire l’autorité de certification à l’aide d’une commande OpenSSL. Cette commande vous demandera de confirmer les variables de «nom distinctif» entrées précédemment. Appuyez sur + ENTER + pour accepter les valeurs existantes.

./build-ca

Appuyez sur + ENTER + pour passer à travers 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érez 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. Ceci a été spécifié précédemment sous la forme + KEY_NAME + dans votre fichier de configuration. La valeur par défaut pour ce tutoriel est + serveur +.

./build-key-server

Encore une fois, la sortie demandera la confirmation du nom distinctif. Appuyez sur + ENTER + pour accepter les valeurs définies par défaut. 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 en blanc, appuyez simplement sur ENTREE 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éplacer les certificats de serveur et les clés

Nous allons maintenant copier le certificat et la clé dans + / etc / openvpn +, car OpenVPN recherchera dans ce répertoire l’AC, le certificat et la clé du serveur.

cp /etc/openvpn/easy-rsa/keys/{.crt,.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 le statut.

service openvpn start
service openvpn status

La commande status va retourner 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, dans le résultat ci-dessus, vous devriez trouver + Active: actif (sorti) depuis …​ + au lieu de + Active: inactif (mort) depuis …​ +.

Votre serveur OpenVPN est maintenant opérationnel. Si le message d’état indique que le VPN n’est pas en cours d’exécution, consultez le fichier + / var / log / syslog + pour rechercher des 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’ici, 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 périphérique client qui se connectera au VPN.

Bâtiment 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é. Cela est préférable à la génération d’un certificat général et d’une clé à utiliser avec tous les périphériques clients.

Pour créer des identifiants d’authentification distincts pour chaque appareil que vous souhaitez connecter au VPN, vous devez effectuer cette étape pour chaque appareil, en remplaçant le nom + client1 + par un nom différent, tel que + client2 + ou + iphone2 +. Avec des identifiants distincts par appareil, ils peuvent ultérieurement être désactivés individuellement sur le serveur, si nécessaire. Les exemples restants de ce tutoriel 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 encore, il vous sera demandé de modifier ou de confirmer les variables Nom distinctif et ces deux invites qui doivent rester vierges. 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 construction nécessitent une réponse (+ y +):

Sign the certificate? [y/n]
1 out of 1 certificate requests certified, commit? [y/n]

Vous recevrez ensuite le résultat suivant, confirmant la réussite de la création 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 en` + .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é.

  • Remarque: * Le nom de votre duplicata + client.ovpn n’a pas besoin d’être lié au périphérique client. L’application OpenVPN côté client utilisera le nom de fichier comme identifiant de la connexion VPN elle-même. Au lieu de cela, vous devez dupliquer + client.ovpn + comme vous voulez que la balise 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 + en utilisant nano ou votre éditeur de texte préféré.

nano /etc/openvpn/easy-rsa/keys/

Commencez par éditer la ligne commençant par + remote +. Remplacez + mon-serveur-1 + par `++ '.

/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  1194

Ensuite, recherchez la zone ci-dessous et décommentez + utilisateur nobody + et + groupe nogroup +, comme nous l’avions fait dans + server.conf + à l’étape 1. * Remarque: * Ceci ne s’applique pas à Windows, vous pouvez donc le sauter. 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 périphériques clients

Rappelez-vous des étapes ci-dessus que nous avons créé les clés et les certificats clients, 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 de client, de clé et de modèle de profil dans un dossier de notre ordinateur local ou sur un autre périphérique client.

Dans cet exemple, notre périphérique + client1 + requiert son certificat et sa clé, situés sur le serveur dans:

  • + / etc / openvpn / easy-rsa / touches / .crt +

  • + / etc / openvpn / easy-rsa / touches / .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 du périphérique, vous souhaitez que l’application utilise le protocole SFTP (protocole de transfert de fichiers SSH) ou SCP (Copie sécurisée) sur le backend. Cela transportera les fichiers d’authentification VPN de votre client via une connexion chiffrée.

Voici un exemple de commande SCP utilisant notre exemple + client1 +. Il place le fichier + client1.key + dans le répertoire * Téléchargements * de l’ordinateur local.

scp root@your-server-ip:/etc/openvpn/easy-rsa/keys/client1.key Downloads/

Voici plusieurs outils et didacticiels permettant de transférer en toute sécurité des fichiers du serveur vers un ordinateur local:

À la fin de cette section, assurez-vous que ces quatre fichiers se trouvent sur votre périphérique * client *:

  • ` + client1 + `.crt

  • ` + client1 + `.key

  • + client.ovpn +

  • + ca.crt +

Étape 9 - Création d’un profil OpenVPN unifié pour les périphériques clients

Il existe plusieurs méthodes pour gérer les fichiers client, mais la plus simple consiste à utiliser un profil unified. Ceci est créé en modifiant le fichier 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 + client.ovpn + doit être importé dans l’application OpenVPN du client.

La zone indiquée ci-dessous nécessite que les trois lignes affichées soient commentées afin que nous puissions 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 allons ajouter 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

Différentes plates-formes ont des applications plus conviviales pour se connecter à ce serveur OpenVPN. Pour des instructions spécifiques à la plate-forme, voir l’étape 5 à l’adresse https://www.digitalocean.com/community/tutorials/how-to-set-up-an-openvpn-server-on-ubuntu-14-04#step-5- --installing-the-client-profile [ce tutoriel].

Conclusion

Toutes nos félicitations! Vous avez maintenant un serveur OpenVPN et un fichier client opérationnels.

Depuis votre client OpenVPN, vous pouvez tester la connexion à l’aide de https://www.google.com/search?q=what%20is%20my%20ipGoogle pour révéler votre adresse IP publique]. Sur le client, chargez-le une fois avant de commencer la connexion OpenVPN et une fois après. L’adresse IP devrait changer.