Installation du serveur VPN OpenVPN

Dernière mise à jour de l'article : 20/10/2016.

Un service VPN (virtual private network, ou réseau privé virtuel), permet à un utilisateur itinérant à l'extérieur de son réseau local de disposer des mêmes fonctionnalités que s'il était réellement connecté localement, quel que soit le terminal client utilisé (ordinateur portable, smartphone...). Cela peut concerner l'accès à des serveurs locaux ainsi que toutes autres ressources partagées (imprimantes, scanners... mais aussi la connexion Internet, par exemple).

Idéalement, la communication est intégralement chiffrée, maximisant la sécurité et la confidentialité des échanges.

Logo de OpenVPN
Logo de OpenVPN

Les serveurs VPN sont nombreux et utilisent rarement des protocoles compatibles entre eux. Cet article décrit l'installation de OpenVPN sur une distribution Debian GNU/Linux. OpenVPN est un logiciel libre très répandu basé sur OpenSSL. Il est également inclut dans la liste des logiciels conseillés par le site web Prism Break (à la rubrique des serveurs VPN) pour tenter d'échapper aux programmes de surveillance globale des services secrets internationaux.

Informations techniques

Nom du programme : OpenVPN
Version utilisée : 2.3.4
Licence : GNU GPL v2
Éditeur : OpenVPN Technologies, Inc.
Localisation : Californie (USA)
Site web : www.openvpn.net

Distribution utilisée : Debian GNU/Linux 8.6 « Jessie »

Article Wikipédia : https://fr.wikipedia.org/wiki/OpenVPN
VPN (article Wikipédia) : https://fr.wikipedia.org/wiki/Réseau_privé_virtuel
OpenSSL (article Wikipédia) : https://fr.wikipedia.org/wiki/OpenSSL

Préalable à l'installation

En ce qui me concerne, l'installation va s'opérer sur un conteneur LXC présent sur le réseau local et protégé par un pare-feu. Afin de pouvoir déployer l'interface réseau virtuelle utilisée par OpenVPN, il est nécessaire de configurer le serveur hébergeant le conteneur LXC. De plus, afin d'être accessible de « l'extérieur », il est également nécessaire de configurer le pare-feu. Disposer d'une adresse IP fixe est aussi requis, à moins de tenir à jour son adresse dynamique.

Par ailleurs, si l'on dispose d'un nom de domaine et qu'on a la faculté de configurer le serveur DNS correspondant, il pourrait s'avérer pratique d'attribuer un enregistrement spécifique au service proposé. Cette étape est facultative.

Configuration du serveur hébergeant le conteneur LXC

Il est nécessaire d'activer des fonctionnalités indispensables à LXC dans le fichier de configuration du conteneur, ainsi que dans le conteneur lui-même. Cette opération s'effectue en ligne de commande, sur le serveur hébergeant le conteneur LXC. Pour ce faire, il faut commencer par s'y connecter. Les étapes suivantes sont énoncées ci-dessous.

Se connecter en super-utilisateur :

su -

S'assurer que le conteneur visé est bien arrêté :

lxc-stop -n ID_CONTENEUR

Activer certaines fonctionnalités utiles à OpenVPN dans le fichier de configuration du conteneur :

vim /var/lib/lxc/ID_CONTENEUR/config

Ajouter ces lignes :

lxc.hook.autodev = /var/lib/lxc/ID_CONTENEUR/autodev
lxc.cgroup.devices.allow = c 10:200 rwm

La première permet d'exécuter un script chargé de créer une interface réseau virtuelle utile au VPN à chaque démarrage du conteneur. La seconde d'allouer les droits d'accès nécessaires à cette nouvelle interface.

Pour que cela fonctionne, il faut bien évidemment créer le script en question :

vim /var/lib/lxc/ID_CONTENEUR/autodev

Y coller ceci :

#!/bin/bash
cd ${LXC_ROOTFS_MOUNT}/dev
mkdir net
mknod net/tun c 10 200
chmod 0666 net/tun

Le rendre exécutable :

