Firewall PfSense

Écrit par Alexandre Dos Reis
Créé le 2021-2-23, modifié le 2021-5-5.
Version : pfSense-CE-2.5.0-RELEASE-amd64

I. Présentation

PfSense est un routeur/pare-feu open source basé sur le système d'exploitation FreeBSD. À l'origine un fork de m0n0wall, il utilise le pare-feu à états Packet Filter, des fonctions de routage et de NAT lui permettant de connecter plusieurs réseaux informatiques. Il comporte l'équivalent libre des outils et services utilisés habituellement sur des routeurs professionnels propriétaires. PfSense convient pour la sécurisation d'un réseau domestique ou d'entreprise.

Après l'installation manuelle nécessaire pour assigner les interfaces réseaux, il s'administre ensuite à distance depuis l'interface web. pfSense gère nativement les VLAN (802.1q).

Comme sur les distributions Linux, pfSense intègre aussi un gestionnaire de paquets pour installer des fonctionnalités supplémentaires, comme un proxy ou un serveur de voix sur IP1.

Voici la topologie du réseau et des machines pour la mise en situation :

MachineOSDistributionVersionRôleIP
VM PfsenseBSDfreeBSD 64 bitsCE-2.5.0Pare-feu, router et DHCP172.16.0.87 & 192.168.1.1
VM DebianGnu-LinuxDebian Buster10.8Client HTTP192.168.1.x

II. Installation et configuration

a. Création de la machine sur Virtual Box

  • Créer une nouvelle machine.
  • Nommer la machine PfSense.
  • Le type doit être BSD et la version FreeBSD (64 bit).
  • Allouer 4096 MB en taille de mémoire.
  • Créer un disque dur virtuel VirtualBox Disk Image dynamiquement alloué de 8 Gio.

Avant de démarrer la machine, dans la configuration réseau, il faut :

  • Une carte réseau en accès par pont ou bridge WAN vers l'extérieur.
  • Une carte réseau en réseau interne qui sera accessible via le pare-feu PfSense.

b. Récupération de l'ISO et installation

Il faut télécharger l'ISO de pfsense disponible sur le site officiel et renseigner cette image au lancement de la machine sur Virtual Box.

Après plusieurs écran, il est demandé d'accepté les conditions d'utilisation puis d'installer l'application. Il faut choisir la langue pour le clavier :

pfsense-langue

Ensuite choisir l'option tester et/ou continuer. Choisir l'installation automatique via le BIOS.

Une fois l'installation terminée, il est demandé de redémarrer la machine, il faut auparavant éteindre la machine et enlever l'image ISO sous peine de relancer l'installation de PfSense. Pour cela sur Virtual Box, sélectionner Machine et extinction PAR ACPI. Puis se rendre dans l'onglet périphérique, lecteurs optiques puis décocher l'image de PfSense. Relancer la machine

pfsense-reboot

Ce menu devrait apparaître :

pfsense-menu

  • WAN -> em0 désigne la carte et le réseau externe, son IP peut être publique ou privée.
  • LAN -> em1 désigne la carte et le réseau interne, son IP est privée. C'est dans ce réseau interne que vont se placer les machines gérées par PfSense. C'est également via cette interface que l'on pourra administrer PfSense dans un 1er temps.

Si on désire changer les adresses IP des cartes réseaux, il faut sélectionner l'option 2.

c. Connexion via l'interface web

Pour administrer via l'interface web, il nous faut une machine présente dans le LAN, pour émuler cela dans Virtual Box, il faut qu'une machine ait le même réseau interne que Pfsense :

pfsense-lan

Ici on utilise une Debian Buster graphique, on lance Firefox et tape l'adresse https://192.168.1.1 qui est celle de la carte réseau interne de PfSense. On devrait obtenir ça :

pfsense-lan

Il faut cliquer sur avancé, puis accepter le risque et poursuivre. Cet écran devrait s'afficher :

pfsense-weblogin

L'utilisateur par défaut est admin et le mot de passe pfsense. A changer au plus vite bien évidemment. Une fois arrivé sur la page d'accueil, effectuer la configuration de base proposée par PfSense.

d. Mettre le système en français.

