Le VPN Virtual Private Network ou en français réseau privé virtuel permet d'inter-connecter plusieurs ordinateurs entre eux à travers internet. Ici je vais vous montrer comme réaliser ce réseau avec un maximum de sécurité possible.
Tout d'abord nous allons commencer par installer OpenVPN GUI qui peut être téléchargé ici. Ce dernier nous permettra de mettre en place notre VPN avec chiffrement SSL.
Pour procéder à l'installation il suffit de suivre les étapes (suivant -suivant-suivant), n'oublier pas d'accepter l'installation de la carte réseau virtuelle.
Nous allon créé 2 scripts batch qui nous permettront de générer les certificats.
Le premier se nommera build-req.bat dont voici le code
@echo off
cd %HOME%
rem build a request for a cert that will be valid for ten years
openssl req -days 3650 -nodes -new -keyout %KEY_DIR%\%1.key -out %KEY_DIR%\%1.csr -config %KEY_CONFIG%
rem delete any .old files created in this process, to avoid future file creation errors
del /q %KEY_DIR%\*.old
Et le second code que nous nommerons sign-req.bat
@echo off
cd %HOME%
rem sign the cert request with our ca, creating a cert/key pair
openssl ca -days 3650 -out %KEY_DIR%\%1.crt -in %KEY_DIR%\%1.csr -config %KEY_CONFIG%
rem delete any .old files created in this process, to avoid future file creation errors
del /q %KEY_DIR%\*.old
Copiez ces 2 scripts dans le répertoire d'installation C:\Program Files\openvpn\easy-rsa
Dans le dossier ci-dessous appuyer sur la touche shift de votre clavier et faites un clic droit et sélectionner Ouvrir une fenêtre de commande ici
Dans le terminal, tapez les commandes suivantes:
init-config (on initialise la configuration de base en faisant un RAZ)
vars (on initialise les variables)
clean-all (afin d'effacer quelques manipes que vous auriez tenté)
build-ca (on génère le certificat privé qui ne doit en aucun cas être diffusé)
Plusieurs informations vous sera demandé pour le certificat (ci-dessous un exemple)
Country Name (2 letters code) [AU]: FR
State or Province Name (full name) [Some-State]: Ile de France
Locality Name (eg, city) []: Paris
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Babass
Organizational Unit Name (eg, section) []: babass.fr
Common name (eg, your name or your server's hostname) []: Sebastien
Email Address []: votre.adresse@gmail.com
Un dossier keys apparait dans le dossier easy-rsa
ca.crt: notre certificat d'authentification privé qui sera diffusé à nos clients
ca.key: la clé de ce certificat, il permettra de signer les certificats de nos clients
Maintenant créons le certificat serveur; toujours dans le terminal lancer la commande suivante
build-key-server serveur (serveur correspondant au nom de votre serveur)
Renseigner les informations demandées mais cette fois dans le Common Name entrez serveur
Challenge password et optional company name ne sont pas obligatoire.
Dans le dossier keys nous obtenons 3 nouveaux fichiers
server.crt (le certificat du serveur)
server.key (la clé confidentielle du serveur)
server.csr (la demande de signature du certificat, qui dans notre cas sera inutile car nous l'avons déjà signé)
Maintenant que les certificats du serveur sont générés nous allons nous occuper de ceux des clients. Toujours dans le terminal entrez les commandes suivantes
build-req client (client correspond au nom du fichier client)
Renseigner les informations demandées mais cette fois dans le Common Name entrez client
Challenge password et optional company name ne sont pas obligatoire.
sign-req client
Validez les 2 questions par y. Le certificat serveur et client sont maintenant créé, nous allons générer les paramètres de Diffie Hellman, ce dernier permettra de chiffrer l'échange des données entre le serveur et le client.
Toujours dans le terminal tapez
build-dh
Un fichier dh1024.pem est généré que nous conserverons jusque la fin.
Maintenant nous allons créé le fichier de configuration du serveur pour OpenVPN GUI.
Configuration server.ovpn
port 1194 #Port de communication sortant. 1193 est la norme pour OpenVPN, mais il est possible d'en prendre un autre
proto udp #Protocole d'envoi des données(ou tcp).
dev tap #Mode de transmission, ici en mode route (ou tun pour un mode manuel)
mode server #Configuration serveur.
tls-server #Authentification serveur TLS.
#Configuration IP.
ifconfig
10.8.0.1 255.255.255.0 #Adresse du serveur, bien choisir
une adresse IP différente de votre DHCP interne, si vous en posséder un
;)
server-bridge 10.8.0.1 255.255.255.0 10.8.0.2 10.8.0.20
#serveur DHCP, ici on distribue des adresses IP de 10.8.0.2 à 10.8.020
#max-clients 5 #Nombre max de client (ne doit pas excéder la taille de la plage IP du DHCP).
client-to-client #Permet la communication entre client.
#Sécurité
dh dh1024.pem #Paramètre Diffie Hellman 1024bits(Protocole d'échange).
ca ca.crt #Certificat de l'administrateur réseau, il permet de signer les certificat client.
cert server.crt #Certificat du Serveur.
key server.key #Clé du certificat serveur.
persist-key #Evite de reinterroger un client qui s'est déjà authentfié.
cipher BF-CBC #Cryptage des données en Blowfish (ex: (Cryptage AES) AES-128-CBC,(Cryptage Triple-DES) DES-EDE3-CBC).
keepalive 10 120 #Effectue un ping vers le client tout les 10s pendant 120s.
duplicate-cn #Pour partager le même certificat entre plusieurs clients.
#Utilisateur anonyme, ne fonctionne que sous Linux !
#user nobody #Aucun utilisateur prédéfinis.
#group nogroup #Aucun groupe prédéfinis.
#Utiliser la compression dynamique LZO.
comp-lzo
#Régler
le niveau de traces (0 pour un mode silencieux excepté les erreurs
fatales, 4 utilisation courante par défaut, 5 et 6 pour le debugage, 9
renseigne toutes les traces).
verb 3
#Au bout de 10 fois la même ligne, plus de trace.
mute 10
Configuration client.ovpn
client #Défini comme client.
#adresse à laquelle le client doit se connecter, et le numéro de port pour entrer sur le serveur.
remote XX.XX.XX.XX 1194
dev tap #Mode de transmission(ou tun).
proto udp #Protocole d'envoi des données (ou tcp).
resolv-retry infinite #Résout indéfiniment les tentatives de connexion au serveur.
nobind #Pas de port local spécifié.
#Sécurité
#ns-cert-type server #Vérifie l'authenticité du serveur.
tls-client #Authentification client TLS.
dh dh1024.pem #Paramètre Diffie Hellman 1024bits(Protocole d'échange).
ca ca.crt #Certificat de l'administrateur réseau, il permet de signer les certificat client.
cert client.crt #Certificat du client.
key client.key #Clé du certificat client.
persist-key #Évite de réinterroger un client qui s'est déjà authentfié.
cipher BF-CBC #Cryptage des données en Blowfish (ex: (Cryptage AES) AES-128-CBC,(Cryptage Triple-DES) DES-EDE3-CBC).
#utilisateur anonyme
#user nobody #Aucun utilisateur prédéfinis.
#group nogroup #Aucun groupe prédéfinis.
#Utiliser la compression dynamique LZO.
comp-lzo
pull #oblige le client à demander sa configuration au serveur.
#Régler
le niveau de traces(0 pour un mode silencieux excepté les erreurs
fatales, 4 utilisation courante par défaut, 5 et 6 pour le debugage, 9
renseigne toutes les traces).
verb 3
#Au bout de 10x la même ligne, plus de trace.
mute 10
Dans le dossier config d'OpenVPN du serveur nous allons copier ca.crt server.crt server.key dh1024.pem et le fichier server.ovpn
Dans le dossier config d'OpenVPN du client nous allons copier ca.crt client.crt client.key client.ovpn (si vous avez plusieurs clients, il suffit de renommer les 3 derniers fichier avec le nom souhaité)
Sur votre routeur ouvrez le port 1194 en UDP et créé ouvrez votre firewall de votre ordinateur pour OpenVPN.
Il ne reste plus qu'à lancer le logiciel OpenVPN GUI et connecter le serveur puis les clients.