PfSense : configurer un VPN-SSL client-to-site avec OpenVPN

I. Présentation

Alors que l'utilisation du télétravail s'est intensifiée ces derniers mois, la demande en accès nomade et distant est grandissante. Pour mettre en oeuvre ce type d'accès, on s'appuie généralement sur son pare-feu.

Dans ce tutoriel, je vais vous montrer comment configurer un VPN SSL client-to-site sous PfSense via OpenVPN pour permettre à vos PCs d'accéder à distance aux ressources de l'entreprise.

Pour rappel, ce type de VPN sert à établir un lien direct entre le PC et le réseau de l'entreprise, grâce à un tunnel chiffré et sécurisé.

Pour cet exemple, je vais me baser sur une base d'utilisateurs locale au Pare-feu. L'idéal étant de s'appuyer sur un annuaire LDAP externe, comme un annuaire Active Directory par exemple (réutilisation des identifiants et mots de passe). La procédure reste la même, c'est seulement la source d'authentification qui diffère et il suffira de déclarer au préalable votre annuaire sur le Pare-feu.

📌 Besoin de déclarer un annuaire Active Directory ? Ce tutoriel devrait vous aider : PfSense - Authentification AD

Voici le schéma du cas présent, je vous laisse en prendre connaissance notamment en ce qui concerne les adresses des différents réseaux :

Cet article est relativement long, il convient de suivre les étapes dans l'ordre pour ne pas rencontrer de blocage, l'ordre étant important.

📌 Qu'est-ce qu'un VPN ?

📌 Qu'est-ce qu'OpenVPN ?

II. La gestion des certificats

Nous devons créer une autorité de certification interne sur le firewall PfSense, puis nous allons créer un certificat dédié au serveur. Ce certificat sera utilisé pour sécuriser notre tunnel VPN.

A. Créer l'autorité de certification

Pour créer l'autorité de certification sur pfSense (si vous n'en avez pas déjà une), vous devez accéder au menu : System > Cert. Manager

Dans l'onglet "CAs", cliquez sur le bouton "Add".

Donnez un nom à l'autorité de certification, par exemple "CA-ITCONNECT-OPENVPN", ce nom sera visible seulement dans Pfsense. Choisissez la méthode "Create an internal Certificate Authority".

Concernant le nom qui sera affiché dans les certificats, il s'agit du champ "Common Name", j'indique "it-connect" pour ma part. Remplissez les autres valeurs : la région, la ville, etc... et cliquez sur "Save" pour créer la CA.

L'autorité de certification doit apparaître dans l'interface, comme ceci :

B. Créer le certificat Server

Nous devons créer un certificat de type "Server" en nous basant sur notre nouvelle autorité de certification. Toujours dans "Certificate Manager", cette fois-ci dans l'onglet "Certificates", cliquez sur le bouton "Add/Sign".

Choisissez la méthode "Create an Internal Certificate" puisqu'il s'agit d'une création, donnez-lui un nom (VPN-SSL-REMOTE-ACCESS) et sélectionnez l'autorité de certification au niveau du paramètre "Certificate authority".

Par défaut, la validité du certificat est fixée à 3650 jours soit 10 ans. Le "Common Name" correspond là aussi au nom intégré dans le certificat, si vous souhaitez établir une connexion VPN basée sur un nom de domaine, il est préférable d'indiquer cette valeur ici.

Choisissez bien le type de certificat (Certificate Type) suivant : Server Certificate.

Après avoir cliqué sur "Save" pour valider la création du certificat, il apparaît dans la liste des certificats du Pare-feu :

La partie certificat est terminée, passons à la suite.

III. Créer les utilisateurs locaux

Comme je le disais en introduction, nous allons utiliser une base de compte interne au Pare-feu dans cet exemple. Je vais donc créer un utilisateur ainsi qu'un certificat de type "User" pour l'authentification VPN.

Note : si vous utilisez l'Active Directory comme source d'authentification, vous devez tout de même générer au moins un certificat utilisateur (possible directement via le menu Certificate Manager)

Pour créer l'utilisateur, il faut indiquer un identifiant, un mot de passe... Ainsi que cocher l'option "Click to create a user certificate" : cela va ajouter le formulaire de création du certificat juste en dessous. Pour créer le certificat, on se base sur notre autorité de certification.

Lorsque l'utilisateur est créé, il apparaît bien dans la base locale :

 

IV. Configurer le serveur OpenVPN

Maintenant que la partie certificat est opérationnelle et que nous disposons d'un compte utilisateur, on peut s'attaquer à la configuration du VPN.

Cliquez sur le menu "VPN" puis "OpenVPN"

Dans l'onglet "Servers", cliquez sur "Add" pour créer une nouvelle configuration.

La première chose à faire, c'est de choisir le "Server Mode" suivant : Remote Access (SSL/TLS + User Auth).

