Association Générale des Utilisateurs de logiciels libres en Côte-d'Or
Rubriques
Notre ami Tux en rodéo sur l'escargot de Bourgogne :-) |
Installation OpenVPN 2.01 sur une Debian Etch
Rubrique :
Réseaux
Le : mercredi 31 janvier 2007 Par : Tony Visites : 115096 Tags : Débian, OpenVPN But de ce documentCe document me sert de mémo pour mettre en place le système OpenVPN sur un serveur Debian ETCH et sur des clients Windows ou Linux Debian. OpenVPN est un système permettant de relier des postes distants sur un réseau informatique en passant par Internet mais de manière sécurisée (Tunnel VPN). Pré-requisAvoir installé une Debian stable de base :
ATTENTION : Il est fortement conseillé de savoir ce qu’est un certificat et une clé de cryptage pour la configuration d’OpenSSL. Il est conseillé également de connaître le fonctionnement des tables de routage pour la configuration d’OpenVPN. Installation d’OpenVPN 2.01 sur une Debian EtchPaquet à installer :
Remarques :
Création du certificat de l’autorité de certification (CA)La partie la plus compliquée et la plus fastidieuse dans la mise en place d’un serveur OpenVPN concerne la génération des clés et des certificats. OpenVPN est livré avec plusieurs scripts permettant de générer plus facilement les clés et les certificats pour OpenSSL. Ces scripts sont enregistrés dans le dossier « easy-rsa » :
Avant d’utiliser les scripts, il faut éditer le fichier « vars » pour initialiser les variables par défaut indiquées à la fin de ce fichier. Par exemple :
Une fois le fichier modifié, la ligne suivante permet d’initialiser les variables pour les scripts :
Le script suivant, permet de créer ou de réinitialiser le sous-dossier « keys » :
Le script suivant permet de créer dans « keys » le certificat principal du serveur « ca.crt » et la clé correspondante « ca.key » :
Ce script doit afficher à l’écran quelque chose qui ressemble à ça : # ./build-caATTENTION : Pour les questions, la plupart des champs sont renseignés par défaut sauf le « Common Name » qu’il faut renseigner manuellement. Exemple « MonServeur ». Création du certificat et de la clé pour le serveur OpenVPNLe script suivant permet de créer dans « keys » le certificat « LeServeurVPN.crt » et la clé « LeServeurVPN.key » pour le serveur VPN nommé par exemple « LeServeurVPN » :
Ce script doit afficher à l’écran quelque chose qui ressemble à ça : # ./build-key-server MonServeurATTENTION : Pour les questions, tous les champs sont renseignés par défaut sauf le « Common Name » qu’il faut renseigner manuellement. Exemple « MonServeurVPN ». Personnellement, je n’ai pas renseigné le champ « password » Création du certificat et de la clé pour un client OpenVPNLe script suivant permet de créer dans « keys » le certificat « Client01.crt » et la clé « Client01.key » pour le client VPN nommé par exemple « Client01 » : # cd /usr/share/doc/openvpn/examples/easy-rsa/Ce script doit afficher à l’écran quelque chose qui ressemble à ça : pgdebian:/usr/share/doc/openvpn/examples/easy-rsa# ./build-key Client01ATTENTION : Il faudra renouveler cette opération pour chaque client. Pour les questions, tous les champs sont renseignés par défaut sauf le « Common Name » qu’il faut renseigner manuellement. Exemple « Client01 ». Chaque « Common Name » de chaque client doit être différent. Personnellement, je n’ai pas renseigné le champ « password » Création du paramètre Diffie HellmanLe script suivant permet de créer dans « keys » le fichier « dh1024.pem » :
Ce script doit afficher à l’écran quelque chose qui ressemble à ça :
This is going to take a long timeRésumé des certificats et clés créés précédemment dans « keys »
Mise en place des certificats et des clésconcernant le serveur OpenVPN, le plus simple est de copier les 4 fichiers dans le dossier « /etc/openvpn » : # cp ./keys/ca.crt /etc/openvpn/Pour le client, il faudra copier ses deux fichiers une fois que celui-ci sera installé. Création d’un utilisateur avec des droits limités pour OpenVPNPour limiter les risques d’attaques sur OpenVPN, il est important que le processus d’OpenVPN fonctionne sur un utilisateur n’ayant aucun droit sur le système. Souvent, l’utilisateur « nobody » est utilisé par défaut, mais il est encore plus sécurisant de faire tourner chaque processus avec un utilisateur différent. Donc, pour le processus OpenVPN, nous allons créer l’utilisateur « openvpn » : # groupadd openvpnConfiguration d’OpenVPNPar défaut OpenVPN est fourni avec plusieurs fichiers d’exemples enregistrés dans le dossier :
Pour configurer le serveur, je suis parti du fichier d’exemple « server.conf.gz », qu’il faut donc décompresser et mettre en place dans « /etc/openvpn » : # cd /usr/share/doc/openvpn/examples/sample-config-files/Il suffit ensuite d’adapter ce fichier en fonction des besoins. Voici par exemple le fichier de configuration que j’utilise : ;Port en écoute utilisé pour la connexion VPNDémarrage du serveur OpenVPNLa commande suivante permet de démarrer ou redémarrer le serveur :
Ne pas hésiter à regarder dans les logs que tout c’est bien passé :
Bien vérifier également que le processus tourne sous l’utilisateur « openvpn »
Pour finir, si tout c’est bien passé l’interface « tun0 » doit apparaître dans la configuration du réseau : # ifconfigEt il doit être possible de la pinguer :
Installation du Client WindowsAvec OpenVPN, la notion de client et de serveur n’existe pas étant donné que c’est le même logiciel qui peut faire office de client ou de serveur. Dans mon cas, le serveur est installé sur une Debian Sarge et les clients sont sous Debian Testing ou Windows 2000/XP. Pour Windows, il existe une version d’OpenVPN avec une installation simplifiée téléchargeable à cette adresse :
Lors de l’installation de ce programme, la carte réseau virtuelle « TAP-Win32 Adapter V8 » est installée. Une fois le programme installé, il est lancé automatiquement et à chaque démarrage de Windows. Un icône pour le configurer est disponible à coté de l’heure. Ensuite, il est possible de franciser OpenVPN en remplaçant le binaire enregistré dans « C :\Program Files\OpenVPN\bin\openvpn-gui.exe » par le binaire téléchargeable à l’adresse ci-dessous (Attention : Il faut le renommer après l’avoir téléchargé) :
Configuration du client WindowsLa première chose à faire est de copier dans le dossier « C :\Program Files\OpenVPN\config » les fichiers servant à l’authentification du client via OpenSSL créés dans les chapitres précédents :
Ensuite, il faut modifier le fichier de configuration pour l’adapter à votre cas. Pour éditer le fichier, il est possible de faire un clic droit sur l’icône « OpenVPN » situé à gauche de l’heure et de choisir l’option « Éditer la configuration ». Voici un exemple de fichier que j’utilise pour mes clients : clientNormalement, si vous utilisiez la même configuration que moi, vous n’aurez qu’à changer :
Lancement du client WindowsPour lancer la connexion, il suffit de faire un clic droit sur l’icône « OpenVPN » situé à gauche de l’heure et de choisir l’option « Connecter ». Si tout se passe bien, une fenêtre affichant les logs doit s’afficher et une fois la connexion effectuée, le réseau est opérationnel. En cas de problème, et pour trouver l’origine de celui-ci il faut augmenter le niveau des logs en changeant le paramètre « verb » du fichier de configuration :
Une fois la connexion établie, il doit être possible de pinguer le serveur soit sur son adresse virtuelle (ex : 10.8.0.1 dans notre cas) soit sur son adresse réelle (ex : 192.168.0.1) Remarque : Depuis le serveur, pour connaître les clients connecté, il faut consulter le fichier :
Installation Client LinuxL’installation du client est identique à celle du serveur, car c’est le même logiciel qui fait office de serveur ou de client en fonction de sa configuration :
Le fichier de configuration et la gestion des clés est identique à celle du client Windows. Permettre aux clients VPN d’accéder à l’ensemble du réseau distantsAvec la configuration précédente, les clients peuvent accéder au serveur OpenVPN, mais ils ne peuvent pas accéder au reste du réseau sur lequel est connecté le serveur OpenVPN. Pour permettre aux clients d’accéder au reste du réseau, il faut effectuer deux opérations : 1 - Autoriser le serveur Linux à transmettre les paquets au reste du réseauPour cela, il faut activer le forwarding avec la commande suivante :
La commande suivante, permet de vérifier que le forwarding est bien activé :
2 - Indiquer aux autres postes du réseau la route vers le serveur OpenVPNSi le serveur VPN est sur l’adresse 192.168.0.1, il faut ajouter une route manuellement sur chaque poste du réseau avec la commande suivante sous Windows :
La commande suivante, permet d’avoir la liste des routes :
La commande suivante permet de supprimer une route :
Pour ajouter une route sous Linux, il faut utiliser la commande suivante :
La commande suivante, permet d’avoir la liste des routes sous Linux :
La commande suivante permet de supprimer une route sous Linux :
Remarque : Pour éviter de devoir ajouter manuellement sur chaque poste du réseau une route, si c’est possible, il faut ajouter une route statique au niveau de la passerelle ou du routeur du réseau. Accéder aux autres postes connectés derrière un client VPNAvec la configuration précédente, le serveur OpenVPN peux accéder à l’adresse virtuelle du client, mais il ne peux pas accéder à l’adresse réelle et encore moins aux autres postes connectés derrière le client VPN. Pour permettre au serveur d’accéder aux autres postes connectés derrière un client VPN, il faut ajouter des routes dans la configuration d’OpenVPN : Dans le fichier de configuration du serveur OpenVPN, il faut ajouter ces lignes : client-config-dir ccdLa première ligne permet d’indiquer le sous-dossier de /etc/openvpn qui contiendra la configuration spécifique de chaque client (Remarque : Il faut penser à créer ce dossier manuellement). La deuxième ligne permet d’ajouter la configuration du réseau d’un client. Ensuite, il faut créer un fichier dans le dossier « /etc/openvpn/ccd » ayant le même nom que le certificat du client (ex : Client01) contrant la ligne suivante :
Cette ligne permet d’indiquer le client connecté à ce réseau. Pour finir, il faut redémarrer le serveur et le client pour que les routes soient correctement prises en compte. A partir de ce moment, le serveur doit pouvoir accéder à tous les postes connectés au client VPN. Révocation d’un certificat clientSi le certificat d’un client à été volé au si ce dernier n’est plus nécessaire, il est important de le révoquer pour qu’il ne puisse plus être utilisé. Pour révoquer un certificat, il faut disposer de celui-ci. Normalement, le dossier « /usr/share/doc/openvpn/examples/easy-rsa/keys » contient tous les certificats créés. La commande suivante permet de révoquer un certificat : # cd /usr/share/doc/openvpn/examples/easy-rsa/Cette commande permet également de révoquer un certificat et vérifie ensuite que cette révocation est effective : # ./revoke-full Client01Remarque : Avec ce script, il ne faut pas mettre l’extension « .crt » du certificat. A chaque révocation de certificat son numéro est ajouté dans le fichier « keys/crl.pem ». Ce fichier contient donc la liste des certificats révoqués. Après chaque révocation de certificat, il faut donc copier ce fichier dans « /etc/openvpn » La commande suivante, permet de consulter la liste des certificats révoqués :
Il faut également ajouter cette ligne dans « etc/openvpn/server.conf » du serveur OpenVPN :
Pour information, le fichier « keys/index.txt » contient la liste des certificats créés et révoqués Pour finir et pour information, lors de la création d’un client, les fichiers suivants sont créés ou modifiés dans « keys/crl.pem » :
Historique des modifications
Article précédent : Laisser networkmanager gérer vos connexions réseau
Article suivant : Mise en place d’un réseau de terminaux Linux HP/Compaq t5125
Forum
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||