Un article inspiré par le tutoriel disponible sur Digital Ocean: How To Set Up an OpenVPN Server on Ubuntu 16.04
Prérequis:
- Disposer d’un serveur Ubuntu 16.04 LTS sur Azure, je recommande l’installation de ce serveur en mode « Classique ».
- Ouvrir le point de terminaison 443 <=> 443 en TCP
Il faut suivre les étapes suivantes avec un utilisateur administrateur et non avec votre compte root.
Etape 1 – Installer OpenVPN
|
sudo apt-get update sudo apt-get install openvpn easy-rsa |
le package easy-rsa permet de gérer facilement notre certificat d’autorité interne.
Etape 2 – Configurer le répertoire CA
|
make-cadir ~/openvpn-ca cd ~/openvpn-ca |
Etape 3 – Configurer les variables du certificat
Le fichier doit contenir entre autres les informations suivantes, modifier à votre convenance le texte entre guillement:
|
. . . export KEY_COUNTRY="US" export KEY_PROVINCE="CA" export KEY_CITY="SanFrancisco" export KEY_ORG="Fort-Funston" export KEY_OU="MyOrganizationalUnit" . . . |
Etape 4 – Construire le certificat d’autorité
|
cd ~/openvpn-ca source vars |
Vous devriez voir le message suivant:
|
NOTE: If you run ./clean-all, I will be doing a rm -rf on /home/sammy/openvpn-ca/keys |
On s’assure de travailler dans un environnement propre:
On génère le certificat racine:
Etant donné qu’on a renseigné le fichier vars avec nos informations, appuyez simplement sur entré au long de l’opération pour confirmer les sélections.
Etape 5 – Créer la clé, le certificat du serveur et le fichier de chiffrement
|
./build-key-server server |
Vous pouvez accepter les valeurs par défaut proposés, puis valider la signature du certificat et la mise à jour de la base.
|
Certificate is to be certified until May 1 17:51:16 2026 GMT (3650 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entriesData Base Updated |
Nous allons générer un autre élément permettant de chiffrer de manière forte nos échanges de clés:
Afterwards, we can generate an HMAC signature to strengthen the server’s TLS integrity verification capabilities:
|
openvpn --genkey --secret keys/ta.key |
Etape 6 – Générer le certificat client et le signer
|
cd ~/openvpn-ca source vars ./build-key client1 |
Etape 7 – Configurer le serveur OpenVPN
Nous allons tout d’abord copier les fichiers nécessaires à OpenVPN et que nous venons de générer:
|
cd ~/openvpn-ca/keys sudo cp ca.crt ca.key server.crt server.key ta.key dh2048.pem /etc/openvpn |
Nous copions maintenant le fichier d’exemple de configuration d’OpenVPN pour nous en servir comme base:
|
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf |
On édite le fichier de configuration du serveur:
|
sudo nano /etc/openvpn/server.conf |
On modifie les données de dh, port et proto:
|
dh dh2048.pem port 443 proto tcp |
Voici l’ensemble des lignes à décommenter:
|
push "redirect-gateway def1 bypass-DHCP" push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 208.67.220.220" user nobody group nogroup tls-auth ta.key 0 # This file is secret dev tap |
On ajoute la ligne key-direction:
On commente la ligne dev tun:
Etape 8 – Ajuster la configuration réseau de votre serveur
Editer le fichier « /etc/sysctl.conf »
et décommenter la ligne suivante:
Appliquez la modification au système avec la commande suivante:
Editer le fichier de configuration du pare-feu « ufw » pour ajouter les lignes entre « START OPENVPN RULES » et « END OPENVPN RULES »
|
sudo nano /etc/ufw/before.rules |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
# # 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 -F -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 *filter . . . |
Vous allez peut être devoir modifier la ligne « -A POSTROUTING » afin qu’elle corresponde à votre carte réseau. Pour connaître le nom de votre carte réseau qui accède au net:
Si vous obtenez le résultat suivant, cela signifie que vous devez modifier dans votre fichier de configuration « eth0 » par « wlp11s0 »
|
default via 192.168.1.1 dev wlp11s0 proto static metric 600 |
Egalement nous allons modifier la configuration de ufw pour qu’il accepte le forward de packet par défaut:
|
sudo nano /etc/default/ufw |
|
DEFAULT_FORWARD_POLICY="ACCEPT" |
Ajustement du pare-feu:
Rechargement du pare-feu:
|
sudo ufw disable sudo ufw enable |
Etape 9 – Démarrage et activation du service OpenVPN
|
sudo systemctl start openvpn@server sudo systemctl enable openvpn@server |
Etape 10 – Créer un dossier pour stocker les configurations clients
|
mkdir -p ~/client-configs/files |
Modifier les permissions sur les fichiers et répertoires que nous stockons:
|
chmod 700 ~/client-configs/files |
Créons un fichier de configuration de base pour nos futurs utilisateurs:
|
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf |
On édite notre fichier:
|
nano ~/client-configs/base.conf |
Modifier la ligne « remote »:
Server_IP_adress correspond à l’adresse IP ou le domaine pointant vers votre serveur (XYZ.cloudapp.net).
|
remote server_IP_address 443 |
Décommentez les lignes suivantes:
|
user nobody group nogroup dev tap |
Commentez la ligne dev tun:
Commentez les lignes suivantes car nous allons intégrer directement dans notre fichier client les éléments correspondants:
|
#ca ca.crt #cert client.crt #key client.key |
Ajouter en fin de fichier la ligne suivante:
Créons maintenant un script pour générer rapidement notre fichier permettant de configurer le client VPN de nos utilisateurs:
|
nano ~/client-configs/make_config.sh |
Coller les lignes suivantes:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
#!/bin/bash # First argument: Client identifier KEY_DIR=~/openvpn-ca/keys OUTPUT_DIR=~/client-configs/files BASE_CONFIG=~/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 |
Rendre ce fichier exécutable:
|
chmod 700 ~/client-configs/make_config.sh |
A l’étape 6, nous avons générer les certificats pour notre utilisateur client1, nous allons maintenant générer le fichier de configuration qu’il doit recevoir de notre part:
|
cd ~/client-configs ./make_config.sh client1 |
Vous venez de générer un fichier client1.ovpn qui se situe dans votre dossier ~/client-configs/files.
Il ne vous reste plus qu’à le transmettre à votre utilisateur finale.
Bon surf !