Pour le VPN, le protocole s'appuie sur de l'UDP, avec le port 1194 par défaut : je vous recommande d'utiliser un port différent. Pour l'interface, nous allons conserver "WAN" puisque c'est bien par cette interface que l'on va se connecter en accès distant.

Au niveau de la partie chiffrement, un peu plus bas dans la page, vous devez sélectionner votre autorité de certification au niveau du champ "Peer Certificate Authority". En complément, sélectionnez le certificat Server au niveau du champ "Server certificate".

Pour l'algorithme de chiffrement (Encryption Algorithm), nous pouvons passer sur de l'AES-256-CBC plutôt que de l'AES-128-CBC. La sécurité sera renforcée, mais cela impact légèrement les performances, car le processus de chiffrement est alourdi : il sera toujours possible de modifier cette valeur.

Il n'est pas nécessaire de modifier les autres options liées au chiffrement.

Passons maintenant à la configuration de notre tunnel VPN en lui-même.

- IPv4 Tunnel Network : adresse du réseau VPN, c'est-à-dire que lorsqu'un client va se connecter en VPN il obtiendra une adresse IP dans ce réseau au niveau de la carte réseau locale du PC

- Redirect IPv4 Gateway : si vous cochez cette option, vous passez sur un full tunnel c'est-à-dire que tous les flux réseau du PC distant vont passer dans le VPN, sinon nous sommes en split-tunnel

- IPv4 Local network : les adresses réseau des LAN que vous souhaitez rendre accessibles via ce tunnel VPN. Dans mon exemple, je souhaite rendre accessible le réseau 192.168.1.0/24 via le VPN. Si vous avez plusieurs valeurs à indiquer, il faut les séparer par une virgule

- Concurrent connections : le nombre de connexions VPN simultanés que vous autorisez.

Pour les paramètres des clients, je vous recommande de cocher l'option "Dynamic IP" : si l'adresse IP publique d'un client change, il pourra maintenir sa connexion VPN. C'est surtout utile si vous avez des personnes qui se connectent via une connexion 4G et en mobilité.

Au niveau de la "Topology", remarque très importante à prendre en compte : pour des raisons de sécurité, il vaut mieux utiliser la topologie "net30 - isolated /30 network per client" pour que chaque client soit isolé dans un sous-réseau (de la plage réseau VPN) afin que les clients ne puissent pas communiquer entre eux !

Cela n'est pas sans conséquence : plutôt qu'une connexion VPN consomme une adresse IP sur la plage réseau dédiée au VPN, elle va consommer 4 adresses IP : une adresse IP pour le PC, une adresse IP pour le pare-feu et les adresses de réseau et broadcast du sous-réseau en /30.

💡 Si vous avez besoin de plus de 60 connexions VPN en simultanés, vous ne devez pas utiliser un réseau VPN en /24, mais vous devez prendre plus large. Dans ce cas, modifiez la valeur "IPv4 Tunnel Network" définie précédemment.

Si vous avez besoin d'utiliser la résolution DNS interne de votre entreprise, dans ce cas vous pouvez diffuser un serveur DNS. Cochez l'option "Provide a DNS server list to clients. Addresses may be IPv4 or IPv6" et indiquez en dessous la ou les adresses IP de vos serveurs DNS.

Cochez également l'option "Provive a default domain name to clients" pour indiquer votre nom de domaine local.

Note : si vous rencontrez des problèmes avec la résolution DNS sur des PC Windows 10, vous pouvez forcer l'utilisation du DNS diffusé via le VPN en activant l'option "Block Outside DNS".

Descendez dans la page... On s'approche de la fin. Dans la zone "Custom options", indiquez : auth-nocache. Cette option offre une protection supplémentaire contre le vol des identifiants en refusant la mise en cache.

Validez la configuration... Votre configuration VPN est prête :

V. Exporter la configuration OpenVPN

Pour télécharger la configuration au format ".ovpn", il est nécessaire d'installer un paquet supplémentaire sur notre pare-feu. Rendez-vous dans le menu suivant : System > Package Manager > Available Packages.

Recherchez "openvpn" et installez le paquet : openvpn-client-export.

Lorsque c'est fait, retournez dans le menu "OpenVPN" puis dans l'onglet "Client Export".

Si vous souhaitez utiliser l'adresse IP publique pour vous connecter, utilisez l'option "Interface IP Address" pour l'option "Host Name Resolution". Il y a d'autres options possibles, notamment par nom de domaine.

Les autres options peuvent être laissées par défaut... Il y a seulement notre option "auth-nocache" a reporter dans la section des options additionnelles.

Cliquez sur le bouton "Save as default" en bas de page.

En dessous de la part configuration, vous avez la possibilité de télécharger la configuration. Pour utiliser OpenVPN Community, il faudra prendre la configuration "Bundled Configuration", au format archive pour récupérer tous les fichiers nécessaires.

