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 varsCode : 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"Code : Tout sélectionner
./easyrsa init-pki
./easyrsa build-caEnsuite, 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]Faite de même sur chacun des clients :
Code : Tout sélectionner
./easyrsa init-pki
./easyrsa gen-req <nom-du-client> [nopass]Sur le CA, importez ces demandes.
Code : Tout sélectionner
./easyrsa import-req /chemin/vers/la.req SHORTNAME-UNIQUECode : Tout sélectionner
./easyrsa sign server SHORTNAME-UNIQUECode : Tout sélectionner
./easyrsa sign client SHORTNAME-UNIQUEDans 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]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]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-dhCré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.gzport : 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_forwardCode : Tout sélectionner
net.ipv4.ip_forward = 1Code : Tout sélectionner
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADECode : Tout sélectionner
systemctl enable openvpn@nom-du-serveur.serviceCode : Tout sélectionner
systemctl start openvpnSur 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/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
Code : Tout sélectionner
ifconfig -aCode : 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