La configuration d’un VPN est souvent d’une très grande utilité pour la sécurité de vos équipements mais aussi pour une facilité d’accès accrue. Cet article va vous présenter comment mettre en place un serveur VPN en utilisant OpenVPN, ainsi que la configuration des clients Windows et Linux.
Vous pouvez également consulter la documentation anglaise officielle d’OpenVPN très fournie.
Côté serveur
apt-get install openvpn
A la question "Faut il créer un périphérique TUN/TAP ?" Répondez oui.
TAP simule en software un périphérique Ethernet (niveau 2). Il est utile pour faire des bridge.
TUN (network TUNnel) simule un périphérique réseau de niveau 3 pour du routing.
A la question "Faut il arrêter OpenVPN avec de le mettre à jour ? Répondez non.
Avec OpenVPN, on peut compresser les données avec un algrothme de compression sans perte : LZO.
apt-get install liblzo1
Création du certificat de l’autorité de certification (CA)
C’est la partie la plus fastidieuse.
cd /usr/share/doc/openvpn/examples/easy-rsa/
Dans ce répertoire se trouvent quantité de petits scripts très utiles pour la génération de clé et de certificats.
Dans un premier temps, on va éditer le fichier "vars" qui va contenir des données par défaut pour les scripts. Cette étape n’est pas indispensable mais elle va bous faire gagner beaucoup de temps. fichier "vars" :
export KEY_COUNTRY=FR
export KEY_PROVINCE=France
export KEY_CITY=Paris
export KEY_ORG="moro server"
export KEY_EMAIL="monemail@moroblog.info"
On prépare les variables que l’on vient de définir et on nettoie le répertoire des clefs :
. ./vars
./clean-all
On va utiliser un fichier de configuration par défaut pour openssl :
gunzip openssl.cnf.gz
Ensuite on a créer dans le répertoire "keys/" le certificat principal du serveur "ca.crt" :
./build-ca
Une série de question va vous être posé, tout est déjà rempli grâce au fichier "vars", mais vous devez impérativement choisir un "Common Name" pour le server.
On a créé l’autorité de certification (CA) !
Création du certificat et de la clé pour le serveur :
./build-key-server MonServeurVPN
Le script "build-key-server" demande un mot de passe que je n’ai pas rempli.
Ceci créé dans "keys/" le certificat "MonServeurVPN.crt" et la clé "MonServeurVPN.key".
La clé SSL est sous la forme :
--BEGIN RSA PRIVATE KEY--
//bloc de données
--END RSA PRIVATE KEY--
Le certificat ressemble beaucoup :
--BEGIN CERTIFICATE--
//bloc de données
--END CERTIFICATE--
Création de certification & clé pour un client
./build-key Syrius
Attention, le Common Name doit être différent pour chaque entité, sinon vous aurez l’erreur :
failed to update database
TXT_DB error number 2
Création du paramètre Diffie Hellman
./build-dh
Ceci créé dans "keys/" un fichier "dh1024.pem". C’est une opération relativement longue.
Mise en place des fichiers serveurs
On va copier les fichiers nécessaire dans /etc/openvpn :
cp ./keys/{ca.crt,ca.key,MonServeurVPN.crt,MonServeurVPN.key,dh1024.pem} /etc/openvpn
Configuration du démon openvpn
Création d’un utilisateur
Par défaut, l’utilisateur "nobody" est utilisé, ce qui n’est pas optimal.
groupadd openvpn
useradd -d /dev/null -g openvpn -s /bin/false openvpn
Edition du fichier de configuration :
On va se baser sur le fichier de configuration proposé par openvpn :
cd /usr/share/doc/openvpn/examples/sample-config-files/
gunzip server.conf.gz
cp server.conf /etc/openvpn/
On édite "/etc/openvpn/server.conf" :
On modifie les noms des certificats/clés et le nom du user à utiliser pour le démon :
ca ca.crt
cert MonServeurVPN.crt
key MonServeurVPN.key # This file should be kept secret
dh dh1024.pem
user openvpn
group openvpn
Démarrage du serveur
/etc/init.d/openvpn restart
On s’assure que le démon tourne bien et on va surveiller les messages du démon :
$ ps aux | grep openvpn
openvpn 355 0.0 0.2 4532 2700 ? Ss Sep12 3:19 /usr/sbin/openvpn --writepid /var/run/openvpn.server.pid --daemon ovpn-server --cd /etc/openvpn --config /etc/openvpn/server.conf
$ tail -f /var/log/syslog
On peut déjà remarquer qu’un "ifconfig"nous montre une nouvelle interface.
$ ifconfig
tun0 Lien encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet adr:10.8.0.1 P-t-P:10.8.0.2 Masque:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:487260 errors:0 dropped:0 overruns:0 frame:0
TX packets:302913 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:100
RX bytes:40797602 (38.9 MiB) TX bytes:99006324 (94.4 MiB)
Installation d’un client Windows
Vous devez télécharger la version Windows d’OpenVPN
L’installation va créer une "carte" "TAP-Win32 Adapter V8". Le programme se lance automatiquement au démarrage.
Il faut copier dans "C :/Program Files/OpenVPN/config/" les fichiers que l’on a précedemment créé sur notre serveur : "ca.crt", "Syrius.crt" et "Syrius.key". On utilise ensuite le fichier de configuration d’exemple situé dans "sample-config/" : "client.ovpn". On le copie dans le répertoire "config/" et on édite les champs :
remote 12.34.56.78 1194 ; IP de votre serveur VPN
ca ca.crt
cert Syrius.crt
key Syrius.key
On démarre OpenVPN : Démarrer > Programmes > OpenVPN > OpenVPN GUI. Pour se connecter, on clique droit sur l’icone d’OpenVPN à côté de l’heure, puis "Se connecter".
Configuration d’un client Linux
apt-get install openvpn
Il faut bien sûr créer un nouveau couple (certificat/clef) pour ce client. On les copiera avec l’autorité de certification "ca.crt" dans /etc/openvpn.
La configuration du "client.conf" est identique à celle de Windows.
Faire en sorte que les clients se voient entre eux
Dans le fichier "/etc/openvpn/server.conf" sur le serveur :
push "route 10.8.0.0 255.255.255.0"
client-to-client
Ceci va créer les routes nécessaires pour les clients.
Déboguage
Pour déboguer, on peut logguer séparement les messages d’openvpn :
log /var/log/openvpn.log
On peut modifier le niveau de verbosité des logs :
verb 6
Enfin, on peut activer un accès en local pour des commande direct sur le démon :
management localhost 7505
Ajouter un client après coup
La procédure est exactement la même que lors de l’installation, vous devrez faire :
# cd /usr/share/doc/openvpn/examples/easy-rsa/
# . ./vars
# cd keys
# ../build-key Client04
(...)
Ce qui va vous générer un Client04.crt et Client04.key, que vous copierez sur votre nouveau client. Il vous faudra également paramétrer son fichier de configuration comme nous l’avons déjà vu.
Important
Une erreur à ne pas faire est de réexecuter ./clean-all dans le répertorie /usr/share/doc/openvpn/examples/easy-rsa/. Cette commande va vous supprimer toutes vos clefs et vos certificats clients... Il faut conserver les certificats pour pouvoir les révoquer par la suite !
Sur les fichiers :
/usr/share/doc/openvpn/examples/easy-rsa/
serial : contient le numéro à affecter au prochain client
index.txt : liste de tous les clients créés
*.crt : les certificats
*.key : les clefs privées
*.csr : les demandes de certificats, qui devront être signés pour créer le certificat
/etc/openvpn
ipp.txt : garde une association entre IP et client