Projet :
Ressource :
# apt update # apt install openvpn
Par sécurité il est préférable d'utiliser un serveur dédié, déconnecté du réseau quand il n'est pas utilisé, et qui sera l'autorité de certification.
# wget wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.8/EasyRSA-3.0.8.tgz # tar xvf EasyRSA-3.0.8.tgz
# cd EasyRSA-3.0.8 # cp vars.example vars
#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"
# ./easyrsa init-pki
# ./easyrsa build-ca nopass
Le script crée 2 clés importantes :
:
# wget wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.8/EasyRSA-3.0.8.tgz # tar xvf EasyRSA-3.0.8.tgz
# cd EasyRSA-3.0.8 # ./easyrsa init-pki
# ./easyrsa gen-req OpenVPN nopass
Création :
# cp pki/private/OpenVPN.key /etc/openvpn/
# scp root@ip_serveur_OpenVPN:/root/EasyRSA-3.0.8/pki/reqs/OpenVPN.req /tmp </code > * sur le serveur CA, importer le fichier de demande <code shell> # ./easyrsa import-req /tmp/OpenVPN.req OpenVPN
# ./easyrsa sign-req server OpenVPN
# scp pki/issued/OpenVPN.crt root@ip_serveur_OpenVPN:/tmp
# scp pki/ca.crt root@ip_serveur_OpenVPN:/tmp
# cp /tmp/{OpenVPN.cet,ca.crt} /etc/openvpn
# ./easyrsa gen-dh
La clé Diffie-Hellman dh.pem est mise dans le sous-dossier pki
# openvpn --genkey --secret ta.key
# cp ta.key /etc/openvpn # cp pki/dh.pem /etc/openvpn
Le serveur OpenVPN est maintenant prêt avec tous les fichiers nécessaires.
Il ne reste plus qu'à créer les certificats et clés nécessaires pour les clients qui souhaitent utiliser le serveur VPN.
La démarche à suivre est la suivante :
# mkdir -p ~/client-configs/keys
# chmod -R 700 ~/client-configs
# ./easyrsa gen-req client1 nopass
Création :
# cp pki/private/client1.key ~/client-configs/keys
Depuis le serveur CA # scp root@ip_serveur_OpenVPN:/root/EasyRSA-3.0.8/pki/reqs/client1.req /tmp
Depuis le serveur CA # ./easyrsa import-req /tmp/client1.req client1
Depuis le serveur CA # ./easyrsa sign-req client client1
Un certificat client appelé client1.crt est généré et doit être copier dans le dossier /client-configs/keys du serveur OpenVPN :
Depuis le serveur CA # scp pki/issued/client1.crt root@ip_serveur_OpenVPN:/root/client-configs/keys
Depuis le serveur OpenVPN # cd EasyRSA-3.0.8 # cp ta.key ~/client-configs/keys
Depuis le serveur OpenVPN # cp /etc/openvpn/ca.crt ~/client-configs/keys
Configuration du serveur OpenVPN avec les clés et certificats du serveur et du client
# cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/ # gzip -d /etc/openvpn/server.conf.gz
# nano /etc/openvpn/server.conf
Ces modifications permettent la création d'un tunnel VPN entre deux ordinateurs mais n'oblige pas à utiliser le tunnel. Pour router tout le trafic à travers le VPN, il faut pousser la configuration du DNS vers les clients en ajoutant les modifications suivantes au fichier server.conf.
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 208.67.220.220"
Par défaut OpenVPN utilise le port UDP 1194. Pour autoriser ce port avec ufw
# ufw allow 1194/udp
Lien : https://doc.ubuntu-fr.org/ufw
net.ipv4.ip_forward=1
# sysctl -p
# # rules.before # # Rules that should be run before the ufw command line added rules. Custom # rules should be added to one of these chains: # ufw-before-input # ufw-before-output # ufw-before-forward # # START OPENVPN RULES # NAT table rules *nat :POSTROUTING ACCEPT [0:0] # Allow traffic from OpenVPN client to eth0 (change to the interface you discovered!) -A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE COMMIT # END OPENVPN RULES # Don't delete these required lines, otherwise there will be errors
DEFAULT_FORWARD_POLICY="ACCEPT"
# ufw disable # ufw enable
# systemctl start openvpn@server
# systemctl status openvpn@server
# systemctl status openvpn@server
# systemctl enable openvpn@server
# mkdir -p ~/client-configs/files
# cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
# nano ~/client-configs/base.conf
# script-security 2 # up /etc/openvpn/update-resolv-conf # down /etc/openvpn/update-resolv-conf
Si votre client fonctionne sous Linux et possède un fichier /etc/openvpn/update-resolv-conf, décommentez ces lignes du fichier de configuration du client après qu'il ait été généré.
# nano ~/client-configs/make_config.sh
Voici le contenu du fichier utilisant l'utilisateur compte qui peut utiliser sudo :
#!/bin/bash # First argument: Client identifier KEY_DIR=/home/compte/client-configs/keys OUTPUT_DIR=/home/compte/client-configs/files BASE_CONFIG=/home/compte/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
# chmod 700 ~/client-configs/make_config.sh
compte$ cd ~/client-configs compte$ sudo ./make_config.sh client1
Après exécution du script le fichier de configuration client client1.ovpn est créé dans le dossier /client-configs/files directory.
Ce fichier doit être transféré sur le client VPN avec scp, sftp ou Winscp.
$ sftp sammy@your_server_ip:client-configs/files/client1.ovpn ~/
client$ sudo apt update client$ sudo apt install openvpn
client$ ls /etc/openvpn
client$ # scp compte@ip_serveur_OpenVPN:client-configs/files/client1.opvn /
client$ nano client1.ovpn
script-security 2 up /etc/openvpn/update-resolv-conf down /etc/openvpn/update-resolv-conf
# eviter DNS leak pull-filter ignore "block-outside-dns"
Pour éventuellement tester la connexion VPN :
client$ sudo openvpn --config client1.ovpn
client$ sudo cp client1.ovpn /etc/openvpn/client1.conf
AUTOSTART="client1"
client$ sudo systemctl enable openvpn
Pour tester le bon fonctionnement du tunnel VPN, utiliser le site DNSLeakTest pour visualiser l'adresse IP publique qui vous permet de naviguer sur Internet. Cette adresse IP doit être celle serveur VPN et non plus celle du routeur de votre réseau (Box Internet).
Pour visualiser les serveurs DNS utilisés, cliquez sur Extended Test.
Depuis le serveur CA # cd cd EasyRSA-v3.0.8 # ./easyrsa revoke client1
Depuis le serveur CA # ./easyrsa gen-crl
Un fichier crl.pem a été généré.
Depuis le serveur CA # scp pki/crl.pem root@ip_serveur_OpenVPN:/etc/openvpn
Depuis le serveur OpenVPN # nano /etc/openvpn/server.conf
* Ajouter à la fin du fichier /etc/openvpn/server.conf a ligne suivante :
crl-verify crl.pem
# systemctl restart openvpn@server