pfSense, VPN OpenVPN avec 2FA

pfSense, VPN OpenVPN avec 2FA

VPN Client-to-Site avec 2FA

Décidemment, encore un article traitant de VPN… 😁

Aujourd’hui nous allons voir comment sous pfSense mettre en place un tunnel VPN Client-to-Site via OpenVPN, mais en utilisant aussi FreeRADIUS pour permettre de la double authentification !

I) Le lab

Armé de notre bon vieux VMware, nous allons donc simplement avoir :

  • pfSense-01 :
    • WAN, en 192.168.0.100/24 ;
    • LAN, en 192.168.1.1/24 ;

Au passage, car on me l’a déjà demandé quelques fois, je configure ma VM de cette manière niveau réseau :

  • L’interface WAN en mode Bridge, histoire de pas s’embêter avec du NAT ou autre ;
  • L’interface LAN en mode LAN Segment ;

Une fois votre routeur/pare-feu installé et vos IPs bien setupées, on peut commencer !

*Comme pour le précédent article sur OPNSense, ici je me connecte à chaque fois sur l’interface WAN, il faut donc autoriser les IP privées à s’y connecter, et créer une règle de pare-feu permettant d’autoriser l’HTTP/HTTPS sur l’interface WAN.

I) Configuration de la CA

Et oui, on va utiliser de la 2FA, mais aussi avec certificats ! 🤔

Alors je ne vais pas redétailler ici comment générer une CA sur pfSense, ou comment même utiliser une CA externe, je vous renvoie aux articles correspondants que j’ai déjà fait par le passé :

II) Configuration du serveur OpenVPN

Ici rien de très transcendant, et de nouveau je ne vais pas détailler son installation, je vous renvoie aux articles ci-dessus. Grosso modo, on créer un simple serveur en mode Remote access (SSL/TLS + User Auth). La différence ici c’est que pour le backend de l’authentification, on utilisera Radius, mais ça, je vais vous l’expliquer plus bas !

III) Installation & configuration de FreeRADIUS

On se rend donc sur Package Manager, puis Available Packages et on peut installer le package freeradius3.

En premier lieu, on va donc rajouter ce nouveau backend d’authentification. Pour ce faire, on se rend sur User Manager puis Authentication Servers :

Ici rien de très sorcier, on choisi le type RADIUS, on renseigne notre localhost (car freeRADIUS tourne sur notre pfSense), un secret à ne pas divulguer, et c’est tout !

*Notez bien que nous changeons le protocole par “PAP”, faute de quoi la connexion ne sera pas fonctionnelle.

On peut ensuite créer notre interface d’écoute. Ici, étant donné que j’ai choisi 127.0.0.1 plus haut, je ré-utiliserai le localhost, mais rien ne vous empêche de le faire écouter sur l’IP/l’interface de votre choix :

Et enfin, il nous faut créer un client, qui sera notre pfSense lui-même… et oui, par défaut freeRADIUS ne répondra pas aux requêtes émanent de clients qu’il ne connaît pas, et ici le client sera notre propre routeur/pare-feu. Pour ça, on se rend sur l’onglet NAS/Clients :

Rien de compliqué en somme, on renseigne notre localhost, un nom pour notre client, et enfin le shared secret que l’on a configuré plus haut, au moment de configurer notre backend d’authentification 😉.

Une fois fait, on peut directement retourner sur la configuration de notre serveur OpenVPN et bien modifier le backend, histoire de ne pas oublier :

Et on touche déjà presque à la fin ! La dernière étape est d’autoriser le Mobile-One-Time-Password, comprenez la 2FA. Pour ce faire, il suffit de cocher la dite case en nous rendant sur Services, FreeRADIUS, puis Settings et se rendre en bas de page :

IV) Création des utilisateurs, et configuration smartphones

Toujours sur l’onglet Services, FreeRADIUS, mais cette fois Users :

On renseigne donc un nom d’utilisateur, on laisse le champ password vide, on choisi le chiffrement du password en MD5 car le plaintext c’est pas si foufou, puis on peut ensuite renseigner la méthode pour l’OTP, soit mOTP soit Google Authenticator.

Pour ma part, n’étant pas forcément un grand fan de Google, j’ai tenté d’utiliser mOTP maaaais… bah très peu de ressources sur Internet, pas de QR Code possible… j’avoue avoir (pour l’instant) jeté l’éponge 🫤.

M’enfin soit, continuons donc via le Sacro-Saint Google Authenticator ! On génère donc l’OTP Secret, le code PIN qui va bien, et le tour est joué !

V) Configuration smartphone, et vérification du login

Une fois votre user créé, vous pouvez utiliser l’app de votre choix pour scanner le QR Code. Personnellement, j’utilise à l’heure actuelle TOTP Authenticator sur Android, mais il en existe pléthore…

Si le scan a réussi, vous devriez donc obtenir un code à 6 chiffres qui ne reste valables qu’une dizaine de secondes environ.

Avant de directement tester notre liaison VPN, il convient tout d’abord de voir comment se connecter via son code PIN, et voir si tout est OK. Pour ce faire, rendons-nous sur l’onglet Diagnostics puis Authentication :

Ici, entrez le nom de notre user créé précédemment, et pour le password, ce sera la combinaison suivante : pin+code_otp, c’est-à-dire que si votre PIN est 1234, et le code OTP affiché sur votre smartphone 045 786, le password sera donc : 1234045786.

Si comme sur la capture d’écran vous avez un joli affichage vert en vous disant authenticated successfully, on peut passer à la dernière étape ! 😁

VI) OpenVPN Client Export

On peut se rendre sur Package Manager, puis Available Packages, et on peut installer OpenVPN Client Export, pour nous permettre de récupérer notre configuration. Si vous avez déjà lu mes précédents articles sur OpenVPN, c’est du connu.

On peut ensuite exporter notre config tranquillement depuis l’onglet VPN, OpenVPN, Client Export Utility :

Étant ici sur une machine Windows, je télécharge l’installer MSI puis je télécharge ma configuration via Inline Configurations – Most Clients.

Et ensuite, la magie peut opérer… 🪄

Tadaaaaa ! Vous venez de réussir à mettre en place un VPN Client-to-Site via OpenVPN, en utilisant de la double-authentification via freeRADIUS ! Pas mal 😁

On notera tout de même un petit warning concernant le fait que le password peut rester en cache dans la mémoire, et comme expliqué très justement, il suffit de rajouter l’option auth-nocache dans les paramètres de notre serveur OpenVPN pour plus de sécurité :

Et c’est à peu près tout… j’espère comme d’habitude avoir pu vous apporter mon aide, et je vous donne rendez-vous pour d’autres articles ! Ciao !

Laisser un commentaire