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 […]