Page 1 sur 1

Mise en place d'un VPN avec OpenVPN 2.3 et Easy-RSA 3

Publié : 04 août 2021, 07:15
par cyril
Introduction
Petit rappel de ce qu'est un VPN est à quoi il sert. A l'origine, un VPN est ce qui permet de relier deux sous-réseaux distants de telle manière qu'ils se voient appartenir au même réseau. Cela permet d'établir un tunnel sécurisé entre ces deux réseaux, à travers un médium non sûr (tel qu'Internet).

Ce type de tunnel est de point-à-point. C'est à dire qu'il va s'établir entre uniquement deux point de terminaison (principe de L2TP ou PPTP). Si l'on veut relier plus de deux points, il faut établir une architecture de type one-to-many, ou chaque point sera relié par un tunnel à chacun des autres. Ou, on peut établir une architecture en étoile, où un point sera connecté à tous les autres, et, pour communiquer, les points seront obligés de passer par le point central. C'est ce type d'architecture qu'utilise OpenVPN.

OpenVPN est basé sur TLS/SSL pour sa sécurisation. Pour établir un système, il nous faut :

Une autorité de certification (totalement lié à SSL)
Un serveur (centre de l'étoile)
Un (ou plusieurs) clients.
L'autorité de certification
Pour des raisons pratiques, l'autorité de certification (CA) sera établie sur le serveur.

Comme dit plus haut, désormais, Easy-RSA n'est plus fourni en bundle avec OpenVPN, il doit être récupéré depuis un dépôt Git.

Code : Tout sélectionner

mkdir -p /root/openvpn
cd /root/openvpn
git clone https://github.com/OpenVPN/easy-rsa.git
cd easy-rsa/easyrsa3
cp vars.example vars
Editez le fichier vars fraîchement copié en décommentant et customisant ces paramètres :

Code : Tout sélectionner

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@example.net"
set_var EASYRSA_REQ_OU         "My Organizational Unit"
Initialisez le PKI et construisez le CA.

Code : Tout sélectionner

./easyrsa init-pki
./easyrsa build-ca
Cela génèrera entre autre le fichier pki/ca.crt.

Ensuite, il y a deux méthodes. La méthode feignant et la méthode classique.

La méthode classique
Pour faire propre, créer des certificats doit se faire en plusieurs étapes, et n'ont pas besoin d'être toutes effectuées sur le serveur qui héberge le CA.

Sur le serveur, installez également easy-rsa3, puis initialisez le pki. Générez ensuite une requête de certificat et une paire de clés.

Code : Tout sélectionner

./easyrsa init-pki
./easyrsa gen-req <nom-du-server> [nopass]
Utilisez l'option nopass pour ne pas être prompté pour une passphrase (option recommandée pour le serveur, mais déconseillée pour les clients).

Faite de même sur chacun des clients :

Code : Tout sélectionner

./easyrsa init-pki
./easyrsa gen-req <nom-du-client> [nopass]
Transférez ensuite chacuns des fichiers .req (générés dans pki/reqs/) sur le serveur CA.

Sur le CA, importez ces demandes.

Code : Tout sélectionner

./easyrsa import-req /chemin/vers/la.req SHORTNAME-UNIQUE
Puis, s'il s'agit d'un .req serveur, signez la demande avec :

Code : Tout sélectionner

./easyrsa sign server SHORTNAME-UNIQUE
S'il s'agit d'un client :

Code : Tout sélectionner

./easyrsa sign client SHORTNAME-UNIQUE
La méthode feignant
Dans cette méthode on va générer et automatiquement signer les certificats clients et serveur. Et cela se fait très facilement.

Créer un certificat serveur :

Code : Tout sélectionner

./easyrsa build-server-full <nom-du-serveur> [nopass]
Cela va générer les fichiers :

pki/private/nom-du-server.key
pki/issued/nom-du-server.crt
pki/reqs/nom-du-server.req

Créer un certificat client :

Code : Tout sélectionner

./easyrsa build-client-full <nom-du-client> [nopass]
Cela va générer les fichiers :

pki/private/nom-du-client.key
pki/issued/nom-du-client.crt
pki/reqs/nom-du-client.req
Sur le serveur
Transférez sur le serveur les fichiers :

pki/private/nom-du-server.key
pki/issued/nom-du-server.crt
pki/reqs/nom-du-server.req
Et placez-les dans /etc/openvpn/.

Retournez dans votre dossier easy-rsa et générez les paramètres Diffie-Hellman :

Code : Tout sélectionner

./easyrsa gen-dh
Cela produira le fichier pki/dh.pem, que vous placerez également dans /etc/openvpn.

Créer le fichier de configuration serveur
Copiez le fichier example de configuration serveur dans /etc :

Code : Tout sélectionner

cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
gunzip /etc/openvpn/server.conf.gz
Vous allez paramétrer quelques options :

port : Numéro du port sur lequel écoutera OpenVPN
ca : Indiquez ici le nom du certificat du CA (ca.crt)
cert : Le certificat serveur (server.crt)
key : La clé privée du serveur (server.key)
dh : Le nom du fichier des paramètres Diffie-Hellman (dh.pem)
push "redirect-gateway def1 bypass-dhcp" : Décommenter pour que les clients utilisent le serveur VPN en tant que passerelle par défaut
push "dhcp-option DNS 208.67.222.222" et push "dhcp-option DNS 208.67.220.220" : Pour la configuration DNS si vous utilisez l'option précédente
client-to-client : A ajouter si vous vouslez autoriser vos clients à communiquer entre eux.

Si vous voulez que vos clients utilisent Internet par le serveur, activez la redirection sur le serveur :

Code : Tout sélectionner

echo 1 > /proc/sys/net/ipv4/ip_forward
Le rendre permanent : editez le fichier /etc/sysctl.conf

Code : Tout sélectionner

net.ipv4.ip_forward = 1
Puis, si eth0 est votre interface pour communiquer sur internet :

Code : Tout sélectionner

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Activez la configuration que vous venez d'écrire :

Code : Tout sélectionner

systemctl enable openvpn@nom-du-serveur.service
Démarrez ensuite le serveur VPN.

Code : Tout sélectionner

systemctl start openvpn
Vérifiez que tout se passe bien dans /var/log/syslog

Sur le client
Transférez sur les clients les fichiers (en supposant que le shortname ait été "client1") :

ca.crt
client1.key
client1.crt
Et placez-les dans /etc/openvpn/.

Créer le fichier de configuration client
Copiez le fichier example de configuration serveur dans /etc :

Code : Tout sélectionner

cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/
Vous allez paramétrer quelques options :

remote : Adresse du serveur OpenVPN suivi d'un espace, puis son port (remote my-server-1 1194)
ca : Indiquez ici le nom du certificat du CA (ca.crt)
cert : Le certificat client (client1.crt)
key : La clé privée du client (client1.key)
Démarrez OpenVPN :

Code : Tout sélectionner

service openvpn start
Vérifiez que tout est bon dans les logs (/var/log/syslog), que vous avez votre interface tun-0 up :

Code : Tout sélectionner

ifconfig -a
Enfin, vérifiez que vous pouvez pinguer votre serveur :

Code : Tout sélectionner

root@ns3342330:~/easy-rsa/easyrsa3# ping -c 1 10.8.0.1
PING 10.8.0.1 (10.8.0.1) 56(84) bytes of data.
64 bytes from 10.8.0.1: icmp_seq=1 ttl=64 time=0.039 ms

--- 10.8.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.039/0.039/0.039/0.000 ms