chmod +x /var/lib/lxc/ID_CONTENEUR/autodev

Puis démarrer le conteneur :

lxc-start -n ID_CONTENEUR

Configuration du pare-feu

Il est nécessaire d'ouvrir et rediriger le port TCP 1194 depuis le routeur vers la machine hébergeant le service VPN. Ce port est utile aux communications client/serveur.

Configuration du serveur DNS (facultatif)

Il peut s'avérer commode de créer un enregistrement DNS pointant vers l'adresse IP publique de la machine. Chez moi, ça ressemble à ceci :

vpn	86400	A	IP.IP.IP.IP

Installation du serveur VPN

Une fois le conteneur, le pare-feu et le serveur DNS configurés, reste à installer le serveur VPN. Pour ce faire, il faut commencer par se connecter à la machine sur laquelle installer le service. Les étapes suivantes sont énoncées ci-dessous.

Se connecter en super-utilisateur :

su -

Installer le programme :

aptitude install openvpn

Création des clefs de chiffrements

OpenVPN reposant sur OpenSSL et TLS pour chiffrer les communications, il est nécessaire de créer un ensemble de clefs permettant aux clients et au serveur de s'authentifier et échanger des données en toute confidentialité.

Copier le répertoire utile à la création des clefs de chiffrement dans /etc/openvpn et s'y rendre :

cp -r /usr/share/easy-rsa /etc/openvpn/
cd /etc/openvpn/easy-rsa

Éditer les variables générales à sa convenance :

vim vars

Par exemple, en fin de fichier :

export KEY_COUNTRY="FR"
export KEY_PROVINCE="75"
export KEY_CITY="Paris"
export KEY_ORG="My Wonderful Organization"
export KEY_EMAIL="foo@example.com"

Puis les charger en mémoire :

source vars

Si besoin, effacer toutes traces de clefs antérieures (attention de bien les sauvegarder si on souhaite les conserver !) :

./clean-all

Générer les paramètres de Diffie-Hellman :

./build-dh

Générer le certificat d'autorité de certification et la clef privée correspondante :

./pkitool --initca

Générer le certificat et la clef privée du serveur :

./pkitool --server server

Créer une clef tierce pour éviter toute usurpation (facultatif) :

openvpn --genkey --secret keys/ta.key

Copier les clefs dans le dossier de configuration de OpenVPN :

cp keys/{ca.crt,ta.key,server.crt,server.key,dh2048.pem} /etc/openvpn/

Configuration de OpenVPN

Créer le répertoire dans lequel OpenVPN sera chrooté, pour une plus grande sécurité (facultatif) :

mkdir -p /etc/openvpn/chroot/tmp

Décompresser le fichier de configuration de OpenVPN donné en exemple :

gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf

Puis l'éditer :

vim /etc/openvpn/server.conf

Par exemple :

port 1194
proto udp
dev tun

ca ca.crt
cert server.crt
key server.key
dh dh2048.pem

server 192.168.3.48 255.255.255.248
push "route 192.168.2.0 255.255.255.0"

client-config-dir ccd # Facultatif

push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 192.168.2.33"

client-to-client

keepalive 10 120

tls-auth ta.key 0 # Facultatif

cipher AES-128-CBC

comp-lzo

max-clients 10

user nobody
group nogroup

persist-key
persist-tun

status openvpn-status.log
log-append /var/log/openvpn.log
verb 3

chroot /etc/openvpn/chroot # Facultatif

Redémarrer le service OpenVPN :

service openvpn restart

Trafic Internet (facultatif)

Afin de permettre aux clients de bénéficier du trafic Internet, il faut activer la fonctionnalité de routage des paquets IP de la machine hébergeant le service VPN, ainsi que la translation d'adresses NAT des paquets clients.

La première opération s'effectue — temporairement — par la commande suivante :

echo 1 > /proc/sys/net/ipv4/ip_forward

Afin de rendre l'opération persistante, il faut modifier le fichier /etc/sysctl.conf :

sed -i s/"#net.ipv4.ip_forward=1"/"net.ipv4.ip_forward=1"/ /etc/sysctl.conf

