Comment configurer un serveur OpenVPN sur Ubuntu 20.04

Comment configurer un serveur OpenVPN sur Ubuntu 20.04

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
Comment configurer un serveur OpenVPN sur Ubuntu 20.04

Exigences et conventions logicielles utilisées

Exigences logicielles et conventions de ligne de commande Linux
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:

  1. Génération de l'autorité de certificat;
  2. Génération de la clé de serveur et de la demande de certificat;
  3. Signature de la demande de certificat de serveur avec le CA;
  4. Génération des paramètres Diffie-Hellman sur le serveur;
  5. Génération de la clé TLS-AUTH sur le serveur;
  6. Configuration OpenVPN;
  7. Configuration de réseautage et pare-feu (UFW) sur le serveur;
  8. Génération d'une clé client et d'une demande de certificat;
  9. Signature du certificat client avec le CA;
  10. 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:

  1. Nous générons un répertoire de travail avec le faire du cadir commander, et déplacer à l'intérieur.
  2. Configurer les variables contenues dans le varbac fichier qui sera utilisé pour le certificat.
  3. 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