GNU/Linux >> Tutoriels Linux >  >> Linux

Comment installer et configurer un VPN avec OpenVPN sur Ubuntu 18.04

Un VPN est un réseau privé virtuel qui vous permet d'accéder à Internet ou à certains services même à partir d'un réseau non fiable. En gros, c'est comme si vous étiez physiquement connecté à un réseau privé :par exemple, vous pouvez accéder à votre compte bancaire ou effectuer des paiements sans craindre que quelqu'un intercepte le trafic généré par votre appareil.

OpenVPN est un VPN basé sur les protocoles TLS (Transport Layer Security) et SSL (Secure Sockets Layer). OpenVPN utilise certains certificats pour crypter le trafic entre le serveur et le client.

Dans ce tutoriel, vous verrez comment configurer OpenVPN sur un serveur avec Ubuntu 18.04.

Pour mettre en œuvre ce tutoriel, une machine serveur et une autre machine faisant office de CA (Autorité de Certification), qui évaluera la validité des certificats, sont nécessaires.

Vous devrez vous connecter à votre serveur et à votre CA via une connexion SSH. Si vous ne l'avez pas encore fait, il est recommandé de suivre notre guide pour vous connecter en toute sécurité avec le protocole SSH.

Installer OpenVPN

Accéder à votre serveur.

OpenVPN est déjà disponible sur le référentiel Ubuntu officiel d'Ubuntu, il n'est donc pas nécessaire d'ajouter quoi que ce soit d'autre.

Tapez :

sudo apt update
sudo apt install openvpn

À ce stade, OpenVPN aura été installé avec succès sur votre serveur.

Installer EasyRSA

Continuez en téléchargeant EasyRSA sur votre Serveur et sur votre CA en tapant sur les deux machines :

wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.4/EasyRSA-3.0.4.tgz

La dernière version peut être téléchargée depuis https://github.com/OpenVPN/easy-rsa/releases

$ cd ~
$ sudo tar xvf EasyRSA-3.0.4.tgz

Le nom peut être différent selon la version téléchargée

Configuration du serveur

Terminez la configuration du serveur en tapant :

$ sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
$ sudo gzip -d /etc/openvpn/server.conf.gz
$ sudo nano /etc/openvpn/server.conf
  • Recherchez la section qui fait référence à HMAC ("tls-auth"). Si la ligne est commentée, supprimez le ";".

  • Retrouvez la section sur le chiffrement ("chiffrement"). Si commenté, supprimez le ";". Ajoutez une nouvelle ligne contenant le texte "auth SHA256" juste en dessous.

  • Trouvez la section "dh" définissant les paramètres Diffie-Hellman et supprimez "2048" du nom ("dh dh.pem" devrait être obtenu).

  • Recherchez la section "utilisateur" et "groupe" et supprimez le ";" pour décommenter les lignes.

Configuration d'EasyRSA sur l'autorité de certification

Après l'installation d'EasyRSA, un fichier de configuration pour définir les variables de votre CA a été créé sur votre CA. Saisissez :

$ cd ~/EasyRSA-3.0.4/
$ cp vars.example vars
$ nano vars

Supprimez le "#" des instructions présentées dans la figure ci-dessous :

Démarrez le script "easyrsa" pour initialiser l'infrastructure à clé publique (PKI) :

$ sudo ./easyrsa init-pki
$ sudo ./easyrsa build-ca nopass

