Installation du serveur VPN OpenVPN

Logo de OpenVPN

Dernière mise à jour de l'article : 17/12/2014.

Un service de Virtual Private Network (VPN), 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.2.1
Licence : GNU GPL v2
Éditeur : OpenVPN Technologies, Inc.
Localisation : Californie (USA)
Site web : www.openvpn.net

Distribution utilisée : Debian GNU/Linux 7.7 « Wheezy »

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 OpenVZ 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 OpenVZ. 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 que l'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 OpenVZ

Il est nécessaire d'activer des fonctionnalités indispensables à OpenVPN 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 OpenVZ. 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é :

vzctl stop ID_CONTENEUR

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

vzctl set ID_CONTENEUR --devices c:10:200:rw --save
vzctl set ID_CONTENEUR --capability net_admin:on --save
vzctl set ID_CONTENEUR --devnodes net/tun:rw --save

Démarrer le conteneur :

vzctl start ID_CONTENEUR

Créer la carte réseau virtuelle utile à OpenVPN dans le conteneur :

vzctl exec ID_CONTENEUR mkdir -p /dev/net
vzctl exec ID_CONTENEUR chmod 600 /dev/net/tun

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/doc/openvpn/examples/easy-rsa/2.0 /etc/openvpn/easy-rsa
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="myself@email.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 keys/ta.key keys/server.crt keys/server.key keys/dh1024.pem /etc/openvpn/

Configuration de OpenVPN

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

mkdir /etc/openvpn/chroot

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 tcp
dev tun

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

server 192.168.3.48 255.255.255.248
push "route 192.168.3.0 255.255.255.0"

client-config-dir ccd # Facultatif

push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 192.168.3.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 /etc/openvpn/ta.key keys/NOM_CLIENT.crt keys/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.

Vus : 6027
Publié par Cyprien Pouzenc : 27