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):
-
Serveur sécurisé avec cryptage de niveau supérieur
-
Transférez le trafic Web vers la destination
-
Empêcher les demandes DNS de fuir en dehors de la connexion VPN
-
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.