Table des matières

OpenVPN et PKI

Présentation

Projet :

Ressource :

Installer OpenVPN sur le serveur OpenVPN

# apt update
# apt install openvpn

Installer une autorité de certification sur un serveur CA dédié (autre serveur que 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.

Téléchargez EasyRSA

# 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

Configurer le CA

# 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"
Le CA est maintenant prêt pour singer des demandes de signature de certificat

Création du certificat signé pour le serveur OpenVPN sur le serveur VPN

# 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

Gestion des certificats signés et des clés pour les clients du serveur OpenVPN

La démarche à suivre est la suivante :

# mkdir -p ~/client-configs/keys
# chmod -R 700 ~/client-configs
# ./easyrsa gen-req client1 nopass

Création :

  • de la clé privée du client client1.key qu'il faudra copier dans le dossier /client-configs/keys
  • du fichier de demande de certificat client1.req pour signature par le CA.
# 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

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

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

</code>

* configurer UFW pour autoriser par défaut forwarded packets en modifiant le fichier /etc/default/ufw pour accept à l apalce de DROP.
DEFAULT_FORWARD_POLICY="ACCEPT"
# ufw disable
# ufw enable

Démarrer le service OpenVPN

# systemctl start openvpn@server
# systemctl status openvpn@server
# systemctl status openvpn@server
# systemctl enable openvpn@server

Création d'un script de génération de la configuration des clients

# 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é.

First argument: Client identifier

KEYDIR=/home/compte/client-configs/keys OUTPUTDIR=/home/compte/client-configs/files BASE_CONFIG=/home/compte/client-configs/base.conf

cat ${BASECONFIG} \ <(echo -e '<ca>') \ ${KEYDIR}/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

</code>

* rendre le script exécutable
# 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 ~/

Installation de OpenVPN sur un client Linux

client$ sudo apt update
client$ sudo apt install openvpn

Révoquer des certificats client

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

Résumé

<uml>

Préparation du CA : création de la PKI

CA → CA : Installer EasyRSA CA → CA : Compléter les variables du CA \ndans le fichier vars CA → CA : Initier la PKI \n→ easyrsa init-pki sur CA CA → CA : Création de la CA avec common name\n→ easyrsa build-ca nopass \n→ création de ca.crt & ca.key

Préparation du serveur OpenVPN

OpenVPN→OpenVPN : Installer OpenVPN OpenVPN → OpenVPN : Installer EasyRSA OpenVPN → OpenVPN : Initier la PKI \n→easyrsa init-pki OpenVPN → OpenVPN : création clé et requête avec common name\n→ easyrsa gen-req \n→ création OpenVPN.key & OpenVPN.req OpenVPN → OpenVPN : copie clé privée OpenVPN.key \ndans le dossier du logiciel OpenVPN /etc/openvpn OpenVPN → CA : transfert de OpenVPN.req CA → CA : Import de fichier OpenVPN.req \n→ easyrsa import-reg CA → CA : Signer le certificat en précisant le type server \n→ easyrsa sign-req server CA → OpenVPN : transfert certificat signé OpenVPN.crt \ndans le dossier du logiciel OpenVPN CA → OpenVPN : transfert certificat public du CA ca.crt \ndans le dossier du logiciel OpenVPN OpenVPN → OpenVPN : Création d'un clé Diffie-Hellman dh.pem \n→ easyrsa gen-dh \n→ mise dans le dossier du logiciel OpenVPN OpenVPN → OpenVPN : génération d'une signature HMAC ta.key \n→ openvpn - -genkey - -secret \n→ mise dans le dossier du logiciel OpenVPN

Préparation du serveur OpenVPN pour gérer les clients

OpenVPN → OpenVPN : Création du dossier ~/client-configs/keys OpenVPN → OpenVPN : Sécurisation du dossier \n→ chmod -R 700 ~/client-configs

Gestion de chaque nouveau client sur le serveur OpenVPN

OpenVPN → OpenVPN : Génération des clés pour un client\n→ easyrsa gen-req client1 nopass\n→ création de client1.key & clienty1.req OpenVPN → OpenVPN : Copie de la clé privée client1.key\ndans le dossier ~/client-configs/keys OpenVPN → CA : transfert de clienty1.req CA → CA : Import de fichier clienty1.req \n→ easyrsa import-reg CA → CA : Signer le certificat en précisant le type client \n→ easyrsa sign-req client CA → OpenVPN : transfert certificat signé client1.crt \ndans le dossier ~/client-configs/keys OpenVPN → OpenVPN : Copie de la clé ta.key de EasyRSA\ndans le dossier ~/client-configs/keys OpenVPN → OpenVPN : Copie de la clé ca.crt de /etc/opernvpn \ndans le dossier ~/client-configs/keys

Configuration du serveur OpenVPN avec clés et certificats serveur et client

OpenVPN → OpenVPN : récupération et modification de l'exemple de configuration serveur.conf OpenVPN → OpenVPN : configuration de ufw pour\n- accepter les connexions sur le port 1194\n- activer le NAT sur eth0\n- autoriser par défaut le forwarding OpenVPN → OpenVPN : configurer le routage \ndans le fichier /etc/sysctl.conf OpenVPN → OpenVPN : démarrer le service openvpn avec le fichier server.conf\n→ systemctl start openvpn@server OpenVPN → OpenVPN : activer le démarrage automartique du service\n→ systemctl enable openvpn@server </uml>