Configuration du serveur OpenVPN avec une sécurité maximale dans pfSense
Le système d’exploitation pfSense, qui est orienté pare-feu et routeur, dispose de plusieurs protocoles VPN pour interconnecter les sites via Site-to-Site VPN, et nous pouvons également configurer un VPN d’accès à distance pour interconnecter différents clients mobiles entre eux, et ainsi que tout Internet le trafic passe par le système d’exploitation lui-même. OpenVPN est l’un des logiciels les plus utilisés pour créer des réseaux privés virtuels, grâce à sa sécurité, sa flexibilité et son bon fonctionnement. Aujourd’hui, dans RedesZone, nous allons expliquer étape par étape comment configurer le serveur OpenVPN qui se trouve dans pfSense.
Qu’est-ce que l’OpenVPN intégré à pfSense et à quoi sert-il ?
OpenVPN est un logiciel qui nous permet de construire des réseaux privés virtuels, nous aurons un canal de contrôle où la levée du tunnel et la négociation des protocoles de cryptage seront gérées, et nous aurons un canal de données où tout le trafic du tunnel sera point à point chiffré. L’un des points forts d’OpenVPN dans pfSense est que la grande majorité des options disponibles sont disponibles via une interface utilisateur graphique très intuitive, cela nous permettra de le configurer sans avoir besoin d’incorporer manuellement aucune directive dans le champ «options». avancé » . Le logiciel OpenVPN que nous avons intégré à pfSense va nous permettre de créer et configurer deux types d’architectures :
- VPN d’accès à distance – Les clients distants se connecteront au serveur VPN pfSense et se connecteront à Internet par notre intermédiaire. Ils pourront également accéder aux sous-réseaux que nous indiquons. Ce type de VPN s’adresse aux télétravailleurs, techniciens réseaux et systèmes, etc.
- VPN Site-to-Site : cette architecture nous permet d’intercommuniquer un siège avec un autre, d’intercommuniquer différents sites via Internet et que tout le trafic soit protégé point à point. Par exemple, avec ce type de VPN, nous pouvons communiquer des bureaux, des sièges sociaux d’entreprise, etc.
OpenVPN prend en charge des dizaines de configurations différentes, à la fois pour améliorer les performances et la sécurité. pfSense permet différents types d’authentification, mais la plus recommandée est basée sur des certificats SSL/TLS pour garantir l’authenticité, la confidentialité et l’intégrité, et il n’est pas recommandé d’utiliser des clés pré-partagées. En plus d’incorporer une authentification basée sur des certificats SSL/TLS, nous pourrions également intégrer une authentification supplémentaire avec nom d’utilisateur/mot de passe, pour avoir un système plus robuste. pfSense vous permet d’exporter la clé privée des certificats avec un mot de passe, de cette façon, pour pouvoir utiliser ces certificats, nous devrions également incorporer un mot de passe supplémentaire, sinon cela ne fonctionnerait pas.
Le serveur OpenVPN intégré à pfSense nous permettra de nous connecter à notre domicile ou de travailler à distance, rapidement et en toute sécurité, que le réseau soit filaire ou WiFi. Tout le trafic sera crypté de bout en bout depuis notre client OpenVPN (qui est installé sur un ordinateur, un smartphone ou une tablette) vers le serveur pfSense OpenVPN. Un détail très important est que le serveur OpenVPN doit être installé dans une connexion Internet en dehors de CG-NAT, et avec les règles du pare-feu ouvertes pour permettre la connexion, sinon, nous ne pourrons pas nous connecter via Internet.
Bien sûr, sur le serveur, nous pouvons ajouter différents sous-réseaux pour acheminer le trafic à travers les différents sous-réseaux que nous avons dans pfSense, et nous pouvons même configurer dans le pare-feu si nous voulons ou non autoriser ces accès à partir d’une adresse IP de serveur OpenVPN spécifique. Avec OpenVPN, nous avons deux manières de gérer les packages et leur fonctionnement au niveau de la couche de transport :
- TUN : ce mode de fonctionnement permet d’encapsuler tous les paquets qui y transitent sous forme de segments TCP ou de datagrammes UDP. Tous les clients recevront un nouveau sous-réseau spécifique, par défaut le sous-réseau OpenVPN est 10.8.0.0/24 mais nous pouvons configurer celui que nous voulons.
- TAP : ce mode de fonctionnement simule une interface réseau Ethernet, il est aussi appelé pont, et ce tunnel virtuel encapsule directement des paquets Ethernet. Le mode de fonctionnement pont est utile pour intercommuniquer facilement des utilisateurs distants, mais si le réseau privé source correspond à celui de destination, nous aurons un problème de routage et la communication ne fonctionnera pas.
Dans ce tutoriel pour configurer OpenVPN dans pfSense, nous utiliserons un sous-réseau virtuel 10.8.0.0/24 où nous aurons tous les clients VPN lorsqu’ils se connecteront, il sera très facile d’identifier les différents clients VPN que nous avons connectés au réseau, de plus, on peut «forcer» pour que chaque client avec un certificat spécifique ait toujours la même adresse IP privée du tunnel VPN.
Dans ce manuel, nous allons vous montrer comment créer une configuration OpenVPN très sécurisée dans pfSense, en personnalisant les algorithmes de cryptage symétrique, asymétrique et de hachage. De cette façon, nous pouvons avoir le meilleur cryptage possible des communications.
Résumé de la cryptographie à utiliser
- Certificats numériques : OpenVPN permet l’utilisation de certificats numériques basés sur RSA ou encore EC (Elliptical Curves) , nous utiliserons l’algorithme EC secp521r1, bien que nous en ayons beaucoup d’autres disponibles via la gestion des certificats pfSense. L’algorithme de hachage que nous utiliserons sera SHA512 , l’un des plus sûrs que nous puissions actuellement utiliser. Tous les clients VPN de la version 2.4 doivent être compatibles avec cette configuration, dans notre cas, le serveur et les clients utilisent OpenVPN 2.5 ou supérieur, il ne devrait donc y avoir aucun problème.
- Canal de contrôle OpenVPN : nous utiliserons TLS 1.3 pour une sécurité maximale, et toujours en utilisant PFS (Perfect Forward Secrecy). Nous utiliserons les trois suites cryptographiques de TLS 1.3 pour établir la communication : TLS_AES_256_GCM_SHA384, TLS_CHACHA20_POLY1305_SHA256 et TLS_AES_128_GCM_SHA256. Si vous voulez vérifier si votre serveur ou client supporte ce type de cryptage, vous devez mettre dans la console «openvpn –show-tls».
- Canal de données OpenVPN : nous utiliserons l’algorithme de chiffrement symétrique AES-256-GCM, l’un des plus sécurisés actuellement et qui a été intégré à OpenVPN 2.4 et versions ultérieures. Cependant, nous utiliserons également CHACHA20-POLY1305 et AES-128-GCM pour que le client VPN choisisse celui qu’il souhaite, en donnant la priorité au premier. Si vous voulez vérifier si votre serveur ou client supporte ces types de cryptage, vous devez mettre dans la console «openvpn –show-ciphers».
Pour définir dans le canal de données que nous voulons utiliser TLS 1.3, nous devrons utiliser la directive «tls-ciphersuites» au lieu du «tls-cipher» typique comme nous l’avons toujours utilisé. Ce serait comme suit :
tls-ciphersuites TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256
En plus de ces mesures de sécurité, nous inclurons une signature HMAC pour la première négociation TLS, cela nous permettra de protéger le serveur OpenVPN contre d’éventuelles attaques DoS. Si le client n’a pas la signature HMAC correcte, il est automatiquement bloqué et ne vérifiera pas les certificats numériques. Nous utiliserons tls-crypt qui est disponible à partir d’OpenVPN 2.4 et versions ultérieures, pour avoir la meilleure sécurité car il nous permet d’authentifier et de crypter le canal afin que personne ne puisse capturer cette clé pré-partagée.
Enfin, nous utiliserons le protocole UDP à la place de TCP, car il est plus fort contre les attaques par déni de service, nous devons nous rappeler que UDP est non connectif, peu fiable et non orienté connexion. Cependant, nous pouvons utiliser TCP sans aucun problème pour fournir au VPN tous les avantages de ce protocole.
Installez le plugin OpenVPN Client pour générer la configuration
Bien qu’OpenVPN soit installé par défaut dans pfSense, que ce soit en mode serveur ou client, nous n’avons pas de package pré-installé qui nous permette de générer automatiquement la configuration pour les clients. Si nous allons dans le gestionnaire de packages dans « System / Package Manager » et que nous allons dans l’onglet « Packages disponibles », nous pouvons installer le package « OpenVPN-client-export » qui nous permettra de réaliser précisément cette action, pour faciliter grandement la configuration des clients, en important la configuration du serveur avec leurs certificats numériques correspondants.
Une fois installé, nous serons prêts à passer à l’étape suivante, la création des certificats numériques.
Créer des certificats numériques dans pfSense lui-même
Pour configurer un serveur OpenVPN avec l’authentification « Accès à distance SSL / TLS », nous devons utiliser des certificats numériques. Nous devrons créer une autorité de certification (CA) avec laquelle signer les différents certificats, nous devons créer un certificat spécifique pour le serveur OpenVPN et le type de serveur, ainsi que tous les certificats numériques des clients VPN que nous voulons enregistrer .
Nous pouvons également créer une liste de révocation de certificats, si un certificat est compromis parce que nous l’avons perdu, nous pouvons l’annuler directement pour qu’il ne soit pas valide. Si un utilisateur illégitime l’utilise, vous ne pourrez en aucun cas vous connecter à notre serveur VPN.
Créer l’AC (Autorité de Certification)
Dans la section «CAs», c’est là que nous devons cliquer sur «Ajouter» pour créer une nouvelle autorité de certification, cela est essentiel pour que tous les certificats numériques fonctionnent correctement, à la fois le serveur et ceux des clients VPN qui vont être utilisés. relier. Dans ce menu, nous devons choisir les options suivantes :
- Créer/Modifier l’AC
- Nom descriptif : nous mettons un nom descriptif à cette autorité de certification, ce que nous voulons.
- Méthode : créez une autorité de certification interne.
- Autorité de certification interne
- Type de clé : ECDSA avec secp521r1 qui est compatible avec OpenVPN.
- Algorithme de résumé : sha512
- Jours à vie : 3650 (10 ans)
- Common-name : le CN doit être un nom descriptif, qui décrit de manière unique cette CA. Dans notre cas nous n’avons qu’une CA pour OpenVPN, nous avons donc simplement mis «openvpn-ca»
- Code pays : aucun. Cela n’est plus nécessaire pour remplir les nouveaux certificats OpenVPN.
La configuration de l’AC serait la suivante :
Dans les différents menus, nous pouvons choisir d’autres options de configuration, comme importer une CA que nous avons déjà créée, ou créer une CA intermédiaire, nous allons créer une CA puis les certificats, sans utiliser de CA intermédiaire.
Nous pourrons également choisir entre RSA ou ECDSA, et même utiliser différentes longueurs de clé RSA et différents algorithmes EC pour créer le CA. Dans «Digest algorithm», nous pouvons choisir différents algorithmes de hachage, les plus recommandés sont sha256, sha384 et sha512, vous ne devez jamais utiliser sha1 pour des raisons de sécurité.
Une fois le CA créé, il apparaîtra dans la liste des CA comme vous pouvez le voir ici :
Dans ce menu, nous pouvons voir le nombre de certificats qui lui sont associés, le CN, la validité du certificat et si nous avons actuellement cette CA en cours d’utilisation. Lorsque nous avons une autorité de certification ou un certificat en cours d’utilisation, nous ne pourrons pas le supprimer. Dans la section « Actions », nous pouvons modifier la description du certificat, exporter la clé publique du CA, la clé privée, renouveler le CA et même supprimer le CA que nous venons de créer.
Créer le certificat de serveur OpenVPN
Nous devons maintenant créer le certificat que le serveur OpenVPN intégré à pfSense utilisera. On va dans la section «Certificats» et on clique sur «Ajouter/Signer», on aura toujours un certificat préconfiguré dans pfSense car le protocole HTTPS l’utilise pour se connecter, sinon ça risque de ne pas fonctionner. Ce certificat est créé automatiquement lorsque vous installez le système d’exploitation.
Le menu de création de certificat est très similaire au précédent, nous devrons choisir entre trois options :
- Méthode:
- Créez un certificat interne.
- Importez un certificat existant.
- Créez une demande de signature de certificat.
- Signez une demande de signature de certificat.
Nous allons sélectionner la première option, créer un certificat interne.
Ensuite, nous devrons lui donner un nom descriptif, celui que nous voulons, et la configuration doit être la suivante :
- Ajouter / signer un nouveau certificat
- Méthode : créez une autorité de certification interne.
- Nom descriptif : nous mettons un nom descriptif à ce certificat, ce que nous voulons.
- Certificat interne
- Autorité de certification : nous devons choisir l’autorité de certification précédente que nous venons de créer à l’étape précédente.
- Type de clé : ECDSA avec secp521r1 qui est compatible avec OpenVPN. Le même que le CA.
- Algorithme de résumé : sha512
- Jours à vie : 3650 (10 ans)
- Common-name : le CN doit être un nom descriptif, qui décrit de manière unique ce certificat de serveur. Dans notre cas, nous n’avons qu’un certificat de serveur, nous avons donc simplement indiqué openvpn-server.
- Code pays : aucun. Cela n’est plus nécessaire pour remplir les nouveaux certificats OpenVPN.
Si nous avons un certificat d’une durée de plus de 398 jours il est possible qu’il nous donne des erreurs sur certaines plateformes, c’est de manière générale, mais pas pour OpenVPN. Par conséquent, nous pouvons définir la durée que nous voulons sans problème, cela ne nous donnera pas d’échec.
En bas, il faut choisir les options suivantes :
- Attributs du certificat :
- Type de certificat : certificat de serveur
- Nom alternatif : nous pouvons le laisser sans rien, complètement vide.
Nous devons garder à l’esprit que nous configurons actuellement le certificat numérique pour le serveur OpenVPN, nous devons donc choisir «Certificat de serveur».
La section «Nom alternatif» est souvent utilisée pour les certificats IPsec, mais nous ne l’utiliserons pas dans OpenVPN.
Une fois créé, nous le verrons dans la liste des certificats, de plus, nous pouvons également voir le CA avec lequel nous avons signé le certificat et s’il est du type serveur.
Ce certificat numérique pour le serveur est celui que nous devrons mettre lors de la configuration du serveur OpenVPN dans pfSense, nous devons très bien nous souvenir du nom que nous lui avons donné, car plus tard il nous prendra une liste avec tous les certificats.
Créer des certificats pour tous les clients
Pour créer un ou plusieurs certificats numériques pour les clients, nous devons faire exactement le même processus que pour le certificat du serveur.
- Ajouter / signer un nouveau certificat
- Méthode : créez une autorité de certification interne.
- Nom descriptif : nous mettons un nom descriptif à ce certificat client.
- Certificat interne
- Autorité de certification : nous devons choisir l’autorité de certification précédente que nous avons créée dans la première étape.
- Type de clé : ECDSA avec secp521r1 qui est compatible avec OpenVPN. Le même que le CA.
- Algorithme de résumé : sha512
- Jours à vie : 3650 (10 ans)
- Common-name : le CN doit être un nom descriptif, qui décrit de manière unique ce certificat client. Dans notre cas nous n’avons qu’un certificat client, nous avons donc simplement indiqué openvpn-client1.
- Code pays : aucun. Cela n’est plus nécessaire pour remplir les nouveaux certificats OpenVPN.
Dans la section « Attributs du certificat », nous devrons le configurer comme suit :
- Attributs du certificat :
- Type de certificat : certificat utilisateur
- Nom alternatif : nous pouvons le laisser sans rien, complètement vide.
Une fois créé, nous pouvons voir la nouvelle liste des certificats créés dans pfSense.
Si nous cliquons sur modifier, la seule chose que nous pouvons faire est de modifier le nom descriptif, mais nous pouvons également exporter la clé privée avec une phrase secrète, si nous mettons un mot de passe, la clé privée elle-même sera cryptée avec AES-256-CBC pour protéger son contenu et, par conséquent, éviter que s’il tombe entre de mauvaises mains, ils puissent le lire et l’utiliser. C’est ce que nous avons utilisé pour exporter le certificat des clients, comme nous vous le montrerons plus tard.
Si nous voulons créer plus de certificats clients, nous pouvons le faire de la même manière, tout ce que nous avons à faire est de mettre une description différente et également un CN différent.
Une fois que nous avons fini de créer tous les certificats des clients qui vont se connecter au serveur OpenVPN, nous procédons à la configuration du serveur étape par étape.
Configurer le serveur OpenVPN avec toutes les options expliquées
Pour configurer le serveur OpenVPN, il suffit d’aller dans le menu principal de pfSense, de cliquer sur la rubrique « VPN » et de sélectionner « OpenVPN ».
Dans la section «OpenVPN», nous devons cliquer sur «Serveurs» et cliquer sur «Ajouter» pour ajouter un nouveau serveur OpenVPN.
Dans la configuration du serveur OpenVPN, nous devons choisir les options suivantes :
- Informations générales:
- Mode serveur : accès à distance (SSL / TLS)
- Protocole : UDP
- Mode de l’appareil : accordez
- Interface WAN
- Port local : 1194, par défaut c’est ce port, il est recommandé de le changer.
- Description : nous mettons une description de ce serveur OpenVPN, car nous pouvons en créer plusieurs.
Dans la section «Protocole», nous avons différentes options de configuration, par défaut c’est «UDP sur IPv4 uniquement», car nous pouvons également utiliser TCP, et même TCP et UDP, et aussi pour les réseaux IPv6, si nous utilisons ce protocole net. Dans la section «Mode périphérique», nous pouvons choisir tun ou tap, comme nous l’avons expliqué précédemment, tun est au niveau de la couche 3 et tap est au niveau de la couche 2, avec ses forces et ses faiblesses. Dans la section «Interface», le plus normal est d’utiliser le WAN, mais on peut être à l’écoute avec ce serveur OpenVPN sur toutes les interfaces. Enfin, dans « Port local » on peut modifier le port TCP et/ou UDP que l’on veut, il est conseillé de ne pas utiliser le port par défaut qui est 1194.
Dans la section « Paramètres cryptographiques », nous pouvons tout configurer concernant les certificats numériques SSL / TLS, puis nous expliquons toutes les options :
- Paramètres cryptographiques
- Configuration TLS : nous activons l’utilisation d’une clé TLS, pour utiliser le tls-crypt, nous cliquons sur générer automatiquement la clé TLS. Lors de l’enregistrement des modifications, il apparaîtra si nous voulons utiliser «Authentification» ou également «Cryptage», ce dernier est recommandé d’utiliser le nouveau tls-crypt au lieu de tls-auth que nous avions auparavant.
- Peer Certificate Authority : nous sélectionnons l’AC que nous avons créée dans pfSense lui-même pour ce serveur OpenVPN.
- Peer certificate Revocation list : si nous créons une liste de révocation de certificats, nous la créons dans la section «Système> Cert.Manager» et sélectionnons ici la liste que nous avons créée précédemment.