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
nano vars
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_EMAIL="me@myhost.mydomain" 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:
./clean-all
On génère le certificat racine:
./build-ca
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:
./build-dh
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:
key-direction 0
On commente la ligne dev tun:
;dev tun
Etape 8 – Ajuster la configuration réseau de votre serveur
Editer le fichier « /etc/sysctl.conf »
nano /etc/sysctl.conf
et décommenter la ligne suivante:
net.ipv4.ip_forward=1
Appliquez la modification au système avec la commande suivante:
sudo sysctl -p
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
# # 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:
ip route | grep default
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:
sudo ufw allow 443/tcp
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:
;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:
key-direction 1
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:
#!/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 !
[…] Un nouvel article sur le sujet est disponible à cette adresse: Créer un serveur OpenVPN sur Microsft Azure […]