Créer un serveur OpenVPN sur Microsoft Azure

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 !

Vous aimerez aussi...

1 réponse

  1. 10 août 2016

    […] Un nouvel article sur le sujet est disponible à cette adresse: Créer un serveur OpenVPN sur Microsft Azure […]

Laisser un commentaire

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