Comment configurer un serveur OpenVPN sur Ubuntu 20.04
- 2084
- 434
- Rayan Lefebvre
Ubuntu 20.04 Focal Fossa est le dernier support à long terme de l'une des distributions Linux les plus utilisées. Dans ce tutoriel, nous verrons comment utiliser ce système d'exploitation pour créer un serveur OpenVPN et comment créer un .OVPN
fichier que nous utiliserons pour y connecter à partir de notre machine client.
Dans ce tutoriel, vous apprendrez:
- Comment générer une autorité de certificat
- Comment générer un certificat et une clé du serveur et du client
- Comment signer un certificat avec l'autorité de certificat
- Comment créer des paramètres diffie-hellman
- Comment générer une clé TLS-AUTH
- Comment configurer le serveur OpenVPN
- Comment générer un .Fichier OVPN pour se connecter au VPN
Exigences et conventions logicielles utilisées
Catégorie | Exigences, conventions ou version logicielle utilisée |
---|---|
Système | Ubuntu 20.04 FOCAL FOSSA |
Logiciel | OpenVPN, UFW, Easy-RSA |
Autre | Permissions racinaires pour effectuer des tâches administratives |
Conventions | # - Exige que les commandes Linux soient exécutées avec des privilèges racine soit directement en tant qu'utilisateur racine, soit par l'utilisation de Sudo commande$ - Exige que les commandes Linux soient exécutées en tant qu'utilisateur non privilégié régulier |
Configuration du scénario
Avant de procéder à la configuration réelle VPN, parlons des conventions et de la configuration que nous adopterons dans ce tutoriel.
Nous utiliserons deux machines, toutes deux alimentées par Ubuntu 20.04 FOCAL FOSSA. Le premier, camachine
sera utilisé pour héberger notre Autorité de certification; la deuxième, openvpnmachine
sera celui que nous installerons comme le réel VPN serveur. Il est possible d'utiliser la même machine à deux fins, mais ce serait moins sécurisé, car une personne violant le serveur, pourrait «imiter» l'autorité de certificat et l'utiliser pour signer des certificats indésirables (le problème n'est particulièrement pertinent que si vous prévoyez d'avoir plus d'un serveur ou si vous prévoyez d'utiliser le même CA à d'autres fins). Pour déplacer des fichiers entre une machine et l'autre, nous utiliserons le SCP
(Secure Copy) Commande. Les 10 étapes principales que nous serons effectuées sont les suivantes:
- Génération de l'autorité de certificat;
- Génération de la clé de serveur et de la demande de certificat;
- Signature de la demande de certificat de serveur avec le CA;
- Génération des paramètres Diffie-Hellman sur le serveur;
- Génération de la clé TLS-AUTH sur le serveur;
- Configuration OpenVPN;
- Configuration de réseautage et pare-feu (UFW) sur le serveur;
- Génération d'une clé client et d'une demande de certificat;
- Signature du certificat client avec le CA;
- Création du client .Fichier OVPN utilisé pour se connecter au VPN.
Étape 1 - Génération de l'autorité de certificat (CA)
La première étape de notre voyage consiste dans la création du Autorité de certification sur la machine dédiée. Nous travaillerons comme un utilisateur improvisé pour générer les fichiers nécessaires. Avant de commencer, nous devons installer le Easy-RSA
emballer:
$ sudo apt-get update && sudo apt-get -y installer easy-rsa
Avec le package installé, nous pouvons utiliser le faire du cadir
Commande pour générer un répertoire contenant les outils et fichiers de configuration nécessaires, dans ce cas, nous l'appellerons autorité de certification
. Une fois créé, nous nous déplacerons à l'intérieur:
$ Make-Cadir Certificate_Authority && CD Certificate_authority
À l'intérieur du répertoire, nous trouverons un fichier appelé varbac
. Dans le fichier, nous pouvons définir certaines variables qui seront utilisées pour la génération de certificat. Un ensemble commenté de ces variables peut être trouvé à la ligne 91
pour 96
. Supprimez simplement le commentaire et attribuez les valeurs appropriées:
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 @ exemple.net "set_var easyrsa_req_ou" mon unité organisationnelle "
Une fois les modifications enregistrées, nous pouvons procéder et générer le Pki (Infrastructure clé publique), avec la commande suivante qui créera un répertoire appelé pki
:
$ ./ Easyrsa init-pki
Avec l'infrastructure en place, nous pouvons générer notre clé CA et notre certificat. Après avoir lancé la commande ci-dessous, on nous demandera de saisir un phrase secrète pour le CA clé. Nous devrons fournir le même mot de passe chaque fois que nous interagirons avec l'autorité. UN Nom commun car le certificat doit également être fourni. Cela peut être une valeur arbitraire; Si nous appuyons simplement sur Entrée sur l'invite, la par défaut sera utilisée, dans ce cas CA facile-RSA
:
$ ./ Easyrsa Build-CA
Voici la sortie de la commande:
Remarque: Utilisation de la configuration facile-RSA depuis: ./ VARS à l'aide de SSL: OpenSSL OpenSSL 1.1.1d 10 septembre 2019 Entrez la nouvelle clé de passe de la clé CA: Rassemblez la nouvelle clé de passe de la touche CA: Génération de la clé privée RSA, module de 2048 bits de long (2 nombres premiers)… +++++… ++++++ E est 65537 (0x010001) peut 't charge / home / egdoc / certificate_authority / pki /.RND dans RNG 140296362980608: Erreur: 2406F079: Générateur de nombres aléatoires: Rand_load_file: Impossible d'ouvrir le fichier:… / crypto / rand / randfile.c: 98: filename = / home / egdoc / certificate_authority / pki /.RND vous êtes sur le point d'être invité à saisir des informations qui seront intégrées à votre demande de certificat. Ce que vous êtes sur le point d'entrer, c'est ce qu'on appelle un nom distingué ou un DN. Il y a pas mal de champs mais vous pouvez laisser un peu de blanc pour certains champs, il y aura une valeur par défaut, si vous entrez '.', Le champ sera laissé vide. ----- Nom commun (par exemple: votre utilisateur, l'hôte ou le nom du serveur) [Easy-RSA CA]: Création de CA terminée et vous pouvez maintenant importer et signer des demandes de certificat. Votre nouveau fichier de certificat CA pour la publication est à: / home / egdoc / certificate_authority / pki / ca.CRT
Le build-ca
La commande a généré deux fichiers; Leur chemin, par rapport à notre répertoire de travail, sont:
- PKI / CA.CRT
- PKI / Private / CA.clé
Le premier est le certificat public, le second est la clé qui sera utilisée pour signer le serveur et les certificats des clients, donc doit être maintenu aussi en sécurité que possible.
Une petite note, avant d'aller de l'avant: dans la sortie de la commande, vous avez peut-être remarqué un message d'erreur. Bien que l'erreur ne soit pas brassée, une solution de contournement pour l'éviter est de commenter la troisième ligne de la OpenSSL-Easyrsa.CNF
Fichier qui se trouve dans le répertoire de travail généré. Le problème est discuté sur le référentiel GitHub OpenSSL. Après la modification, le fichier doit ressembler à ceci:
# Pour une utilisation avec Easy-RSA 3.1 et openssl ou libressl randfile = $ env :: easyrsa_pki /.rnd
Cela dit, passons sur la machine que nous utiliserons comme serveur OpenVPN et générerons la clé de serveur et le certificat.
Étape 2 - Génération de la clé de serveur et de la demande de certificat
Dans cette étape, nous générerons la clé du serveur et la demande de certificat qui sera signée par l'autorité de certificat. Sur la machine, nous utiliserons comme serveur OpenVPN, nous devons installer le openvpn
, Easy-RSA
et ufw
paquets:
$ sudo apt-get update && sudo apt-get -y installer openvpn easy-rsa ufw
Pour générer la clé de serveur et la demande de certificat, nous effectuons la même procédure que nous avons utilisée sur la machine hébergeant l'autorité de certificat:
- Nous générons un répertoire de travail avec le
faire du cadir
commander, et déplacer à l'intérieur. - Configurer les variables contenues dans le
varbac
fichier qui sera utilisé pour le certificat. - Générer l'infrastructure de clé publique avec le
./ Easyrsa init-pki
commande.
Après ces étapes préliminaires, nous pouvons émettre la commande pour générer le certificat de serveur et le fichier de clé:
$ ./ Easyrsa Gen-Req Server Nopass
Cette fois, puisque nous avons utilisé le nopass
Option, nous ne serons pas invités à insérer un mot de passe pendant la génération de la clé de serveur. On nous inviterons toujours à entrer dans un Nom commun pour le certificat de serveur. Dans ce cas, la valeur par défaut utilisée est serveur
. C'est ce que nous utiliserons dans ce tutoriel:
Remarque: Utilisation de la configuration facile-RSA depuis: ./ VARS à l'aide de SSL: OpenSSL OpenSSL 1.1.1d 10 sept 2019 Génération d'une clé privée RSA… +++++… +++++ écrivant une nouvelle clé privée pour '/ home / egdoc / openvpnserver / pki / private / server.clé.9RU3WFZMBW '----- Il vous est demandé de saisir des informations qui seront intégrées à votre demande de certificat. Ce que vous êtes sur le point d'entrer, c'est ce qu'on appelle un nom distingué ou un DN. Il y a pas mal de champs mais vous pouvez laisser un peu de blanc pour certains champs, il y aura une valeur par défaut, si vous entrez '.', Le champ sera laissé vide. ----- Nom commun (par exemple: le nom de votre utilisateur, de l'hôte ou du serveur) [serveur]: la demande de clés et de certificat terminée. Vos fichiers sont: req: / home / egdoc / openvpnserver / pki / reqs / server.Clé req: / home / egdoc / openvpnserver / pki / private / server.clé
UN Demande de panneau de certificat et un Clé privée sera généré:
/ home / egdoc / openvpnserver / pki / reqs / serveur.req
/ home / egdoc / openvpnserver / pki / private / server.clé
.
Le fichier clé doit être déplacé à l'intérieur du / etc / openvpn
annuaire:
$ sudo mv pki / private / serveur.clé / etc / openvpn
La demande de certificat doit plutôt être envoyée à la machine d'autorité de certificat, à signer. On peut utiliser SCP
commande pour transférer le fichier:
$ SCP PKI / REQS / Server.req egdoc @ camachine: / home / egdoc /
Revenons à camachine
et autoriser le certificat.
Étape 3 - Signer le certificat de serveur avec le CA
Sur la machine de l'autorité de certificat, nous devons trouver le fichier que nous avons copié à l'étape précédente dans le $ Home
Répertoire de notre utilisateur:
$ LS ~ Certificate_Authority Server.req
La première chose que nous faisons est d'importer la demande de certificat. Pour accomplir la tâche, nous utilisons le Import-req
action du Easyrsa
scénario. Sa syntaxe c'est ce qui suit:
Import-req
Dans notre cas, cela se traduit par:
$ ./ Easyrsa Import-Req ~ / Server.serveur de req
La commande générera la sortie suivante:
Remarque: Utilisation de la configuration facile-RSA depuis: ./ VARS à l'aide de SSL: OpenSSL OpenSSL 1.1.1d 10 septembre 2019 La demande a été importée avec succès avec un nom court de: Server Vous pouvez maintenant utiliser ce nom pour effectuer des opérations de signature sur cette demande.
Pour signer la demande, nous utilisons le chant
Action, qui prend le type de demande comme premier argument (serveur, dans ce cas), et le short_basename
Nous avons utilisé dans la commande précédente (serveur). Nous courrons:
$ ./ Easyrsa Sign-Req Server Server
On nous demandera de confirmer que nous voulons signer le certificat et fournir le mot de passe que nous avons utilisé pour la clé de l'autorité de certificat. Si tout se passe comme prévu, le certificat sera créé:
Remarque: Utilisation de la configuration facile-RSA depuis: ./ VARS à l'aide de SSL: OpenSSL OpenSSL 1.1.1d 10 septembre 2019 Vous êtes sur le point de signer le certificat suivant. Veuillez vérifier les détails ci-dessous pour la précision. Notez que cette demande n'a pas été vérifiée cryptographiquement. Assurez-vous qu'il provient d'une source de confiance ou que vous avez vérifié la somme de chèques de demande avec l'expéditeur. Demande de sujet, à signer en tant que certificat de serveur pendant 1080 jours: sujet = CommonName = serveur Tapez le mot «oui» pour continuer, ou toute autre entrée pour abandonner. Confirmer les détails de la demande: oui en utilisant la configuration de / home / egdoc / certificate_authority / pki / safessl-easyrsa.CNF Entrez Pass phrase pour / home / egdoc / certificate_authority / pki / private / ca.Clé: Vérifiez que la demande correspond à la signature de la signature OK, le nom distingué du sujet est le suivant: ASN.1 12: le certificat «serveur» doit être certifié jusqu'au 20 mars 02:12:08 2023 GMT (1080 jours) Écrivez la base de données avec 1 nouveau certificat mis à jour de base de données créée à: / home / egdoc / certificate_authority / pki / émis / serveur.CRT
Nous pouvons maintenant supprimer le fichier de demande que nous avons précédemment transféré à partir du openvpnmachine
. Et copier le certificat généré à notre Openvpn serveur, avec le certificat public CA:
$ rm ~ / serveur.req $ scp pki / CA.CRT, émis / serveur.crt egdoc @ openvpnmachine: / home / egdoc
De retour sur le openvpnmachine
Nous devrions trouver les fichiers sur notre répertoire domestique. Nous pouvons maintenant les déplacer vers / etc / openvpn
:
$ sudo mv ~ / ca.CRT, serveur.crt / etc / openvpn
Étape 4 - Génération de paramètres Diffie-Hellman
La prochaine étape consiste en la génération d'un Diffie-hellman paramètres. Le Diffie-hellman L'échange de clés est la méthode utilisée pour transférer des clés de cryptographie sur un canal public et peu sûr. La commande pour générer la clé est la suivante (cela pourrait prendre un certain temps pour terminer):
$ ./ Easyrsa Gen-DH
La clé sera générée à l'intérieur du pki
répertoire comme dh.pem
. Passons-le à / etc / openvpn
comme DH2048.pem
:
$ sudo mv pki / dh.pem / etc / openvpn / dh2048.pem
Étape 5 - Génération de la clé TLS-AUTH (TA.clé)
Pour améliorer la sécurité, Openvpn met en oeuvre TLS-AUTH. Citant la documentation officielle:
La directive TLS-AUTH ajoute une signature HMAC supplémentaire à tous les paquets de poignée SSL / TLS pour la vérification de l'intégrité. Tout paquet UDP ne portant pas la signature HMAC correcte peut être supprimé sans autre traitement. La signature HMAC TLS-AUTH fournit un niveau de sécurité supplémentaire au-delà de celui fourni par SSL / TLS. Il peut protéger contre:
- Attaques DOS ou inondation du port sur le port UDP OpenVPN.
- Analyse des ports pour déterminer quels ports UDP du serveur sont dans un état d'écoute.
- Vulnérabilités de débordement de tampon dans l'implémentation SSL / TLS.
- Initiations de poignée de main SSL / TLS à partir de machines non autorisées (alors que de telles poignées de main ne parviendraient pas à s'authentifier, TLS-Auth peut les couper à un moment beaucoup plus tôt).
Pour générer la clé TLS_Auth, nous pouvons exécuter la commande suivante:
$ openvpn --genkey - secret ta.clé
Une fois généré, nous déplacons le faire.clé
déposer à / etc / openvpn
:
$ sudo mv ta.clé / etc / openvpn
La configuration de nos touches de serveur est maintenant terminée. Nous pouvons procéder avec la configuration du serveur réel.
Étape 6 - Configuration OpenVPN
Le fichier de configuration OpenVPN n'existe pas par défaut à l'intérieur / etc / openvpn
. Pour le générer, nous utilisons un modèle qui expédie avec le openvpn
emballer. Exécutons cette commande:
$ zcat \ / usr / share / doc / openvpn / exemples / sampon-config-files / serveur.confli.gz \ | sudo tee / etc / openvpn / serveur.conf> / dev / null
Nous pouvons maintenant modifier le / etc / openvpn / serveur.confli
déposer. Les pièces pertinentes sont montrées ci-dessous. La première chose que nous voulons faire est de vérifier que le nom des clés et des certificats référencés correspond à ceux que nous avons générés. Si vous avez suivi ce tutoriel, cela devrait certainement être le cas (lignes 78-80
et 85
):
CA CA.serveur de certificat CRT.serveur clé CRT.Clé # Ce fichier doit être gardé secret dh dh2048.pem
Nous voulons faire le démon OpenVPN avec de faibles privilèges, le personne
utilisateur et nogroup
groupe. La partie pertinente du fichier de configuration est aux lignes 274
et 275
. Nous avons juste besoin de supprimer le leader ;
:
utilisateur personne groupe Nogroup
Une autre ligne dont nous voulons supprimer le commentaire est 192
. Cela amènera tous les clients à rediriger leur passerelle par défaut via le VPN:
Poussez "redirection-gate def1 bypass-dhcp"
Lignes 200
et 201
peut également être utilisé pour permettre au serveur de pousser des serveurs DNS spécifiques aux clients. Ceux du fichier de configuration sont ceux fournis par opendns.com
:
Poussez "DHCP-Option DNS 208.67.222.222 "push" dhcp-option DNS 208.67.220.220 "
À ce stade / etc / openvpn
Le répertoire doit contenir ces fichiers que nous avons générés:
/ etc / openvpn ├fique.CRT ├fique.serveur pem ├fiques.serveur conf ├fiques.Serveur CRT ├fique.clé └fique.clé
Assurez-vous qu'ils appartiennent tous à Root:
$ sudo chown -r racine: root / etc / openvpn
Nous pouvons passer à l'étape suivante: configurer les options de réseautage.
Étape 7 - Configuration du réseautage et UFW
Pour que notre VPN fonctionne, nous devons activer Transfert IP sur notre serveur. Pour le faire, nous avons juste une ligne d'incommente 28
du / etc / sysctl.confli
déposer:
# Décommente la ligne suivante pour permettre le transfert de paquets pour IPv4 net.ipv4.ip_forward = 1
Pour recharger les paramètres:
$ sudo sysctl -p
Nous devons également permettre le transfert de paquets dans le pare-feu UFW modifiant le / etc / par défaut / ufw
fichier et modifier le Default_forward_policy
depuis GOUTTE
pour ACCEPTER
(doubler 19
):
# Définissez la stratégie de par défaut pour accepter, supprimer ou rejeter. Veuillez noter que # Si vous modifiez cela, vous voudrez très probablement ajuster vos règles default_forward_policy = "accepter"
Nous devons maintenant ajouter les règles suivantes au début du / etc / ufw / avant.règles
déposer. Ici, nous supposons que l'interface utilisée pour la connexion est ETH0
:
* Nat: Postrouting accepte [0: 0] -a Postrouting -S 10.8.0.0/8 -o eth0 -j Masquerade Commit
Enfin, nous devons autoriser le trafic entrant pour le openvpn
Service dans le gestionnaire de pare-feu UFW:
$ sudo ufw autoriser OpenVPN
À ce stade, nous pouvons redémarrer UFW pour les modifications à appliquer. Si votre pare-feu n'a pas été activé à ce stade, assurez-vous ssh
Le service est toujours autorisé, sinon vous pouvez être coupé si vous travaillez à distance.
$ sudo ufw Disable && sudo ufw activer
Nous pouvons maintenant démarrer et activer l'OpenVPN.Service au démarrage:
$ sudo systemctl redémarrer openvpn && sudo systemctl activer openvpn
Étape 8 - GÉNÉRATION D'UNE CLÉ CLIENT ET DE RECHERCHE
Notre configuration de serveur est maintenant terminée. L'étape suivante consiste dans la génération de la clé du client et de la demande de certificat. La procédure est la même que nous avons utilisée pour le serveur: nous utilisons simplement «client» que le nom au lieu de «Sever», générant la clé et la demande de certificat, puis transmets ce dernier à la machine CA pour être signé.
$ ./ Easyrsa Gen-Req Client Nopass
Tout comme avant, on nous demandera de saisir un nom commun. Les fichiers suivants seront générés:
- / home / egdoc / openvpnserver / pki / reqs / client.req
- / home / egdoc / openvpnserver / pki / private / client.clé
Copie le client.req
à la machine CA:
$ SCP PKI / REQS / Client.req egdoc @ camachine: / home / egdoc
Une fois le fichier copié, sur camachine
, Nous importons la demande:
$ ./ Easyrsa Import-Req ~ / Client.Client de req
Ensuite, nous signe le certificat:
$ ./ Easyrsa Sign-Req Client Client
Après être entré dans le mot de passe CA, le certificat sera créé comme PKI / émis / client.CRT
. Retirons le fichier de demande et copie le certificat signé sur le serveur VPN:
$ rm ~ / client.req $ scp pki / émis / client.crt egdoc @ openvpnmachine: / home / egdoc
Pour plus de commodité, créons un répertoire pour maintenir toutes les choses liées au client et déplacer la clé et le certificat client:
$ mkdir ~ / client $ mv ~ / client.CRT PKI / Private / Client.clé ~ / client
Bien, nous y sommes presque là. Maintenant, nous devons copier le modèle de configuration du client, / usr / share / doc / openvpn / exemples / sampon-config-files / client.confli
à l'intérieur de ~ / Client
Répertoire et modifiez-le pour répondre à nos besoins:
$ cp / usr / share / doc / openvpn / exemples / sampon-config-files / client.conf ~ / client
Voici les lignes que nous devons modifier dans le fichier. À la ligne 42
Mettez le serveur réel IP ou nom d'hôte à la place de mon serveur-1
:
My-Server-1 1194 éloigné
En ligne 61
et 62
Retirer le leader ;
Caractère pour rétrograder les privilèges après l'initialisation:
utilisateur personne groupe Nogroup
En ligne 88
pour 90
et 108
Nous pouvons voir que le certificat CA, le certificat client, la clé client et la clé TLS-AUTH sont référencés. Nous voulons commenter ces lignes, car nous mettrons le contenu réel des fichiers entre une paire de «balises» dédicantes:
pour le certificat CA
pour le certificat client
Pour la clé du client
pour la clé TLS-AUTH
Une fois les lignes commentées, nous ajoutons le contenu suivant au bas du fichier:
# Voici le contenu du CA.Fichier CRT # ici va le contenu du client.Fichier CRT # ici va le contenu du client.Fichier clé Direction de clé 1 # VOIE VOIE LE CONTENU DE LA TA.fichier clé
Une fois terminé de modifier le fichier, nous le renomnons avec le .OVPN
suffixe:
$ mv ~ / client / client.conf ~ / client / client.OVPN
Tout ce qui reste à faire est d'importer le fichier dans notre application client pour le faire se connecter à notre VPN. Si nous utilisons l'environnement de bureau Gnome, par exemple, nous pouvons importer le fichier depuis Réseau Section du panneau de commande. Dans la section VPN, cliquez simplement sur le +
bouton, puis sur «Importer à partir du fichier» pour sélectionner et importer le «.Fichier OVPN "que vous avez précédemment transféré sur votre machine client.
Interface gnome à importer .fichier ovpn
Conclusions
Dans ce tutoriel, nous avons vu comment créer une configuration OpenVPN fonctionnelle. Nous avons généré une autorité de certificat et utilisé pour signer des certificats de serveur et client que nous avons générés avec les clés correspondantes. Nous avons vu comment configurer le serveur et comment configurer la mise en réseau, permettre le transfert de paquets et effectuer les modifications nécessaires à la configuration du pare-feu UFW. Enfin, nous avons vu comment générer un client .OVPN Fichier qui peut être importé à partir d'une application client afin de se connecter facilement à notre VPN. Apprécier!
Tutoriels Linux connexes:
- Choses à installer sur Ubuntu 20.04
- Choses à faire après l'installation d'Ubuntu 20.04 Focal Fossa Linux
- Ubuntu 20.04 astuces et choses que vous ne savez peut-être pas
- Ubuntu de base 22.04 Configuration de la connexion client / serveur OpenVPN
- Ubuntu 20.04 Guide
- Choses à savoir sur Ubuntu 20.04 FOCAL FOSSA
- Ubuntu 20.04 Hadoop
- Liste des clients FTP et installation sur Ubuntu 20.04 Linux…
- Les 8 meilleurs environnements de bureau Ubuntu (20.04 FOCAL FOSSA…
- Tester les clients HTTPS utilisant OpenSSL pour simuler un serveur
- « Comment installer PlayOnlinux sur Ubuntu 20.04 Focal Fossa Linux
- Mise à niveau Raspberry Pi vers Ubuntu 20.04 »