La seconde opération s'effectue — temporairement — par la commande suivante :

iptables -t nat -A POSTROUTING -o eth0 -s 192.168.3.48/29 -j SNAT --to-source IP_DE_LA_MACHINE

Afin de rendre l'opération persistante, il existe de nombreuses méthodes. Si vous n'êtes pas familier avec cela, le plus simple est d'installer le paquet iptables-persistent et de répondre par l'affirmative à la première question posée :

aptitude install iptables-persistent

Création d'une configuration cliente

Créer le répertoire des configurations clientes :

mkdir /etc/openvpn/clients

Créer le répertoire des configurations clientes particulières (facultatif) :

mkdir /etc/openvpn/chroot/ccd

Générer un certificat et une clef cliente :

source vars && ./pkitool NOM_CLIENT

Créer et éditer le fichier de configuration particulière du client (facultatif) :

vim /etc/openvpn/chroot/ccd/NOM_CLIENT

Lui attribuer une adresse IP fixe, en y collant ceci (facultatif) :

ifconfig-push 192.168.3.51 192.168.3.52

Créer le répertoire dédié à ce nouveau client :

mkdir /etc/openvpn/clients/NOM_CLIENT

Copier les fichiers du client dans son répertoire :

cp /etc/openvpn/{ca.crt,ta.key} keys/{NOM_CLIENT.crt,NOM_CLIENT.key} /etc/openvpn/clients/NOM_CLIENT/

Se déplacer dans le répertoire du client :

cd /etc/openvpn/clients/NOM_CLIENT

Copier le fichier de configuration donné en exemple :

cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf .

Puis l'éditer :

vim client.conf

Par exemple :

client

dev tun
proto tcp
remote vpn.FQDN.TLD 1194
resolv-retry infinite
nobind

user nobody
group nogroup

persist-key
persist-tun

ca ca.crt
cert NOM_CLIENT.crt
key NOM_CLIENT.key

ns-cert-type server
tls-auth ta.key 1 # Facultatif
cipher AES-128-CBC

comp-lzo

verb 3

Archiver et compresser les fichiers clients :

tar jcvf NOM_CLIENT.tar.bz2 ../NOM_CLIENT

Configuration d'un accès client

Maintenant que le serveur est configuré et qu'une configuration cliente à été créée, il ne reste plus qu'à l'importer dans son système d'exploitation favoris pour se connecter au service VPN. Il existe de nombreux programmes clients, avec ou sans interface graphique. Sous Debian GNU/Linux et l'environnement de bureau Gnome, on peut, par exemple, installer le paquet network-manager-openvpn-gnome :

sudo aptitude install network-manager-openvpn-gnome

Depuis le terminal client, il faut récupérer l'archive compressée contenant la configuration cliente. Par exemple :

scp USER@FQDN.TLD:/etc/openvpn/clients/NOM_CLIENT/NOM_CLIENT.tar.bz2 .

Toujours depuis le terminal client, et une fois l'archive décompressée, on peut importer le fichier de configuration client.conf dans nm-connection-editor, à l'onglet dédié aux connexions VPN :

nm-connection-editor

Une fois à « l'extérieur » de son réseau local, il devrait désormais être possible de se connecter au service VPN depuis la barre des tâches, en cliquant sur l'applet du gestionnaire de connexion réseau, à la rubrique « Connexions par VPN ».

Article sous licence Creative Commons BY-SA 3.0 France.

Publié le

Mardi 1 octobre 2013 à 09h01

Ajouter un commentaire

HTML filtré

  • Balises HTML autorisées : <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd> <p>
  • Textual smiley will be replaced with graphical ones.
  • Les adresses de pages web et de courriels sont transformées en liens automatiquement.
  • Les lignes et les paragraphes vont à la ligne automatiquement.

Texte brut

  • Aucune balise HTML autorisée.
  • Les adresses de pages web et de courriels sont transformées en liens automatiquement.
  • Les lignes et les paragraphes vont à la ligne automatiquement.

Flux RSS des commentaires de cet article.