avec cette commande deux fichiers seront créés :

  • ca.crt :certificat CA public utilisé par les serveurs et les clients pour notifier mutuellement qu'ils font partie du même réseau de confiance.

  • ca.key :clé privée utilisée par la machine CA pour signer les clés et les certificats des serveurs et des clients. Ce fichier doit être conservé uniquement sur la machine CA (qui n'est pas accessible par des tiers), sinon la sécurité du réseau peut être compromise.

Vous devrez entrer un nom. Laissez-le vide et appuyez sur Entrée.

Demander un certificat de serveur à l'autorité de certification

Maintenant que la machine CA est configurée, demandez au serveur de générer une clé privée et une demande de certificat et envoyez-les à la machine CA pour les faire signer :

$ cd ~/EasyRSA-3.0.4
$ ./easyrsa init-pki
$ ./easyrsa gen-req server nopass

Pour plus de simplicité, laissez "serveur" comme nom pour la machine, pour éviter de faire plusieurs modifications par la suite.

Vous venez de créer une clé privée pour le serveur et une demande de certificat appelée "server.req":

$ sudo cp ~/EasyRSA-v3.0.6/pki/private/server.key /etc/openvpn/

Copiez le fichier server.req sur la machine CA :

$ sudo scp ~/EasyRSA-3.0.4/pki/reqs/server.req [email protected]_CA_ip:/tmp

Génération et signature du certificat

Sur votre CA dans le dossier EasyRSA, importez le fichier que vous venez de copier et signez-le :

$ cd ~/EasyRSA-3.0.4/
$ sudo ./easyrsa import-req /tmp/server.req server
$ sudo ./easyrsa sign-req server server

Tapez "oui" et appuyez sur Entrée.

Transférer le certificat signé et le ca.crt au serveur VPN :

$ sudo scp pki/issued/server.crt [email protected]_server_ip:/tmp
$ sudo scp pki/ca.crt [email protected]_server_ip:/tmp

Puis dans votre serveur

copier les fichiers reçus dans les répertoires appropriés :

$ sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/
$ cd ~/EasyRSA-3.0.4/

Générer une clé d'échange forte basée sur Diffie-Hellman.

$ sudo ./easyrsa gen-dh
$ sudo openvpn --genkey --secret ta.key

Copiez les fichiers générés dans le dossier "/etc/openvpn/"

$ sudo cp ~/EasyRSA-3.0.4/ta.key /etc/openvpn/
$ sudo cp ~/EasyRSA-3.0.4/pki/dh.pem /etc/openvpn/

Configuration d'un client

Créer un dossier pour stocker les certificats et les clés du client (ce guide ne présentant qu'un seul client, il est ici appelé 'client1', mais l'opération doit être répétée pour chaque client, en utilisant un dénomination)

$ sudo mkdir -p ~/client-configs/keys
$ sudo chmod -R 700 ~/client-configs
$ cd ~/EasyRSA-3.0.4/
$ sudo ./easyrsa gen-req client1 nopass

Appuyez sur Entrée pour accepter le nom standard proposé.

$ sudo cp pki/private/client1.key ~/client-configs/keys/

Copiez la clé du client dans le dossier créé précédemment.

$ sudo scp pki/reqs/client1.req [email protected]_CA_IP:/tmp

Envoyez le fichier client1.req à la machine CA.

Importez la demande de certificat sur votre CA :

$ cd ~/EasyRSA-3.0.4/
$ sudo ./easyrsa import-req /tmp/client1.req client1
$ sudo ./easyrsa sign-req client client1

Tapez "yes" pour autoriser la signature.

Téléchargez client1.crt sur votre serveur :

scp pki/issued/client1.crt [email protected]_SERVER:/tmp

Sur votre serveur, copiez les fichiers suivants dans les dossiers appropriés.

$ sudo mkdir -p ~/client-configs/keys

$ sudo chmod -R 700 ~/client-configs

$ sudo cp /tmp/client1.crt ~/client-configs/keys/

$ sudo cp ~/EasyRSA-3.0.4/ta.key ~/client-configs/keys/

$ sudo cp /etc/openvpn/ca.crt ~/client-configs/keys/

Maintenant, les certificats et les clés du serveur et du client ont été générés.

Configuration du routage IP et du pare-feu

Modifiez les règles de transfert IP :

$ sudo nano /etc/sysctl.conf

Recherchez la section "net.ipv4.ip_forward" et supprimez le "#" pour rendre l'instruction "non commentée".

Modifiez certaines règles de pare-feu afin d'acheminer correctement les connexions client.

$ ip route | grep default

Stockez le nom après "dev" (nommé "eth0" dans la figure ci-dessous) :

$ sudo nano /etc/ufw/before.rules

Ajoutez les commandes comme dans la figure ci-dessous, en remplaçant "eth0" par le nom de votre interface réseau.

# 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

Enregistrer et quitter. Modifiez maintenant le fichier de configuration UFW :

$ sudo nano /etc/default/ufw

Changez la valeur du paramètre "DEFAULT_FORWARD_POLICY" avec "ACCEPT".

$ sudo ufw allow 1194/udp

Ajouter le port 1194 pour le trafic UDP.

$ sudo ufw allow OpenSSH

Redémarrez UFW :

$ sudo ufw disable

$ sudo ufw enable

Démarrez le service OpenVPN :

$ sudo systemctl start openvpn

Vérifiez l'état du service :

$ sudo systemctl status openvpn

Définir le service au démarrage du serveur.

$ sudo systemctl enable openvpn

Créez le fichier de configuration pour le client :

$ sudo mkdir -p ~/client-configs/files
$ sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
$ sudo nano ~/client-configs/base.conf

Trouvez la section "remote" et assurez-vous qu'elle indique "remote IP_Server 1194"

  • IP_Server :écrivez l'IP du serveur

  • 1194 :port précédemment sélectionné.

Recherchez la section "proto" pour vous assurer que le serveur est défini sur UDP (vous trouverez la ligne TCP commentée par un ";").

Recherchez la section "utilisateur" et "groupe" et supprimez le ";" pour leur faire "sans commentaires".

Recherchez les sections "ca.crt" - "client.crt" - "client.key" - "ta.key" et commentez-les avec un "#" au début de chaque ligne.

Recherchez la section "cipher" et ajoutez l'instruction "auth SHA256" sous l'instruction "cipher AES-256-CBC".

Ajouter l'instruction "key-direction 1" à tout moment.

Ajoutez ces lignes commentées à tout moment. Si le client est une machine Linux, faites-leur "sans commentaires".

# script-security 2
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf

Enregistrer et quitter.

Génération de la configuration pour les clients

Sur votre serveur, créez un script pour compiler automatiquement la configuration d'un client.

nano ~/client-configs/make_config.sh

Copiez et collez le texte :

#!/bin/bash

# First argument: Client identifier

KEY_DIR=~/client-configs/keys

OUTPUT_DIR=~/client-configs/files

BASE_CONFIG=~/client-configs/base.conf

cat ${BASE_CONFIG} \

    <(echo -e '<ca>') \

    ${KEY_DIR}/ca.crt \

    <(echo -e '</ca>\n<cert>') \

    ${KEY_DIR}/${1}.crt \

    <(echo -e '</cert>\n<key>') \

    ${KEY_DIR}/${1}.key \

    <(echo -e '</key>\n<tls-auth>') \

    ${KEY_DIR}/ta.key \

    <(echo -e '</tls-auth>') \

    > ${OUTPUT_DIR}/${1}.ovpn

Enregistrer et quitter.

chmod 700 ~/client-configs/make_config.sh

Essayez maintenant de générer la "configuration" du client client

$ cd ~/client-configs
$ sudo ./make_config.sh client1

Un fichier appelé "client1.ovpn" sera créé.

Transférez maintenant ce fichier sur l'appareil que vous souhaitez utiliser. Il sera utilisé par le logiciel VPN pour la connexion.

Révocation des certificats client

$ cd EasyRSA-3.0.4/
$ sudo ./easyrsa revoke client1

client1 est le nom du client auquel les autorisations doivent être retirées

Tapez "yes" pour confirmer.
Générez et chargez le fichier crl.pem sur votre serveur :

$ sudo ./easyrsa gen-crl
$ sudo scp ~/EasyRSA-3.0.4/pki/crl.pem [email protected]_Server:/tmp

Mettez à jour la configuration de votre machine serveur pour vérifier la révocation.

$ sudo cp /tmp/crl.pem /etc/openvpn
$ sudo nano /etc/openvpn/server.conf

A la fin du fichier ajouter "crl-verify crl.pem".

Enregistrer et quitter.

$ sudo systemctl restart [email protected]

Redémarrez le serveur pour mettre en œuvre les modifications.


Linux
  1. Comment installer et configurer Algo VPN Server sur Ubuntu 20.04

  2. Comment configurer et configurer une autorité de certification sur Ubuntu 22.04

  3. Comment installer et configurer strongSwan VPN sur Ubuntu 18.04

  4. Comment configurer Apache avec l'événement MPM et PHP-FPM sur Ubuntu 20.04

  5. Comment installer et configurer le serveur OpenVPN sur Ubuntu 20.04

Comment installer et configurer un serveur OpenVPN sur Ubuntu 22.04

Comment configurer un VPN basé sur IPsec avec Strongswan sur Debian et Ubuntu

Comment installer et configurer Memcached sur Ubuntu Linux

Comment installer et configurer ModEvasive avec Apache sur Ubuntu 18.04

Comment configurer un serveur Seafile avec Nginx sur Ubuntu 18.04

Comment se connecter à un VPN avec OpenVPN