Pour passer en français, il faut se rendre sur l'onglet system puis General setup et aller à l'option Language, on peut aussi au passage changer la timezone pour Europe/Paris, puis cliquer sur save tout en bas.

e. DHCP

PfSense dispose d'un DHCP pour le coté LAN, pour y accéder cliquer sur Services puis Serveur DHCP. Le DHCP devrait déjà être actif, on peut spécifier une ou plusieurs étendues d'adressage avec l'option plage.

III. Règles de pare-feu

Par défaut, toute communication depuis l'extérieur est interdite, il va falloir créer une règle pour l'autoriser.

a. Ping depuis l'extérieur.

Pour effectuer un test de ping, il faut autoriser le protocole ICMP à pouvoir envoyer sa requête sur l'interface WAN. Etant donné que l'adresse IP de la carte WAN a une adresse IP privée en 172.16.0.87, il faut autoriser le traffic depuis les adresses IP privée (Cela ne serait pas nécéssaire si la WAN avait une adresse IP publique.)

Pour cela, il faut se rendre sur l'onglet Pare-feu puis Règles et modifier la règle existante avec la petite roue à droite sous les actions :

pfsense-weblogin

Puis tout en bas il faut désactiver la règle Bloquer les réseaux privés et les adresses de loopback, enregistrer puis valider.

pfsense-weblogin

Il reste la règle à créer pour autoriser le ping de la WAN depuis l'extérieur. Pour créer une règle, se rendre sur Pare-feu, règles puis cliquer sur l'icone ajouter :

pfsense-weblogin

Il faut autoriser le protocole ICMP sur la WAN depuis n'importe quelle adresse IP vers le parefeu. Puis cliquer sur Enregistrer et Valider.

pfsense-weblogin

Le test de ping avec une machine présente dans le réseau 172.16.x.x devrait pouvoir se faire :

ping 172.16.0.87

Envoi d’une requête 'Ping'  172.16.0.87 avec 32 octets de données :
Réponse de 172.16.0.87 : octets=32 temps<1ms TTL=64
Réponse de 172.16.0.87 : octets=32 temps<1ms TTL=64
Réponse de 172.16.0.87 : octets=32 temps<1ms TTL=64
Réponse de 172.16.0.87 : octets=32 temps<1ms TTL=64

Statistiques Ping pour 172.16.0.87:
Paquets : envoyés = 4, reçus = 4, perdus = 0 (perte 0%),
Durée approximative des boucles en millisecondes :
Minimum = 0ms, Maximum = 0ms, Moyenne = 0ms

Evidemment dans un environnement de production, ces règles sont dangereuses car elles donnent des informations sur le pare-feu, il ne doit pas pourvoir être pinger depuis l'extérieur.

b. Autoriser les machines présentes dans le lan à sortir vers INTERNET.

Actuellement, les machines sortent déjà avec la création de règles automatiques, mais en production on préfère avoir la main sur les régles sortantes car en manuel c'est plus rapide.

Se rendre sur Pare-feu, NAT puis Sortant et passer du mode Création automatique de règles NAT sortantes à la Création manuelle de règle NAT sortantes. Ensuite dans plus bas dans la section Mappages, désactiver les 2 dernières règles qui ont attraient au réseau LAN, depuis 192.168.1.0 vers toutes destinations en cliquant sur la petite flèche bleu pour commuter l'état de la règle.

pfsense-weblogin

A ce stade, le traffic depuis le LAN vers l'internet ne devrait plus se faire.

Pour créer une règle manuelle, cliquer sur Ajouter. Puis autoriser tout traffic a sortir vers Internet, comme ceci :

pfsense-weblogin

Cette manoeuvre est sécurisée car elle autorise le LAN à sortir vers Internet mais aucune connexion depuis l'Internet ne pourra traverser le WAN.

IV. Ajouts de services

a. Installer un filtrage d'URL depuis la LAN vers INTERNET

Un des services incontournable est l'ajout d'un proxy entre les utilisateurs de la LAN et Internet, pour effectuer du cache, de la redirection, du filtrage et de la supervision de requêtes. Ces services sont rendus disponible au travers de :

  • Squid : C'est une application proxy de cache haute performance.
  • SquidGuard : Il permet d'effectuer du filtrage d'URL.
  • LightSquid : C'est un outil de supervision pour les 2 services précédent au travers d'un page web.

Pour installer des paquets, se rendre sur l'onglet Système, Gestionnaires de paquets et paquets disponibles. Taper Squid dans la barre de recherche et installer les 3 services nommés ci-dessus.

b. Création d'un certificat pour Squid

Il va falloir créer un certificat auto-signé pour Squid, Pour cela, se rendre sur Système, Gestionnaire de certificats et enfin Certificats. Cliquer sur Ajouter/Signer. Toutes les options peuvent rester par défauts, sauf le Nom descriptif et le Nom commun. Une fois ceci fait, on enregistre.

c. Configuration de Squid

Il faut configurer Squid, se rendre dans le menu Services puis Squid Proxy Server et sur l'onglet Local Cache. Configurer les paramètres comme ceci :

  • Cache Replacement Policy : Heap LFUDA
  • Hard Disk Cache Size : 500
  • Hard Disk Cache System : ufs
  • Level 1 Directories : 16
  • Hard Disk Cache Location : /var/squid/cache
  • Memory Cache Size : 64

Puis toujours sur la même page, dans l'onglet General :

  • Enable Squid Proxy : Cocher la case
  • Resolve DNS IPv4 First : Cocher la case
  • Transparent HTTP Proxy : Cocher la case
  • HTTPS/SSL Interception : Cocher la case
  • SSL/MITM Mode : Splice All
  • AC : Selectionner le certificat précédemment créé.
  • Enable Access Logging : Cocher la case
  • Rotate Logs : 365
  • Error Language : fr
  • Suppress Squid Version : Cocher la case

d. Configuration de SquidGuard

Au tour de SquidGuard pour mettre en place le filtrage, se rendre dans le menu Services puis SquidGuard Proxy Filter.

Sur l'onglet General settings :

Activer : Cocher la case pour démarrer le service. Enable log : Cocher la case pour activer les logs Enable log rotation : Pour effectuer la rotation des logs. Blacklist : Activer cette option pour mettre en place une liste de site interdits. Blacklist URL : Il faut spécifier le chemin pour la liste de sites interdits. Par exemple : http://dsi.ut-capitole.fr/blacklists/download/blacklists_for_pfsense.tar.gz

Sur l'onglet blacklist, cliquer sur le bouton download pour télécharger la liste des sites interdits depuis le lien inséré plus tôt.

Sur l'onglet Common ACL : - cliquer sur le + de Target Rules List puis interdir tous les sites voulus en choisissant deny. - Do not allow IP-Addresses in URL : A cocher pour ne pas que le filtrage soit actif même si on joint les sites interdits avec leur adresse IP directement. - Use SafeSearch engine : A cocher pour limiter les contenus matures sur les moteurs de recherche.

e. Configuration de LightSquid

Pour accéder à la configuration de LightSquid, selectionner Etats puis Squid Proxy Reports. - Lightsquid Web SSL : Décocher pour un accès en HTTP. - Définir un utilisateur et un mot de passe avec : Lightsquid Web User et Lightsquid Web Password. - Language : Sélectionner Français - Ip Resolve Method : Squidauth - Refresh Scheduler : 60 min

Puis cliquer sur Enregistrer et Resfresh Full

f. Ajout d'un antivirus

Il est possible d'installer un antivirus pour que ce dernier analyse les fichiers téléchargés depuis Internet vers le LAN. Pour ce faire, il faut se rendre dans : Services, Squid Proxy Server et Antivirus : - Enable AV : A cocher pour activer l'antivirus. - ClamAV Database Update : Permet de sélectionner le rafraichissment de la base de données de l'antivirus ClamAV. - Regional ClamAV Database Update Mirror : Selectionner le mirroir le plus proche du serveur Pfsense pour accélerer le téléchargement, ici Europe.

Pour avoir une progression de l'installation de l'antivirus, il faut aller dans le Etats, Système et Général.

g. Planification de tâches

Pour maintenir à jour la base des signatures de l'antivirus, il est nécessaire d'automatiser cette tâche avec Cron. Télécharger ce dernier dans les gestionnaires de paquets. Puis le configurer dans Services puis SquidGuard Proxy Filter...

V. Notes :

voir : https://computerz.solutions/pfsense-2-3-faire-nat-dune-connexion-internet-vers-lan/