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.
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 à 09h01Flux RSS des commentaires de cet article.
Ajouter un commentaire