2
0
30
06 - VPNs
Polaire edited this page 2024-07-21 19:27:47 +02:00
This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

A. Définition

Un VPN (Virtual Private Network) ou RPV (Réseau Privé Virtuel) en français permet de lier deux ordinateurs distants en passant par les réseaux publics. L'idée est créer un lien direct entre ces deux ordinateurs pour qu'ils communiquent directement, isolé des réseaux publics. Cette technologie est très utilisé en entreprise pour le télétravail par exemple.

Il existe des VPNs utilisant différents protocoles, dialoguant sur différentes couches du modèle OSI (2 et 3 notamment) ou différents services.

Dans notre cas, nous allons mettre en place les connexions VPN pour accéder depuis le réseau vmnet10, représentant notre WAN, à notre serveur AD en RDP.

B. Choix des VPNs utilisés

Pour ce projet nous allons utiliser deux VPN : OpenVPN et Wireguard.

B.1 OpenVPN

Le premier VPN présenté est OpenVPN. Il est couramment utilisé en entreprise, et dispose de foncitonnalités avancées.

De plus il est multi plate-formes (Linux, Mac, Windows, Android, iOS) et dispose d'une importante communauté. C'est un VPN "ancien", la première version est sortie en 2001.

B.2 WireGuard VS IPSec

De base, IPSec était imposé comme second VPN. Au vu des soucis pour faire fonctionner correctement IPSec lors de ce projet, et du fait que j'utilise régulièrement WireGuard, j'ai préféré mettre en place cette solution.

Je le trouve plus simple et efficace que IPSec, et d'un point de vue performance (vitesse, mais aussi consommation de ressources et d'énergie) WireGuard l'emporte haut la main comparé à IPSec. ( a sourcer)

On peut d'ailleurs citer le créateur de Linux, Linus Torvald à propos de WireGuard :

"Le code nest probablement pas parfait, mais je lai parcouru et comparé aux horreurs que sont OpenVPN et IPSec : cest un chef d’œuvre."

En effet, quand OpenVPN ou IPSec s'appuie 100 000 à 600 000 lignes de codes, WireGuard n'en compte que 4 000 ...

B.3 WireGuard

WireGuard est de plus en plus utilisé en entreprise, et est notamment devenu la solution proposé par défaut par les cloud providers leaders Amazon Web Services et Microsoft Azure. La solution est également intégré au noyau Linux, ce qui permet de s'assurer une compatibilité avec toutes les distributions Linux. Son code très léger (en C et Go), et l'utilisation d'algorithmes à l'état de l'art pour le chiffrement permettent à WireGuard d'afficher des vitesses de connexions supérieurs à toutes les autres solutions VPNs concurrentes. ( A linker ) La légèreté du code et les algorithmes utilisés permettent également à WireGuard d'afficher une surface d'attaque très faible.