Pour l'utilisation sur mobile avec OpenVPN Connect, prenez la configuration "Inline Configuration".

Si vous avez besoin de récupérer le client OpenVPN pour Windows (ou Mac via Viscosity), vous pouvez l'avoir depuis cette page également 😉 - Sinon, il y a un lien plus bas dans cet article.

Voici le contenu de l'archive ZIP téléchargée :

VI. Créer les règles de firewall pour OpenVPN

D'une part, nous devons créer une règle pour autoriser les clients à monter la connexion VPN, et d'autre part nous devons créer une ou plusieurs règles pour autoriser l'accès aux ressources : serveur en RDP, serveur de fichiers, application web, etc.

A. Autoriser le flux OpenVPN

Cliquez sur le menu "Firewall" > "WAN". Il est nécessaire de créer une nouvelle règle pour l'interface WAN, en sélectionnant le protocole UDP.

La destination ce sera notre adresse IP publique donc sélectionnez "WAN address". Pour le port, prenez OpenVPN dans la liste ou alors indiquez votre port personnalisé.

Si vous le souhaitez, vous pouvez ajouter une description à cette règle et activer les logs.

Validez la création de la règle et appliquez la configuration.

À partir de ce moment-là, il est possible de monter le tunnel VPN sur un PC, mais les ressources de votre entreprise seront inaccessibles.

B. Autoriser les flux vers les ressources

Ajoutez une nouvelle règle, cette fois-ci sur l'interface OpenVPN. 

La règle qui suit sert à autoriser l'accès en RDP à l'hôte 192.168.1.30 (qui fait bien parti du réseau autorisé dans la configuration du VPN) au travers du tunnel VPN. Vous devez créer une ou plusieurs règles en fonction des ressources auxquelles vos utilisateurs doivent accéder via le VPN, en limitant les flux au maximum.

💡 Si vous utilisez le DNS de votre entreprise via le VPN, pensez à autoriser le flux DNS vers votre serveur DNS.

Pour la destination, ce sera donc mon hôte et le port 3389 pour le RDP. De la même façon que pour la règle précédente, indiquez une description et activez la journalisation si vous le souhaitez.

La configuration est terminée... Il ne reste plus qu'à tester !

VII. Tester l'accès distant depuis un poste client

Sur mon PC Windows 10, je commence par installer le client OpenVPN... Ce qui se fait très facilement, sans difficulté particulière ! 😉

Dans le dossier "C:\Programmes\OpenVPN\Config" vous devez extraire le contenu de l'archive ZIP téléchargée depuis le Pfsense et qui contient la configuration. Vous pouvez créer un sous-dossier dans le dossier "config" si vous voulez.

💡 Pour donner un nom plus corporate à la connexion VPN, renommez le fichier .ovpn : son nom sera celui donné à la configuration.

Ensuite, sur l'icône OpenVPN effectuez un clic droit et cliquez sur "Connecter".

Vous devez fournir le nom d'utilisateur et le mot de passe, correspondant à un compte AD ou un compte local du pare-feu, en fonction de la configuration.

Lorsque le tunnel VPN est monté et actif, l'icône devient vert :

Si l'on effectue un ipconfig sur le PC, nous pouvons voir que l'on a bien une adresse IP sur la plage 10.10.10.0, avec un sous-réseau en /30 pour l'isolation des clients.

Il ne reste plus qu'à établir une connexion sur vos serveurs, via RDP, Web, ou autre, selon vos besoins !

L'accès VPN SSL pour vos utilisateurs nomades ou en télétravail est désormais opérationnel ! 💪

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Florian B.

Consultant chez Délibérata le jour, blogueur pour IT-Connect la nuit, je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.

florian has 2338 posts and counting.See all posts by florian

3 pensées sur “PfSense : configurer un VPN-SSL client-to-site avec OpenVPN

  • Excellent Check pour la mise en place d’ovpn
    Petite question, y a t’il moyen de fixer les adresses ip ( privé ovpn) pour les clients ?
    L’idée serait de faire communiquer certains clients entre eux à l’aide de règles de firewall et l’utilisation de la topologie /net30
    Merci d’avance

    Répondre
    • Bonjour Irdy,

      A ta place, ce que j’essaierai de faire, c’est de ne pas utiliser la topologie /30 et à la place, de créer plusieurs configurations OpenVPN au niveau de pfSense pour créer des « pools » d’utilisateurs qui doivent communiquer entre eux. Tu vois ce que je veux dire ?

      Cordialement,
      Florian

      Répondre
  • Bonjour,

    Avez vous une idée sur la possibilité qu’il y est un Timeout sur les clients OVPN.
    J’ai des utilisateurs qu’y sont déconnectés automatiquement sans aucune raison de leur VPN.

    La présence de l’option Timeout à peut-etre etait ajoutée avec la mise à jour du PFSENSE 2.4.5 ?

    Répondre

Laisser un commentaire

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

 

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.