OpenVPN
Objectifs
Relier 2 réseaux privés de manière sécurisée via Internet.
Architecture
Soit 2 réseaux:
- 192.168.1.0/24 dit lan1
- 192.168.2.0/24 dit lan2
Pour faire simple, le serveur OpenVPN fait passerelle. On prendra la dernière ip disponible (.254).
Sur le lan1, une machine fait office de serveur OpenVPN. Elle a donc comme adresse ip 192.168.1.254 et s'appelle serveur.lan1. Sur le lan2, une machine fait office de client OpenVPN. Elle a comme adresse ip 192.168.2.254 et s'appelle clientvpn.lan2.
Une plage sera reservée pour le tunnel, en 172.16.254.X. Elle sera par exemple en 172.16.254.1 sur le serveur OpenVPN, et attribuée automatiquement sur le client. Nos 2 machines OpenVPN auront donc chacune une interface sur ce reseau, interface qui sera créée par OpenVPN (normalement tap0).
La procédure à suivre est la suivante:
- Installation et configuration d'OpenVPN sur le serveur
- Creation des certificats SSL
- Installation et configuration d'OpenVPN sur le client
- Configuration des tables de routage
Mise en oeuvre
Installation et configuration d'OpenVPN sur le serveur
Installation
L'installation sur la machine serveur.lan1 du paquet OpenVPN se fait avec la commande suivante:
yum install openvpn
Configuration
Pour la configuration du serveur OpenVPN, création d'un fichier /etc/openvpn/vpn.conf avec le contenu suivant:
port 1194 proto tcp dev tap cipher AES-256-CBC ca /etc/pki/CA/ca.crt cert /etc/pki/openvpn/serveur.crt key /etc/pki/openvpn/serveur.key dh /etc/pki/openvpn/dh.pem ifconfig 172.16.254.1 255.255.255.0 server-bridge 172.16.254.1 255.255.255.0 172.16.254.50 172.16.254.100 ifconfig-pool-persist ipp.txt client-to-client keepalive 10 120 comp-lzo max-clients 100 user nobody group nobody status /var/log/vpn-status.log log /var/log/vpn.log verb 3
Les options port et proto permettent de définir le protocole utilisé (par défaut udp) et le port (par defaut 1194).
L'option dev permet d'indiquer quel type de tunnel utiliser, tap pour du niveau 2 (ethernet), tun pour du niveau 3 (ip). Ici l'option tap générera normalement une interface tap0 sur le serveur.
L'option cipher permet d'indiquer le type de chiffrement utiliser.
Les options ca, cert, key et dh sont en rapport avec les certificats SSL que nous allons générer plus tard.
L'option ifconfig permet de configurer l'adresse ip du point d'entrée du tunnel, qui sera portée par tap0.
L'option server-bridge permet de simplifier la mise en place de VPN de type tap (ethernet), avec la gestion d'un DHCP pour l'attribution dynamique des adresses IP aux clients VPN.
L'option ifconfig-pool-persist permet de rendre statique autant que possible les adresses attribuées aux clients VPN.
L'option client-to-client permet d'autoriser les flux entre les clients. Sinon par défaut seuls les flux clients serveur sont autorisés.
Le reste est plutôt explicite.
Gestion des certificats
Pour authentifier les clients, des certificats SSL vont être émis par notre serveur. Il fera donc office d'autorité de certification (CA).
Pour faciliter la gestion des certificats, les scripts easy-rsa sont installés avec le paquet OpenVPN. Ils sont présents dans le repertoire /usr/share/openvpn/easy-rsa/2.0/.
Il faut commencer par éditer le fichier /usr/share/openvpn/easy-rsa/2.0/vars, pour les clefs suivantes:
export KEY_COUNTRY="FR" export KEY_PROVINCE="Ile de France" export KEY_CITY="Paris" export KEY_ORG="VPN"
Une fois le fichier éditer, il faut le sourcer pour que ces variables soit présentes dans notre environnement shell:
cd /usr/share/openvpn/easy-rsa/2.0 source vars ./clean-all
Nous allons maintenant générer le fichier DH (Diffie Hellman) qui sert lors de l'initialisation du tunnel. Cette phase utilise un chiffrage symétrique reposant sur ce fichier, avant de pouvoir passer au chiffrement assymétrique.
Pour générer le fichier DH:
./build-dh