En plus de sa légèreté, WireGuard est disponible sur des nombreux OS et peut donc être une solution VPN embarqué dans des péréphiriques IoT. De par sa nature (lorsque le tunnel n'est pas utilisé, il est en "veille"), il est également très peu bavard et énergivore. Ces différents aspects le rendent particulièrement intéressant pour sécuriser des containers.

On démontrera son efficacité via l'utilisation sur notre client Windows 11. Mais on aurait pu l'envisager sur un smartphone Android ou un client Linux. La fonctionnalité n'est pas implanté sur pfSense, mais WireGuard permet également la génération de QR Code pour simplifier davantage la configuration des clients.

En résumé, WireGuard est conçu de manière simple et sécurisé. Il dispose entre autres de performances et d'une efficacité énergétique supérieure aux autres solutions de VPNs.

C. Mise en place d'OpenVPN

C.1 Autorité de certification

On va tout d'abord créé une autorité de certification sur notre pfSense, on se rend dans : System > Certificates. On tombe sur la page pour créer une autorité

On nomme notre autorité de certification, et on la crée comme ci-dessous (tout par défaut ici)

Une fois l'autorité créé, on va créé un certificat pour le site de notre pfSense. On se rend dans System > Certificates ; puis à l'onglet "Certificates" et on en créé un.

On va notamment indiqué un "Lifetime" à 398 jours, choississez le "Descriptive Nam" et le "Common Name" comme bon vous semble.

Plus bas, à "Certificate Attributes", on va notamment indiquer le type de notre certificat, ici "Server Certificate". On renseigne les "Alternative Names" avec notre FQDN, et nos deux IPs (LAN et WAN)

Enfin, on se rend dans System > Users, on créé un nouvel utilisateur et on prend bien attention à cocher la case pour qu'un certificat associé à l'utilisateur soit créé.

C.2 Création du serveur

Sur notre pfSense, on commence par se rendre dans le menu déroulant VPN, on sélectionne OpenVPN. On arrive sur la page Servers ; on clique en bas à droite sur "Add".

Onr Dans la section "Mode configuration" on sélectionne notre "Server mode" ("Remote Access SSL/TLS + User Auth" pour nous). On veille à être en "tun" mode.

Pour la partie "Endpoint Configuration", on vérifie le protocole utilisé, qu'on est bien sur notre interface WAN et le port qu'on va utiliser.

On commence la partie "Cryptographic Settings", on peut laisser la pluspart des paramètres par défaut. Il faut cependant veiller à ce qu'on utilise notre autorité de certification à la ligne "Peer Certificate Authority" et qu'on positionne le certificat pour notre site précédemment créé à la ligne "Server Certificate".

On va vérifier les derniers paramètres liés aux algorithmes de cryptographie. Normalement on peut tout est régler par défaut comme dans le screen ci-dessous

On va s'assure que la case "Enforce key usage" pour la ligne "Client Certificate Key Usage Validation" est bien cochée.

On va maintenant paramétrer notre tunnel ("Tunnel Settings"), on va indiquer un réseau pour notre tunnel.

Ici j'ai choisi 192.168.150.0/24

On va également indiqué notre réseau LAN dans la ligne "IPv4 Local network" soit 192.168.100.0/24. On peut laisser le reste par défaut jusqu'au "Advanced Settings".

Dans les "Advanced Client Settings" on va renseigner le domaine et les DNS : notre serveur AD et notre pfSense.

On peut sauvegarder, notre serveur OpenVPN est créé !

C.3 Création du client

On va télécharger un package permettant d'exporter directement la configuration de notre client OpenVPN. Pour se faire on se rend dans System > Packet Manager et on recherche openvpn-client-export, et on l'installe.

Une fois que l'installation est terminée, on retourne dans VPN > OpenVPN

Puis on se rend dans le nouvel onglet : "Client Export"

On laisse la configuration par défaut, on sauvegarde, puis en bas de la page, on récupère "Archive" de "Bundled Configurations" et "64-bit" de "Current Windows Installer" pour notre utilisateur. On bascule les deux téléchargements sur notre VM cliente.

On lance l'installeur sur le client, une post-installation va permettre de lier les fichiers de notre bundle téléchargé avec OpenVPN.

On initie la connexion, une mire s'affiche nous demandant des identifiants. On indique ceux de notre utilisateur créé plus haut.

C.4 Règles de pare-feu

On va créer deux règles :

  • une pour autoriser l'accès à OpenVPN depuis notre interface WAN
  • une pour tout autoriser sur notre interface OpenVPN

C.5 Tests

Dès la connexion établie, on remarque sur l'interface OpenVPN de notre client qu'il a obtenu et on constate des octets entrant et des sortants. On se connecte sur le IIS via le nom de la machine ou son IP sans oublier d'indiquer :726 car la redirection est sur la patte WAN, pas sur la patte OpenVPN. On lance également une connexion RDP vers notre serveur AD : ca fonctionne !

D. Mise en place de WireGuard

D.1 Installation

On va donc installer WireGuard sur notre pfSense car ce n'est pas un des VPN proposé par défaut.

Il nous faut passer par le menu déroulant System, puis se rendre sur le Packet Manager.

On va également récupérer les sources pour installer WireGuard sur notre client Windows. On peut récupérer le .msi en version amd64 sur le site officiel et le glisser-déposer sur notre VM client Windows. (Le .exe nécessite un accès internet, tandis que le .msi permet une installation sans internet.)

On remarque la légèreté de WireGuard, moins de 3 Mo pour un client VPN !

D.2 Configuration du tunnel

Maintenant que WireGuard est installé sur notre pfSense, on va créer notre premier tunnel !

On se rend dans l'interface WireGuard en passant par le menu déroulant "VPN". On tombe directement sur la page des tunnels, on clique en bas à droite sur "Add Tunnel".

Là on va devoir indiquer une description. Puis on choisit notre port d'écoute, ici le 51825 (51820 par défaut), on clique sur "Generate" pour générer notre paire de clés. On va choisir notre "Interface Addresses" en dehors des plages déjà utilisé, ici on chosit 192.168.200.1/28

On peut enregistrer, notre tunnel est créé !

D.3 Mise en place des règles

L'idée étant de se retrouver comme si on était sur le réseau LAN, via notre VPN, il va falloir faire deux choses sur notre pfSense :

  • on va autoriser tout le trafic sur notre interface WireGuard nouvellement créé
  • on va établir une redirection de notre interface WireGuard vers notre LAN
  • on va autoriser l'accès au port de notre WireGuard (51825 ici) sur l'interface WAN

On commence par se rendre dans Firewall > Rules. Là on remarque l'apparition de notre interface "WireGuard", on créé une nouvelle règle qui autorise tout en IPv4.

On applique notre règle et on se rend maintenant dans Firewall > NAT. On créé une nouvelle règle sur notre interface WireGuard, pour l'IPv4, n'importe quel protocole. En "Redirect target IP" on indique "LAN address", on remplit la description et on sauvegarde notre règle.

On retourner dans Firewall > Rules ; on se place sur notre interface WAN et on créé une nouvelle règle. Sur notre interface WAN on va autoriser les flux en IPv4 sur le protocole UDP à destination des addresses de notre WAN sur notre port WireGuard (51285)

D.3 Création du peer Windows 11

On va maintenant créer nos peers. En effet, dans WireGuard, chaque périphériques se connectant au tunnel doit être déclaré.

On va commencer par celui pour notre client Windows 11.

Il nous faut nous rendre sur la machine, et lancer WireGuard, puis on va faire "Ajouter un tunnel vide"

On a maintenant un début de configuration pour notre tunnel, et WireGuard a généré une paire de clé pour notre machine. On va copier notre clé public qui est indiqué en haut.

On va à présent se rendre sur l'interface web de notre pfSense, pour créer un "Peer" sur notre WireGuard. (VPN > WireGuard > Peers)

On vérifie que la case "Enable Peer" est coché, et que notre tunnel est bien positionné. On peut laisser en "Dynamic Endpoint" et vide pour le "Keep Alive" On colle la clé publique récupérée sur notre client Windows. En production, pour renforcer la sécurité on utiliserait une "Pre-shared Key" ; comme on est dans un environnement de tests, on peut s'en dispenser. On choisit une plage d'IP et un masque à l'intérieur de la plage défini dans notre tunnel. Ici 192.168.200.2/32

On peut sauvegarder la configuration du peer sur notre pfSense et retourner sur notre client Windows 11.

On va remplir le reste de la configuration. Dans notre partie "Interface", on a besoin d'indiquer le port d'écoute et l'adresse de notre interface avec son masque. Notez qu'on peut également renseigner un serveur DNS dans la partie interface. Ce qui nous donne :

[Interface]
PrivateKey = Clé_généré_à_là_création_du_tunnel_sur_notre_client
ListenPort = 51825
Address = 192.168.200.2/32
DNS = 192.168.100.30

On a la configuration de notre interface ! Il nous reste la partie "Peer" à configurer. On récupère la clé publique de notre tunnel WireGuard sur l'interface de notre pfSense On va indiquer en "AllowedIPs" 0.0.0.0/0 ; ce qui va permettre de bloquer tout le trafic hors de notre tunnel WireGuard. Enfin on indique en Endpoint l'IP de la patte WAN de notre pfSense. (Au besoin, elle est indiquée sur la VM pfSense) On obtient une partie "Peer" comme ci-dessous.

[Peer]
PublicKey = La_clé_de_notre_tunnel
AllowedIPs = 0.0.0.0/0
Endpoint = 10.0.0.130:51825

Une fois que c'est fait, on peut enregistrer, notre connexion VPN WireGuard est prête !

D.5 Tests

On peut voir directement après avoir enregistré notre configuration. En effet, la poignée de mains va générer quelques octets de traffic.

On peut aussi se rendre sur notre pfSense et s'assurer que la connexion est bien établie, en passant par : VPN > WireGuard > Status

Pour s'assurer qu'on est bien connecté comme si on était dans notre LAN, on peut lancer une connexion RDP vers 192.168.100.30 (ou le nom de votre machine si vous avez renseigné le DNS) et dans le même temps ouvrir un navigateur pour accéder à notre IIS.

Comme la redirection de ports n'étaient valable que quand on tente d'y accéder depuis la patte WAN, il falloir indiquer le port. Ici :

http://192.168.100.30:726 Ou bien le nom de votre machine:726