VPN

Le VPN (Virtual Private Network) consiste en une connexion inter-réseau permettant de relier deux réseaux locaux différents par un tunnel chiffré.

 

1 – Mise en place d’un serveur VPN avec OpenVPN sous Debian

Nous allons commencer par construire un tunnel sans cryptage en effectuant les actions suivantes :
– Sur le serveur :            openvpn –dev tun0 –verb 5 –ifconfig 10.0.1.1 10.0.1.2
– Sur le client :                openvpn –dev tun0 –verb 5 –ifconfig 10.0.1.2 10.0.1.1 –remote @IP_srv_VPN

Ici, –dev désigne l’interface virtuelle qui sera utilisée pour la connexion VPN, –verb indique le niveau d’information voulu au niveau des logs et –ifconfig permet d’établir les points de connexion (c’est-à-dire les adresses IP virtuelles).
On a donc ici, pour le serveur, une adresse IP virtuelle en 10.0.1.1 et pour le client, 10.0.1.2.
Notons que pour le client, il est nécessaire de préciser –remote adresse_IP_réelle_du_serveur_VPN, correspondant à l’adresse IP réelle du serveur VPN.

Observons ensuite le résultat d’un ping sur une interface virtuelle :

On note bien une activité au niveau de l’interface virtuelle, correspondant au ping sur cette même interface.

 

2 – Mise en place du tunnel OpenVPN chiffré avec OpenSSL

Pour ce cas, le tunnel se fera avec un serveur et un client se trouvant sur le même réseau.

Il nous faut tout d’abord créer les certificats de l’autorité de certification, du serveur et du client et nous allons créer les répertoires suivants afin de stocker les données du tunnel VPN :

/apps/easy-rsa          /apps/openvpn/keys          /apps/openvpn/log          /apps/openvpn/conffiles

Nous allons ensuite copier le contenu du répertoire /usr/share/easy-rsa dans /apps/easy-rsa

Il convient ensuite de modifier les variables du fichier /apps/easy-rsa/vars aux valeurs voulues :

Il sera ensuite nécessaire de :
– créer le répertoire /apps/openvpn/keys/newcerts
– créer le fichier index.txt (fichier vide) avec touch
– créer le ficher serial avec la redirection : echo « 01 » > serial

Il faut ensuite appliquer les valeurs en exportant les variables définies précédemment via la commande source vars et ensuite construire le certificat de l’autorité qui aura la charge de valider les autres certificats. Pour cela, nous utiliserons le script build-ca dans /apps/easy-rsa et il faudra répondre aux questions auxquelles nous n’avons pas indiqué de valeur par défaut dans le fichier /apps/easy-rsa/vars :

Et il faudra répondre aux questions auxquelles nous n’avons pas indiqué de valeur par défaut dans le fichier /apps/easy-rsa/vars :

Puis nous allons construire le certificat du serveur avec la commande build-key-server nom_du_srv :

Il faudra ensuite indiquer un « challenge password » de votre choix :

Nous n’oublierons pas de signer le certificat :

Il faudra effectuer les mêmes actions pour créer le certificat du client avec la commande build-key nom_du_clt.
Et pour terminer, nous allons créer une clé de session de Diffie-Hellman permettant un chiffrement en 1024 ou 2048 bits via la commande build-dh.

Observons les certificats, la clé de session de Diffie-Hellman qui ont été créés à l’aide des commandes précédentes :

 

Les certificats ayant été créés, nous devons maintenant éditer les fichiers de configuration sur le serveur et sur le client dans /apps/openvpn/conffiles afin que le démon openvpn soit en mesure de lancer le tunnel avec les bonnes options.

  • Sur le serveur, créer un fichier se terminant par « .conf » (ici, le fichier est open-vpn-srv.conf) :

Nous voyons dans ce fichier que le protocole utilisé est UDP, l’interface virtuelle est tun0, le port utilisé est le 1194, les chemins des certificats, des clés et des logs, et le réseau de l’IP virtuelle qui sera attribuée au client.
client-to-client permet au client de se voir entre eux, keepalive 10 120, persist-key et persist-tun sont des règles permettant une persistance des connexions et du cryptage et de déterminer la durée de cette persistance.
cipher AES-128-CBC correspond à l’algorithme de chiffrage qui doit être identique sur le client et comp-lzo sert à compresser les données en transit.

Nous allons tester notre configuration en lançant dans un premier terminal la commande openvpn open-vpn-srv.conf et dans un second terminal, tail –f /apps/openvpn/log/openvpn.log :

  • Sur le client, créer également un fichier se terminant par « .conf » (ici, le fichier est client-squid.conf):

Les informations sont identiques au fichier de configuration du serveur mis à part que l’on spécifie être en mode client, ainsi que l’adresse IP réelle du serveur VPN ainsi que le port utilisé avec remote adresse_IP_réelle_srv_VPN numéro_du_port.
resolv-retry infinite permet au client de tenter en permanence de se connecter au serveur, nobind permet de ne pas lier un port local et mute-replay-warnings permet de passer sous silence les avertissements répétitifs.

Il faudra aussi avoir transféré sur le client les certificats et clés clients précédemment créés sur le serveur VPN.

Nous allons maintenant tester le tunnel VPN avec la commande openvpn adéquate sur le serveur et sur le client et nous observerons les logs lorsque nous effectuerons des pings sur le serveur VPN.

  • côté serveur :

Les « WWRRW » sont la preuve que les pings du client sur l’adresse virtuelle du serveur fonctionnent.

  • côté client :

Nous remarquons également ici que tout fonctionne avec « Initialization Sequence Completed » et les « WrWr ».

 

3 – Mise en place d’un tunnel via un pare-feu

La démarche est identique à celle réalisée précédemment à l’exception qu’il faudra modifier les fichiers de configuration du serveur et du client sur certains points.

  • Sur le serveur :

Nous allons changer le port utilisé par 11095 car dans notre cas, le pare-feu est IPCOP et celui-ci utilise déjà le port 1194 pour son propre serveur OpenVPN.
Il est aussi nécessaire d’ajouter push ‘’route adresse_réseau masque_de_sous_réseau’’ afin que les clients se connectant au serveur soient obligés de passer par le tunnel pour accéder au réseau interne en question.

  • Sur le client :

Nous allons ici changer l’adresse du serveur VPN par l’adresse de l’interface publique de notre pare-feu car nous nous trouvons à l’extérieur du réseau et nous allons aussi modifier le numéro port comme expliqué plus haut.

Par la suite, il va falloir agir sur le pare-feu en créant un service dédié à notre service VPN sur le port 11095 et une règle de redirection de port. En effet, tout ce qui arrivera par l’interface publique du pare-feu sur le port 11095 sera redirigé vers notre serveur VPN.

Il faut, pour finir, tester le tunnel entre le serveur et le client :

Nous voyons ici que la connexion a été établie avec succès.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *