Haute disponibilité avec Pfsense

Article précédent

Lors de l’introduction à la sécurité des accès, nous avons abordé les principes fondamentaux de la sécurité informatique à travers la Triade CIA, qui englobe la Confidentialité, l’Intégrité, et la Disponibilité. Nous avons examiné brièvement la confidentialité en attribuant des droits aux utilisateurs selon leurs besoins spécifiques, et nous avons également abordé l’intégrité en introduisant le chiffrement dans les communications entre pfSense et notre contrôleur de domaine. À présent, nous nous tournons vers la disponibilité.

Bon à savoir :L’utilisation des termes “sommairement” et “effleuré” souligne que ces mesures, bien que significatives, ne constituent qu’une partie d’une approche globale de la sécurité. Elles nécessitent d’être complétées par une politique de sécurité adaptée et une architecture en phase avec le contexte de déploiement de l’UTM. Il est essentiel de reconnaître que le risque zéro n’est pas réaliste, et que les mesures de sécurité visent à atténuer les risques tout en minimisant les conséquences d’une éventuelle attaque.

pfSence intègre une fonctionnalité permettant de créer des clusters et ainsi assurer une haute disponibilité qui s’appuie sur 3 technologies :

  • CARP : Dans un réseau, les machines cherchant à communiquer vers un autre réseau envoient leurs trames à l’adresse MAC de la passerelle. Lorsqu’un cluster de plusieurs pfSense, appelés nœuds, est en place, il est nécessaire d’avoir une adresse MAC commune pour les différents nœuds du cluster. De plus, l’adresse MAC de la passerelle est connue par les machines grâce au protocole ARP. Le protocole ARP permet de récupérer l’adresse IP configurée comme passerelle sur la carte réseau en consultant la table ARP pour trouver cette adresse MAC. Ainsi, l’adresse IP configurée sur la carte réseau doit être associée à l’adresse MAC commune à tous les nœuds. Cette adresse IP est ce que l’on appelle une adresse virtuelle.
  • Pfsync : Pfsync est un protocole utilisé dans les clusters pfSense pour assurer la synchronisation des états de connexion entre les nœuds. Lorsqu’une connexion est établie entre un client et un serveur, un état est créé. Cet état évolue en fonction des événements tels que l’établissement de la connexion, la transmission de données, et la fermeture de la connexion. Étant donné la nature dynamique des états de connexion, il est donc nécessaire d’avoir un suivi précis qui soit propagé à tous les nœuds du cluster. Ainsi, si le nœud actif n’est plus en capacité de gérer une connexion, le nœud de secours qui prend le relais aura connaissance du stade actuel de chaque connexion. Cela garantit une transition transparente des connexions actives d’un nœud à un autre en cas de basculement.
  • XML-RPC : Lorsque nous effectuons une configuration dans pfSense, il est important que tous les autres nœuds du cluster aient la même configuration. Pour faciliter cela, pfSense génère un fichier de configuration au format XML, qui est ensuite envoyé et appliqué sur les autres nœuds du cluster. Ce transfert de configuration entre les nœuds s’effectue à l’aide du protocole RPC (Remote Procedure Call), assurant ainsi la cohérence de la configuration sur l’ensemble du cluster.

Dans pfSense, le cluster offre la possibilité d’avoir un unique nœud actif désigné en tant que “Master”, tandis que les autres nœuds ont le statut de “Backup”. Chaque nœud du cluster envoie régulièrement des annonces CARP. Si un nœud cesse d’émettre ces annonces, il est considéré comme non opérationnel. Si le nœud “Master” ne diffuse plus d’annonces CARP, un autre nœud en statut “Backup” prendra automatiquement sa place. Nous dédierons un réseau pour les annonces CARP, c’est également à travers ce réseau que nous configurerons le protocole pfsync et le XML-RPC.

Modification du LAB Pfsense

Le schéma de nouveau Lab sera le suivant :

Ajout d’une interface réseau

Dans VMware Workstation, nous ajouterons un nouveau réseau VMNET3.

Sur notre pfSense nous ajouterons une carte réseau (VMNET3).

Sur l’interface web d’administration de « pfsense1 », après avoir ajouté la 4ème interface réseau, nous allons nous rendre dans le menu Interfaces où nous sélectionnerons « Assignments ».

Nous pouvons voir la liste de nos interfaces, dans cette liste, la dernière interface est marquée comme valide et n’est pas assignée, nous cliquerons sur le bouton « Add » qui se trouve à la fin de la ligne pour l’assigner et nous validerons cette modification en cliquant sur le bouton « Save ».

Après avoir créé l’interface OPT2, nous allons la configurer en lui attribuant une configuration réseau. Dans le menu déroulant « Interfaces », nous sélectionnerons l’interface « OPT2 ».

Dans la section « General Configuration », nous cocherons l’option « Enable » pour activer cette interface. Ensuite, dans la liste déroulantes « IPv4 Configuration type », nous sélectionnerons « Static IPv4 ».

Dans la section « Static IPv4 », nous renseignerons une adresse IP et un masque de sous-réseau.

Une fois cette modification apportée, nous cliquerons sur le bouton « Save » pour les sauvegarder. Un message en haut de page s’affiche nous demandant d’appliquer les changements. Nous cliquerons sur le bouton « Apply Changes »

Pour des questions de confort, nous renommerons également notre pfSense. Dans le Menu « System », nous sélectionnerons « General Setup ».

Dans la section « System », nous modifierons le nom de notre pfSense dans le champ « Hostname », nous validerons ce choix en cliquant sur le bouton « Save »

Sur la page d’accueil, nous pouvons constater les changements.

Les changements ont été fait sur le 1er pfSense, nous allons pouvoir passer au second.

Bon à savoir : Notre lab intégre un dns, nous pouvons créer une nouvelle entrée pour utiliser le nom du pfsense.



Ajout d’un nouveau pfSense

L’installation du second pfSense se fera de la même manière que celle que nous avons vu plus tôt dans cette documentation à l’exception que nous aurons 4 interfaces. Contrairement au premier, nous ne configurerons pas l’authentification LDAP. Pour des questions pratiques, nous renommerons le premier pfSense, « pfsense1 » et le second sera nommée « pfsense2 ».

Configuration de la Haute Disponibilité

Pour la configuration de la Haute Disponibilité, nous apporterons des modifications sur « pfsense1 » et « pfsense2 ». Dans un premier temps, nous allons devoir activer et configurer la synchronisation des connexions, c’est-à-dire pfsync et XML-RPC. La configuration de ces deux protocoles se configure sur la même page de l’interface d’administration. Quant au CARP, nous le configurerons à part, après avoir configurer les protocoles pfsync et XML-RPC.

Configuration des protocoles pfsync et XML-RPC

Pfsense1

PfSense offre une interface d’administration spécialement dédiée à la configuration de la haute disponibilité. Pour accéder à cette interface, sur pfsense1, nous nous rendrons dans le menu déroulant « System » et nous sélectionnerons « High Availability Sync ».

La première section, « State Synchronisation Settings », se concentre sur pfsync. Pour commencer, nous activerons la synchronisation des états en cochant la case « pfsync transfers state insertion, update, and deletion messages between firewalls». Ensuite, nous dédierons l’interface OPT2 au protocole pfsync, pour cela, dans la liste déroulante, nous sélectionnerons, l’interface « OPT2 ». Nous forcerons pfsense1 à se synchroniser avec pfsense2. Nous renseignerons donc l’adresse IP de l’interface OPT2 de pfsense2, dans le champ « pfsync Synchronize Peer IP ».

Bon à savoir : Dans le cas où il y aurait un nombre de nœud supérieur à 2, le champ « pfsync Synchronisze Peer IP » doit être vide, ainsi une adresse multicast sera utilisée.

Dans la section suivante, nous configurerons le protocole XML-RPC. Nous indiquerons que le XML-RPC se synchronisera avec notre pfsense2 sur l’interface OPT2, nous renseignerons donc l’adresse IP de l’interface OPT2 de pfsense2.

Nous devons ensuite renseigne les informations d’identifications de pfsense2. Idéalement, nous devrions créer un compte qui soit dédié, puis pour terminer, nous sélectionnerons les options que nous souhaitons synchroniser.

Pfsense2

Pour la configuration de pfsense2, nous allons avoir, à peu de chose près, la même configuration. Dans pfsense2, nous allons nous rendre dans l’interface de configuration de la haute disponibilité.

La différence avec la configuration de pfsense1, c’est qu’ici, nous n’allons configurer que la section « State Synchronization Settings (pfsync) » et plus précisément les paramètres suivants :

  • Synchronize states
  • Synchronize interface
  • Pfsync Synchronize Peer IP

Après avoir valider, nous nous rendrons sur pfsense1 où nous pouvons voir que nous avons une alerte, en cliquant sur cette alerte, nous en avons le détail qui nous indique une erreur au niveau du XML-RPC, plus précisément qu’il y a une erreur de communication entre pfsense1 et pfsense2.

Cette information est tout à fait normale dans le contexte d’utilisation de pfSense, en effet, par défaut, lorsque nous ne sommes par l’interface assigné au LAN, aucune communication est autorisée. Pour autoriser la communication entre pfsense1 et pfsense2 sur le port 443, Il nous faut nous rendre dans le menu « Firewall », puis sélectionner Rules où nous allons nous rendre dans l’onglet « OPT2 ».

Cette configuration sera à faire sur les deux pfSense.

Après avoir cliqué sur un des deux bouton « Add », nous validerons le formulaire de création de nouvelle règle en cliquant directement sur « Save ». Nous verrons ce point un peu plus tard dans ce document. Après avoir cliqué sur « Save », nous devons confirmer en cliquant sur le bouton « Apply change ».

Pour vérifier que la synchronisation est opérationnelle, nous déroulerons le menu « Status » et nous sélectionnerons « Filter reload » et nous cliquerons sur le bouton « Force Config Sync ».

Dans le résultat de la synchronisation, à la fin du journal, nous devons voir un message nous indiquant que la synchronisation a été effectué avec succès.

Configuration du protocole CARP

Comme nous l’avons annoncé précédemment, le protocole CARP va nous permettre de configurer une adresse IP virtuelle appelé au VIP pour virtual IP, qui agira comme un aiguilleur, en transférant les trames vers le UTM qui a le statut « master ».

Nous configurerons une VIP pour les interfaces suivantes :

  • WAN
  • LAN
  • OPT1

Sur pfSense1, nous allons dérouler le menu « Firewall » et nous allons sélectionner « Virtuals IP ».

Pour ajouter une VIP, nous cliquerons sur le bouton « Add » pour accéder au formulaire de création.

Nous devons préciser qu’elle sera le Type d’adresse ip virtuelle, dans notre cas, nous en avions discutez plus tôt c’est CARP. Après avoir choisi l’option CARP, nous allons nous renseigner le champ Address(es), nous lui attribuerons l’adresse 10.0.0.252 et un masque de sous-réseau de 24 bits. L’adresse VIP et les adresse configurer sur les interfaces WAN de nos pfSense forment un groupe nommé VHID (Virtual HOST IDentifier), l’accès à ce groupe est sécurisé par un mot de passe, nous devons créer un mot de passe pour ce VHID. Une fois que nous avons configurer les différents paramètres de notre VIP, nous allons les valider en cliquant sur le bouton « Save » sans oublier d’appliquer ses changements en cliquant ensuite sur le bouton « Apply Changes »

Nous réitérons ces opérations sur les interfaces LAN etOPT1.

Récapitulatif des adresses IP virtuelles.

La réplication des configurations étant activé et configuré pfsense2 doit avoir la même configuration. Après nous être assuré que cela soit bien le cas, nous allons nous déroulerons le menu Status des deux pfSense où nous sélectionnerons CARP (failover). Nous devons avoir un pfSense qui héberge les interface Master et le second doit héberger les interfaces au statut BACKUP.

Pour tester que cela fonctionne, nous allons nous rendre sur le poste client de notre LAN, modifier les paramètre réseau en configurant la passerelle avec l’adresse ip virtuelle de notre LAN.

Nous ouvrirons 3 invites de commande :

  • Le premier enverra un ping continue vers une adresse publique
  • Le deuxième enverra un ping continue vers pfsense1.
  • Le dernier enverra un ping continue vers sa passerelle, soit l’adresse IP virtuelle.

Nous allons ensuite éteindre pfsense1 et retourner sur notre poste client. Nous constatons que nous avons perdu un ping sur le premier terminal, tandis que le second terminal n’arrive plus à joindre pfsense1 et notre adresse IP est toujours joignable.

La mise en place d’un cluster pfSense constitue une solution performante visant à renforcer la disponibilité, la sécurité, et à assurer le maintien opérationnel des services. En plus de fournir une résilience en cas de défaillance, cette approche permet la mise à jour individuelle de chaque nœud sans impact sur les utilisateurs.

https://www.pandawan.fr/filtrage-avec-pfsense