OpenVPN : Mise en place d'OpenVPN sur différentes plateformes
Contents
Software version | OpenVPN 2.x |
---|---|
Operating System | Debian 6 OpenBSD 5.9 FreeBSD 9 |
Website | OpenVPN Website |
Last Update | 30/05/2013 |
Others |
1 Introduction
OpenVPN est de nos jours, ce qui se fait de mieux en matière de VPN software.
OpenVPN permet à des pairs de s'authentifier entre eux à l'aide d'une clé privée partagée à l'avance, de certificats ou de couples de noms d'utilisateur/mot de passe. Il utilise de manière intensive la bibliothèque d'authentification OpenSSL ainsi que le protocole SSLv3/TLSv1. Disponible sous Solaris, OpenBSD, FreeBSD, NetBSD, Linux (Debian, Redhat, Ubuntu, etc...), Mac OS X, Windows 2000, XP, Vista et 7, il offre aussi de nombreuses fonctions de sécurité et de contrôle.
OpenVPN n'est pas compatible avec IPsec ou d'autres logiciels VPN. Le logiciel contient un exécutable pour les connexions du client et du serveur, un fichier de configuration optionnel et une ou plusieurs clés suivant la méthode d'authentification choisie.
2 Installation
2.1 Debian
Pour Debian ou Debian like (Ubuntu par exemple) c'est très simple :
aptitude |
aptitude install openvpn |
Vous pouvez en plus de cette doc, jetter un coup d'oeil dans "/etc/default/openvpn". Il y a des options très intéressantes.
2.2 FreeBSD
Sous FreeBSD, c'est simple également :
pkg_addpkg_add -vr openvpn |
2.3 OpenBSD
Sous OpenBSD :
pkg_add |
pkg_add -iv openvpn |
3 Configuration
3.1 Authentification via identifiants
La double authentification utilisant PAM permet d'ajouter un niveau de sécurité à l'authentification par certificat. Cette solution pourra par exemple être utilisé pour un déploiement utilisant un unique certificat partagé entre tous les utilisateurs et permettra d'avoir tout de même une méthode d'authentification.
Enfin, l'authentification par PAM peut permettre de gérer les utilisateurs dans une base LDAP.
Toute ma configuration a été faite sous OpenBSD. Je vais quand même essayer de faire la doc pour Linux également par rapport à ce que j'aurais trouvé.
3.1.1 Serveur
Installons le package adequat (car c'est un plugin non intégré à OpenVPN aujourd'hui) :
pkgadd |
pkgadd -iv openvpn_bsdauth |
- Ajoutons ces lignes dans la configuration du serveur pour l'authentification par identifiants sous Linux :
/etc/openvpn/server.conf |
# OpenVPN PAM Auth plugin /usr/lib/openvpn/openvpn-auth-pam.so common-auth ou plugin openvpn-auth-passwd.so _openvpnusers |
_openvpnusers : correspond au nom du groupe ayant le droit de se connecter
- Si vous êtes sous BSD :
/etc/openvpn/server.conf |
# OpenVPN BSD Auth auth-user-pass-verify /usr/local/libexec/openvpn_bsdauth via-file |
Ajoutez ensuite les personnes que vous souhaitez pouvoir se connecter dans groupe '_openvpnusers'.
Redémarrez le serveur OpenVPN.
3.1.2 Client
- Login avec prompt
Au niveau client, voici ce qu'il faut rajouter :
client.conf |
# OpenVPN PAM/BSD authentification auth-user-pass |
Maintenant, quand vous essayerez de lancer votre connexion, il vous demandera un login et un mot de passe.
- Login automatique
Si vous souhaitez avoir un login et password automatique, il va falloir mettre dans un fichier le login et mot de passe comme ceci :
auth.conf |
login password |
Assurez vous que vous soyez le seul a avoir les droits sur ce fichier :
chmod |
chmod 600 auth.conf |
Et rajoutez ceci dans client.conf :
client.conf |
# OpenVPN PAM/BSD authentification auth-user-pass auth.conf |
Maintenant, lancez la connexion, il ne vous sera rien demander.
3.2 Authentification par clefs
3.2.1 Serveur
Nous allons créer ici les certificats pour l'authentification. Il va falloir créer un certificat root, puis des certificats pour les clients. Editez le fichier suivant et adaptez suivant votre configuration :
Ici, j'ai mis l'expiration des clefs à 10 ans pour ne pas avoir à regénérer des clefs tous les 4 matins. Ensuite déplacez vous dans le dossier de documentation d'OpenVPN pour trouver tous les scripts qui vous permettrons de générer les certificats :
Remplacez server par le nom de votre serveur ou se trouve openvpn.
3.2.2 Générer des certificats clients
Toujours côté serveur, pour les clients, procéder comme ceci pour chacun d'eux :
./build-key deimos mv keys/deimos* /etc/openvpn |
3.3 Réservations d'IP des clients
Ajoutez ceci dans la conf d'openvpn si vous voulez faire des réservations d'IP :
/etc/openvpn/openvpn.conf |
#Répertoire contenant la configuration pour chaque client (par exemple adresse IP fixe) client-config-dir /etc/openvpn/clients |
N'oubliez pas de créer le dossier /etc/openvpn/clients.
Ensuite, il faut un fichier de configuration par client (/etc/openvpn/clients/<CN indiqué sur le certificat du client>)
Prenon exemple sur la machine srv1 (fichier /etc/openvpn/clients/srv1) :
/etc/openvpn/clients/srv1 |
ifconfig-push 10.8.0.50 10.8.0.51 |
(l'adresse 10.8.0.51 est utilisé comme "Peer Point" pour le serveur OpenVPN)
4 Configuration clients
Voici les différents types de configurations possible.
4.1 Windows
Il faut tout d'abord télécharger OpenVPN GUI. Ensuite, placer les clefs dans C:\Program Files\OpenVPN\Config et le fichier de configuration aussi. Mais il faut le renomer en config.ovpn (ou xxxx.ovpn)
C:\Program Files\OpenVPN\Config |
client dev tun proto udp remote @IP 5000 resolv-retry infinite nobind tls-client persist-key persist-tun ca ca.crt cert deimos.crt key deimos.key comp-lzo verb 1 |
Il faut maintenant vérifier le service OpenVPN, si l'on veut une connection permanante, ou bien
4.2 Mac OS X
Sur Mac, le GUI est Tunnel Blick. Il faut lui apliquer ce type de configuration et placer les clefs au bon endroit :
Il ne reste plus qu'a faire "Connecter openvpn" sur le tunnel placé en haut à droite.
4.3 Linux
Sur Linux, il suffit d'installer openvpn et appliquer la configuration client identique à celle de Windows.
Ensuite, pour lancer le client :
openvpn |
openvpn --config /home/deimos/.openvpn/client.conf |
Pour que la connection VPN s'auto-établisse, il faut nommer le fichier de conf avec le même nom que les certificats.
Si vous voulez un client graphique sous Linux, Ubuntu a son propre Network Manager et avec un petit plugin d'installé, il le gère très bien :
apt-get |
apt-get install network-manager-openvpn |
5 Ma configuration
Parcequ'il n'est pas toujours facile de voir à quoi ressemble une configuration qui fonctionne, voici les miennes.
Attention pour les gens qui veulent tenter à l'arrache sans avoir lu la doc, j'utilise la double authentification. Supprimez les lignes qui ne vous intéresse pas après avoir lu la doc.
5.1 Serveur
Je lance mon serveur avec ces lignes :
/etc/hostname.tun0 |
up !/usr/local/sbin/openvpn --config /etc/openvpn/server.conf --tmp-dir /tmp --daemon --script-security 2 > /dev/null 2>&1 |
5.2 Client
Cette configuration me sert à avoir une connexion complètement automatique :
Pour info, voici les options qu'il faut paramétrer :
- keepalive : permet la reconnection automatique en cas de perte
- auth-user-pass : permet de stocker dans un fichier mes identifiants
- auth-retry : permet de ne pas avoir d'interraction
- auth-nocache : cette directive n'est pas mise volontairement. Si vous la mettez, les identifiants seront droppés de la mémoire à la première connexion et à la première déconnexion, aucune reconnexion automatique ne fonctionnera. Celà se traduit généralement par un message du type : "ERROR: could not read Auth username from stdin".
6 FAQ
6.1 WARNING: No server certificate verification method has been enabled
Il manque tout simplement cette ligne dans la configuration de votre client :
~/.openvpn/client.conf |
tls-client |
6.2 Révoquer un certificat
En cas de compromission d'un des clients, il est important de savoir comment révoquer son certificat afin de lui bloquer l'accès au serveur OpenVPN.
Il est possible de bloquer l'accès à un client grâce à easy-rsa (toujours en se plaçant dans le répertoire d'easy-rsa):
./revoke-full client2 |
Il suffit ensuite de copier la liste de révocation (keys/crl.pem) dans le répertoire /etc/openvpn/server/ et de spécifier au serveur OpenVPN de vérifier la liste de révocation en ajoutant la ligne :
crl-verify |
crl-verify /etc/openvpn/server1/crl.pem |
dans le fichier de configuration du serveur (/etc/openvpn/server.conf).
Il suffit ensuite redémarrer le serveur OpenVPN.
6.3 Bypasser les proxy
Vous êtes peut être au taf ou à l'école et seul le port 80 et 443 y sont ouvert (bad). De plus des sites sont bloqués. Pour contourner la solution, il faut côté serveur utiliser le port 443 pour établir le tunnel. Le port 80 risque de ne pas fonctionner dû à certaines restrictions (le port 443 utilise la méthode CONNECT dû au SSL, alors que le port 80 fonctionne en mode GET et POST). Je précise que c'est comme ça si le proxy est correctement configuré (et pas en mode gruyère, sinon ça passe sur le port 80 si le mode CONNECT est activé).
6.3.1 Serveur
Il faut simplement modifier le type de connexion (remplacer UDP par TCP) et changer sa passerelle par défaut automatiquement avec ces 2 options :
/etc/openvpn/server.conf |
... proto tcp port 443 push "redirect-gateway" ... |
On redémarre ensuite le serveur :-)
6.3.2 Client
Là nous allons définir des règles de proxy et passer par le port 443 :
Avec tout ça on est bon, yapuka :-)
7 FAQ
7.1 Routage avancé impossible
Si comme moi vous souhaitez faire du routage un peu compliqué sur OpenVPN, vous devez impérativement changer vos interfaces TUN en TAP. Pour quoi ? Tout simplement parce que vous êtes sur une couche de niveau 3 ne TUN et Niveau 2 en TAP.
- Sur OpenBSD il faut faire comme ceci :
server.conf |
... dev tun0 dev-type tap ... |
- Sur Linux :
server.conf |
... dev tap0 ... |
7.2 Faire fonctionner OpenVPN dans un VE OpenVZ
Si vous souhaitez faire fonctionner un serveur OpenVPN dans un VE, ajoutez ce type de droits et créez les devices nécessaires :
8 Ressources
Installation d'OpenVPN
Documentation sur une mise en place complexe d'OpenVPN
Authentification matérielle pour OpenVPN
http://blog.innerewut.de/2005/7/4/openvpn-2-0-on-openbsd
http://www.openbsd-france.org/documentations/OpenBSD-openvpn.html
http://www.procyonlabs.com/guides/openbsd/openvpn/index.php
http://purple.monk.free.fr/phiva/?p=90
http://www.imped.net/oss/misc/openvpn-2.0-howto-edit.html
http://auth-passwd.sourceforge.net/