openvpn

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 !

By Enzo

Je suis ingénieur système et je suis passionné par le monde de l’informatique et des technologies.

One thought on “Créer un serveur OpenVPN sur Microsoft Azure”

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.