Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

installopenvpn [2016/07/21 18:20] (Version actuelle)
frag créée
Ligne 1: Ligne 1:
 +====== Petite LAN entre amis (installer et configurer un OpenVPN) ======
 +
 +Pour jouer en LAN lorsqu'​on est séparé par plusieurs centaines de kilomètres et des box diverses et variées, le plus simple c'est d'​installer et de configurer un VPN sur un serveur accessible par tous.
 +
 +Le principe est le suivant : - sur mon dédié, j'ai installé OpenVPN - chaque participant à la LAN virtuelle se connecte au VPN C'est bon, tout le monde est sur le même réseau, on peut jouer !
 +
 +Cet article détaille la configuration du serveur OpenVPN ainsi que celle d'un client. Je ne vais pas entrer dans le détail de l'​installation d'​OpenVPN lui-même, sous Windows il suffit d'​exécuter le package d'​install et sous Linux c'est généralement l'​affaire d'un apt-get (ou équivalent).
 +
 +====== Quelques mots sur les mécanismes de sécurité ======
 +
 +La sécurité dans OpenVPN repose sur une infrastructure de clés (des couples de clés publiques/​privées). Avant d'​utiliser OpenVPN, vous devez générer une autorité de certification. Le serveur (et les clients) auront besoin de la clé publique de cette autorité. La clé privée de cette autorité doit rester secrète et sert à signer les clés des participants.
 +
 +====== Préparation de l'​autorité de certification ======
 +
 +Pour créer l'​autorité de certification,​ il suffit de se placer dans le répertoire ''​easy-rsa''​.
 +Sur ma Debian, il est dans ''/​usr/​share/​doc/​openvpn/​examples/​easy-rsa''​ et de lancer les scripts suivants :
 +
 +<​code>​
 +. ./vars
 +./clean-all
 +./build-ca
 +</​code>​
 +
 +**ATTENTION !**
 + Ces trois commandes vont totalement remettre à zéro la configuration de votre autorité de certification et en créer une nouvelle. ​
 +Ne les lancez qu'une seule fois !
 +
 +Le lancement de build-ca provoque une série de questions pour construire votre autorité de certification :
 +
 +<​code>​
 +frag@nuage:​~/​vpn_k$ ./build-ca
 +Generating a 1024 bit RSA private key
 +.++++++
 +..............................++++++
 +writing new private key to '​ca.key'​
 +-----
 +You are about to be asked to enter information that will be incorporated
 +into your certificate request.
 +What you are about to enter is what is called a Distinguished Name or a DN.
 +There are quite a few fields but you can leave some blank
 +For some fields there will be a default value,
 +If you enter '​.',​ the field will be left blank.
 +-----
 +Country Name (2 letter code) [US]:FR <​--------------- Ici le code du pays
 +State or Province Name (full name) [CA]:​Herault <​-------------- Le nom du département
 +Locality Name (eg, city) [SanFrancisco]:​Montpellier <​--------- Le nom de la ville
 +Organization Name (eg, company) [Fort-Funston]:​Kranamyths <​----------- Le nom de votre organisation
 +Organizational Unit Name (eg, section) []: <​----------- Le nom de votre '​service réseau'​
 +Common Name (eg, your name or your server'​s hostname) [Fort-Funston CA]:​KranamythCA <​--------- Le nom de votre Autorité de certification
 +Name []:  <​------------ Le nom de la personne responsable ​
 +Email Address [me@myhost.mydomain]:​frag@kranamyth.fr ​ <​----------- L'​adresse email de la personne responsable
 +</​code>​
 +
 +A la fin du script, vous devez avoir un sous-répertoire ''​keys''​ contenant deux fichiers ''​ca.crt''​ et ''​ca.key''​. ​
 +Le fichier ''​ca.crt''​ est la clé publique (le certificat) de votre autorité de certification. ​
 +Ce fichier sera distribué dans les configuration du serveur et des clients. ​
 +Le fichier ''​ca.key''​ est la clé privée de l'​autorité. ​
 +La sécurité de votre VPN repose en grande partie sur cette clé privée. **Ne la divulguez pas et ne la distribuez pas.**
 +
 +====== Création d'une clé pour le serveur ======
 +
 +Il faut maintenant générer une clé privée et un certificat pour le serveur. Pour cela, utilisez la commande :
 +
 +<​code>​
 +build-key-server nomduserveur
 +</​code>​
 +
 +Ne donnez pas de mot de passe et signez immédiatement le certificat du serveur. ​
 +Vous avez maintenant deux fichiers supplémentaires dans le répertoire keys : ''​serveur.key''​ et ''​serveur.crt''​ (où serveur correspond au nom de serveur que vous avez donné sur la ligne de commande). ​
 +Ces fichiers correspondent respectivement à la clé privée du serveur (à garder secrète) et à sa clé publique (son certificat).
 +
 +====== Création de clés pour les clients ======
 +
 +Le principe est sensiblement le même, la commande est cette fois-ci :
 +
 +<​code>​
 +build-key-pass nomduclient
 +</​code>​
 +
 +Pour protéger la clé du client, indiquez un mot de passe. ​
 +Signez également la clé du client avec l'​autorité de certification. ​
 +Recommencez la procédure pour chaque client.
 +
 +Cette fois encore, vous avez de nouveaux fichiers qui apparaissent dans le répertoire keys : ''​client.key''​ et ''​client.crt''​.
 +
 +====== Paramètre de Diffie-Hellman ======
 +
 +Pour sécuriser encore plus la connexion, OpenVPN utilise l'​algorithme d'​échange de clé de [[https://​fr.wikipedia.org/​wiki/​%C3%89change_de_cl%C3%A9s_Diffie-Hellman|Diffie-Hellman]]. Pour générer ce paramètre spécial, utilisez le script :
 +
 +<​code>​
 +build-dh
 +</​code>​
 +
 +Vous obtenez un fichier ''​dh1024.pem''​ dans le répertoire ''​keys''​ lui aussi.
 +
 +====== Création de la clé de sécurisation de l'​établissement de connexion TLS ======
 +
 +L'​établissement de connexion peut être renforcé en signant les phases d’établissement de connexion TLS. Pour cela, il faut générer une clé statique avec la commande :
 +
 +<​code>​
 +openvpn --genkey --secret ta.key
 +</​code>​
 +
 +Munis de tous ces fichiers, nous allons pouvoir configurer le serveur...
 +
 +====== Configuration du serveur ======
 +
 +Le fichier de configuration du serveur est assez simple, il se nomme ''​server.conf''​ et se trouve dans ''/​etc/​openvpn''​ Voici son contenu :
 +
 +<​code>​
 +# mode indique qu'il s'agit d'un fichier de configuration d'un serveur
 +mode server
 +# proto détermine si le VPN utilise TCP ou UDP
 +proto udp
 +# port indique le port d'​écoute du serveur (le port par défaut est 1194)
 +port 1194
 +# dev indique si le tunnel fait du routage IP (tun) ou du bridge ethernet (tap)
 +dev tun
 +#
 +# Cles et certificats
 +# Clé publique (certificat) de l'​autorité de certification
 +ca ca.crt
 +# Clé publique et clé privée du serveur
 +cert serveur.crt
 +key serveur.key
 +# Clé de Diffie-Hellman
 +dh dh1024.pem
 +# Clé de signature HMAC du handshake TLS
 +tls-auth ta.key 0
 +# Algorithme de cryptage utilisé
 +cipher AES-256-CBC
 +#
 +# Reseau
 +# Fixe le réseau du serveur et les IP qu'il distribuera
 +server 10.8.0.0 255.255.255.0
 +# Le keep alive permet de vérifier l'​état de la connexion (puisque UDP est un protocole sans connexion)
 +# ici on '​pingue'​ toutes les 10 secondes et on considère que l'​autre partie est déconnectée si on n'a pas de réponse après 120 secondes.
 +keepalive 10 120
 +# Cette directive indique que les clients peuvent se voir entre eux
 +# C'est essentiel pour faire un LAN (sinon ils ne voient que le serveur)
 +client-to-client
 +#
 +# Securite
 +user nobody
 +group nogroup
 +chroot /​etc/​openvpn/​jail
 +persist-key
 +persist-tun
 +comp-lzo
 +#
 +# Log
 +verb 3
 +mute 20
 +status openvpn-status.log
 +log-append /​var/​log/​openvpn.log
 +</​code>​
 +
 +Et c'est tout, le serveur est prêt à l'​emploi. Démarrez-le et vérifiez dans les logs qu'il n'y a pas de message d'​erreur. Si tout va bien, un ''​netstat -anup''​ doit vous afficher votre OpenVPN en écoute sur le port de votre choix.
 +
 +On peut à présent passer à la configuration des clients.
 +
 +====== Configuration d'un client ======
 +
 +Là encore, rien de très compliqué, le fichier de configuration des clients se présente comme suit :
 +
 +<​code>​
 +# Indique qu'il s'agit d'une configuration client
 +client
 +# dev indique si le tunnel fait du routage IP (tun) ou du bridge ethernet (tap)
 +dev tun
 +# proto détermine si le VPN utilise TCP ou UDP
 +proto udp
 +# remote donne l'​adresse et le port de connexion au serveur
 +remote adresseduserveur 1194
 +# nombre d'​essai de connexion
 +resolv-retry infinite
 +# Algorithme de cryptage utilise
 +cipher AES-256-CBC
 +#
 +# Cles et certificats
 +# Clé publique (certificat) de l'​autorité de certification
 +ca ca.crt
 +# Clé publique du client
 +cert client.crt
 +# Clé privée du client
 +key client.key
 +# Clé de signature HMAC du handshake TLS
 +tls-auth ta.key 1
 +#
 +# Securite
 +nobind
 +persist-key
 +persist-tun
 +comp-lzo
 +verb 3
 +</​code>​
 +
 +Voilà, il ne vous reste plus qu'à vous connecter !