OpenVPN est une application open source qui vous permet de créer un réseau privé sécurisé sur l'Internet public. OpenVPN implémente un réseau privé virtuel (VPN) pour créer une connexion sécurisée. OpenVPN Utilise la bibliothèque OpenSSL pour fournir le cryptage et fournit plusieurs mécanismes d'authentification, tels que les clés pré-partagées basées sur des certificats et l'authentification par nom d'utilisateur/mot de passe.
Dans ce tutoriel, nous allons vous montrer comment installer et configurer étape par étape OpenVPN sur CentOS 7.6. Et nous mettrons en œuvre l'authentification OpenVPN basée sur des certificats.
Prérequis
- CentOS 7.6
- Privilèges root
Qu'allons-nous faire ?
- Installer OpenVPN et Easy-RSA
- Configurer les variables Easy-RSA 3
- Créer des clés OpenVPN
- Configurer le serveur OpenVPN
- Configurer le pare-feu et activer le transfert de port
- Configuration client
- Test
Étape 1 - Installer OpenVPN et Easy-RSA
Dans ce didacticiel, nous utiliserons la dernière version du serveur centos (7.5) et nous utiliserons OpenVPN 2.4 avec easy-rsa 3. Avant d'installer les packages OpenVPN et easy-rsa, assurez-vous que le référentiel 'epel' est installé sur le système. Si vous ne l'avez pas, installez le référentiel epel à l'aide de la commande yum ci-dessous.
yum install epel-release -y
Installez maintenant OpenVPN 2.4 avec easy-rsa 3 sur le système.
yum install openvpn easy-rsa -y
Une fois l'installation terminée, vérifiez la version openvpn et easy-rsa.
openvpn --version
ls -lah /usr/share/easy-rsa/
OpenVPN 2.4 avec easy-rsa 3 a été installé.
Étape 2 - Configurer Easy-RSA 3
Dans cette étape, nous allons configurer easy-rsa 3 en créant un nouveau fichier 'vars'. Le fichier 'vars' contient les paramètres Easy-RSA 3.
Allez dans le répertoire '/etc/openvpn/' et copiez le script 'easy-rsa'.
cd /etc/openvpn/
cp -r /usr/share/easy-rsa /etc/openvpn/
Allez maintenant dans le répertoire 'easy-rsa/3/' et créez un nouveau fichier vars à l'aide de vim.
cd /etc/openvpn/easy-rsa/3/
vim vars
Collez la configuration vars easy-rsa 3 ci-dessous.
set_var EASYRSA "$PWD" set_var EASYRSA_PKI "$EASYRSA/pki" set_var EASYRSA_DN "cn_only" set_var EASYRSA_REQ_COUNTRY "ID" set_var EASYRSA_REQ_PROVINCE "Jakarta" set_var EASYRSA_REQ_CITY "Jakarta" set_var EASYRSA_REQ_ORG "hakase-labs CERTIFICATE AUTHORITY" set_var EASYRSA_REQ_EMAIL "[email protected]" set_var EASYRSA_REQ_OU "HAKASE-LABS EASY CA" set_var EASYRSA_KEY_SIZE 2048 set_var EASYRSA_ALGO rsa set_var EASYRSA_CA_EXPIRE 7500 set_var EASYRSA_CERT_EXPIRE 365 set_var EASYRSA_NS_SUPPORT "no" set_var EASYRSA_NS_COMMENT "HAKASE-LABS CERTIFICATE AUTHORITY" set_var EASYRSA_EXT_DIR "$EASYRSA/x509-types" set_var EASYRSA_SSL_CONF "$EASYRSA/openssl-1.0.cnf" set_var EASYRSA_DIGEST "sha256"
Enregistrez et quittez.
Remarque :
- Modifiez les valeurs des variables selon vos besoins.
- Augmentez le "EASYRSA_KEY_SIZE" pour une meilleure sécurité.
- Modifiez 'EASYRSA_CA_EXPIRE' et 'EASYRSA_CERT_EXPIRE'.
Rendez maintenant le fichier 'vars' exécutable en modifiant l'autorisation du fichier.
chmod +x vars
Le fichier vars pour le paramètre Easy-RSA 3 a été créé.
Étape 3 - Créer des clés OpenVPN
Dans cette étape, nous allons créer les clés OpenVPN basées sur le fichier 'vars' easy-rsa 3 que nous avons créé. Nous allons construire la clé CA, les clés serveur et client, le fichier DH et CRL PEM.
Nous allons construire toutes ces clés en utilisant la ligne de commande 'easyrsa'. Allez dans le répertoire '/etc/openvpn/easy-rsa/3'.
cd /etc/openvpn/easy-rsa/3/
Initialisation et création de l'autorité de certification
Avant de créer des clés, nous devons initialiser le répertoire PKI et créer la clé CA.
Lancez le répertoire PKI et créez la clé CA à l'aide de la commande ci-dessous.
./easyrsa init-pki
./easyrsa build-ca
Tapez maintenant le mot de passe de votre clé CA et vous obtiendrez vos fichiers 'ca.crt' et 'ca.key' sous le répertoire 'pki'.
Construire la clé du serveur
Nous voulons maintenant créer la clé du serveur, et nous allons créer la clé du serveur nommée 'hakase-server'.
Créez la clé de serveur 'hakase-server' à l'aide de la commande ci-dessous.
./easyrsa gen-req hakase-server nopass
Remarque :
- pas de passage =option pour désactiver le mot de passe pour la clé 'hakase-server'.
Et signez la clé 'hakase-server' en utilisant notre certificat CA.
./easyrsa sign-req server hakase-server
On vous demandera le mot de passe 'CA', tapez le mot de passe et appuyez sur Entrée. Et vous obtiendrez le fichier de certificat 'hakase-server.crt' sous le répertoire 'pki/issued/'.
Vérifiez le fichier de certificat à l'aide de la commande OpenSSL et assurez-vous qu'il n'y a pas d'erreur.
openssl verify -CAfile pki/ca.crt pki/issued/hakase-server.crt
Toutes les clés de certificat de serveur ont été créées. La clé privée du serveur se trouve dans 'pki/private/hakase-server.key' et le certificat du serveur dans 'pki/issued/hakase-server.crt'.
Construire la clé client
Nous devons maintenant créer des clés pour le client. Nous allons générer une nouvelle clé client nommée 'client01'.
Générez la clé 'client01' à l'aide de la commande ci-dessous.
./easyrsa gen-req client01 nopass
Signez maintenant la clé 'client01' en utilisant notre certificat CA comme ci-dessous.
./easyrsa sign-req client client01
Tapez "oui" pour confirmer la demande de certificat client, puis tapez le mot de passe de l'autorité de certification.
Le certificat client nommé 'client01' a été généré, vérifiez le certificat client à l'aide de la commande openssl.
openssl verify -CAfile pki/ca.crt pki/issued/client01.crt
Construire la clé Diffie-Hellman
Cette action prendra beaucoup de temps, en fonction de la longueur de clé que nous avons choisie et de l'entropie disponible sur le serveur. Nous utiliserons la clé de longueur que nous définissons dans le fichier 'vars'.
Générez la clé Diffie-Hellman à l'aide de la commande ci-dessous.
./easyrsa gen-dh
La clé DH a été générée, située dans le répertoire 'pki'.
Facultatif :générer la clé CRL
La clé CRL (Certificate Revocing List) sera utilisée pour révoquer la clé client. Si vous avez plusieurs certificats client sur votre serveur VPN et que vous souhaitez révoquer une clé, il vous suffit de révoquer à l'aide de la commande easy-rsa.
Si vous souhaitez révoquer une clé, exécutez la commande comme ci-dessous.
./easyrsa revoke someone
Et puis générez la clé CRL.
./easyrsa gen-crl
Le fichier CRL PEM a été généré sous le répertoire 'pki' - voici un exemple sur mon serveur.
Copier les fichiers de certificats
Tous les certificats ont été générés, copiez maintenant les fichiers de certificat et les fichiers PEM.
Copiez la clé et le certificat du serveur.
cp pki/ca.crt /etc/openvpn/server/
cp pki/issued/hakase-server.crt /etc/openvpn/server/
cp pki/private/hakase-server.key /etc/openvpn/server/
Copiez la clé et le certificat client01.
cp pki/ca.crt /etc/openvpn/client/
cp pki/issued/client01.crt /etc/openvpn/client/
cp pki/private/client01.key /etc/openvpn/client/
Copiez la clé DH et CRL.
cp pki/dh.pem /etc/openvpn/server/
cp pki/crl.pem /etc/openvpn/server/
Étape 4 - Configurer OpenVPN
Dans cette étape, nous allons créer une nouvelle configuration 'server.conf' pour le serveur openvpn.
Allez dans le répertoire '/etc/openvpn/' et créez un nouveau fichier de configuration 'server.conf' en utilisant vim.
cd /etc/openvpn/
vim server.conf
Collez-y la configuration de serveur OpenVPN suivante.
# OpenVPN Port, Protocol and the Tun port 1194 proto udp dev tun # OpenVPN Server Certificate - CA, server key and certificate ca /etc/openvpn/server/ca.crt cert /etc/openvpn/server/hakase-server.crt key /etc/openvpn/server/hakase-server.key #DH and CRL key dh /etc/openvpn/server/dh.pem crl-verify /etc/openvpn/server/crl.pem # Network Configuration - Internal network # Redirect all Connection through OpenVPN Server server 10.10.1.0 255.255.255.0 push "redirect-gateway def1" # Using the DNS from https://dns.watch push "dhcp-option DNS 84.200.69.80" push "dhcp-option DNS 84.200.70.40" #Enable multiple client to connect with same Certificate key duplicate-cn # TLS Security cipher AES-256-CBC tls-version-min 1.2 tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256 auth SHA512 auth-nocache # Other Configuration keepalive 20 60 persist-key persist-tun comp-lzo yes daemon user nobody group nobody # OpenVPN Log log-append /var/log/openvpn.log verb 3
Enregistrez et quittez.
La configuration pour OpenVPN a été créée.
Étape 5 - Activer le transfert de port et configurer le pare-feu de routaged
Dans cette étape, nous allons activer le module de noyau de transfert de port et configurer le routage "Firewalld" pour OpenVPN.
Activez le module de noyau de transfert de port en exécutant les commandes suivantes.
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p
Ensuite, configurez le routage à l'aide du pare-feu pour OpenVPN.
Ajoutez le service 'openvpn' au service de liste firewalld et ajoutez l'interface 'tun0' à la zone de confiance firewalld.
firewall-cmd --permanent --add-service=openvpn
firewall-cmd --permanent --zone=trusted --add-interface=tun0
Activez 'MASQUERADE' sur le pare-feu de la zone 'de confiance'.
firewall-cmd --permanent --zone=trusted --add-masquerade
Activez NAT pour l'adresse IP interne OpenVPN '10.10.1.0/24' vers l'adresse IP externe 'SERVERIP'.
SERVERIP=$(ip route get 84.200.69.80 | awk 'NR==1 {print $(NF-2)}')
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.10.1.0/24 -o $SERVERIP -j MASQUERADE
Et rechargez firewalld.
firewall-cmd --reload
La redirection de port et le routage du pare-feu sont terminés, démarrez maintenant le service openvpn et activez-le pour qu'il se lance automatiquement à chaque démarrage du système.
systemctl start [email protected]
systemctl enable [email protected]
Vérifiez-le en utilisant les commandes ci-dessous.
netstat -plntu
systemctl status [email protected]
Le serveur OpenVPN est opérationnel sur le port de protocole udp '1194'.
Étape 6 - Configuration du client OpenVPN
Allez dans le répertoire '/etc/openvpn/client' et créez un nouveau fichier de configuration client openvpn 'client01.ovpn' en utilisant vim.
cd /etc/openvpn/client
vim client01.ovpn
Collez-y la configuration client OpenVPN suivante.
client dev tun proto udp remote 139.xx.xx.xx 1194 ca ca.crt cert client01.crt key client01.key cipher AES-256-CBC auth SHA512 auth-nocache tls-version-min 1.2 tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256 resolv-retry infinite
compress lzo
nobind persist-key persist-tun mute-replay-warnings verb 3
Enregistrez et quittez.
Maintenant, compressez le répertoire '/etc/openvpn/client' en fichier 'zip' ou 'tar.gz' et téléchargez le fichier compressé en utilisant scp depuis votre ordinateur local.
Compressez le répertoire '/etc/openvpn/client' dans le fichier 'client01.tar.gz'.
cd /etc/openvpn/
tar -czvf client01.tar.gz client/*
scp [email protected]:/etc/openvpn/client01.tar.gz .
Étape 7 - Tester OpenVPN
Test sur les Clients.
- Sous Linux
Installez le package OpenVPN et si vous souhaitez une configuration graphique, installez le gestionnaire de réseau OpenVPN.
sudo apt install openvpn network-manager-openvpn network-manager-openvpn-gnome -y
Si vous souhaitez vous connecter à l'aide d'un shell de terminal, exécutez la commande OpenVPN ci-dessous.
openvpn --config client01.ovpn
Lorsque vous êtes connecté à OpenVPN, ouvrez un nouvel onglet de terminal et vérifiez la connexion à l'aide de la commande curl.
curl ifconfig.io
Et vous obtiendrez l'adresse IP du serveur OpenVPN.
Sur Mac OS
Téléchargez Tunnelblick et installez-le.
Extrayez le fichier 'client01.tar.gz' et renommez le répertoire 'client' en 'client01.tblk'.
tar -xzvf client01.tar.gz
mv client client01.tblk
Double-cliquez sur le 'client01.tblk' et le Tunnelblick détectera automatiquement la configuration OpenVPN puis l'importera.
Connectez-vous maintenant via le Tunnelblick sur la barre supérieure.
Sous Windows
Téléchargez le client openvpn pour windows et importez la configuration.