Installer CrowdSec sur un pare-feu PfSense pour protéger son réseau
Sommaire
I. Présentation
Dans ce tutoriel, nous allons voir comment installer CrowdSec sur un pare-feu PfSense dans le but de bloquer les adresses IP malveillantes, notamment à l'origine d'attaques brute force, de scans de port et de recherche de vulnérabilités web (HTTP).
CrowdSec, que nous avons déjà abordé au sein de plusieurs articles, est une solution gratuite et open source capable de détecter et bloquer les attaques à destination des machines, grâce à la prise en charge de nombreux scénarios de détection. CrowdSec prend en charge Linux, Windows Server, FreeBSD, et il peut être mis en place sur certains firewalls comme PfSense et OPNSense.
Lorsqu'il est en place sur un firewall PfSense, CrowdSec va analyser plusieurs journaux du système pour identifier les comportements malveillants et bloquer les adresses IP associées. En complément, les adresses IP présentes dans les listes communautaires de CrowdSec sont également bloquées.
Il est important de préciser que si vous utilisez HAProxy en tant que reverse proxy sur un pare-feu PfSense, vous pouvez également configurer CrowdSec pour qu'il surveille les logs de HAProxy pour détecter les attaques Web. C'est très intéressant, et ce scénario sera probablement détaillé dans un article complémentaire.
Pour vous aider à mettre en place ce tutoriel, voici quelques ressources supplémentaires :
- Créer un lab virtuel avec VirtualBox et PfSense
- Créer un lab virtuel avec VMware Workstation et PfSense
- Configurer un reverse proxy HAProxy sur PfSense
- Documentation officielle - CrowdSec
II. Prérequis pour suivre ce tutoriel
Pour suivre ce tutoriel, vous avez besoin d'un pare-feu PfSense déjà en place car nous n'allons pas voir l'installation. Pour ceux qui le souhaitent, vous pouvez utiliser le Lab basé sur VMware Workstation comme point de départ, si vous désirez vous entrainer. C'est ce que je fais pour ma part.
En complément, une machine virtuelle sous Kali Linux sera utilisée pour simuler une attaque (en se positionnant côté WAN). Mais, vous pouvez directement utiliser votre hôte physique sans problème (sous Windows, vous pouvez installer l'outil Zenmap, par exemple).
III. Installer CrowdSec sur PfSense
A. Accéder au shell de PfSense
La première étape consiste à installer un ensemble de paquets sur le pare-feu PfSense afin de pouvoir intégrer CrowdSec. Pour exécuter des commandes shell sur PfSense, il y a trois options :
- Utiliser le mode console (via l'hyperviseur, par exemple)
- Utiliser la console distante via une connexion SSH
- Utiliser la fonction "Command Prompt" accessible via l'interface web de PfSense (dans le menu "Diagnostics").
Dans le cas présent, je pensais utiliser la fonction "Command Prompt" mais les commandes ne sont pas passées. Il est préférable de passer directement via la console.
Si vous avez besoin d'activer le SSH, cliquez sur "System" puis "Advanced". À cet endroit, il y a une section "Secure Shell" où vous pouvez activer le SSH et définir un port personnalisé.
Ensuite, vous devez vous connecter en SSH à PfSense. Vous pouvez utiliser le client OpenSSH de Windows ou Linux, ou une autre application telle que PuTTY.
Voici comment se connecter sur un pare-feu avec l'adresse IP "192.168.100.1" avec le compte "admin", où le port SSH est 9922.
ssh [email protected] -p 9922
La première fois, vous devez accepter l'empreinte en indiquant "yes". Ensuite, saisissez le mot de passe et validez. Pour accéder au shell, choisissez l'option "8".
B. Installer CrowdSec, le paquet PfSense et le bouncer Firewall
Désormais, il va falloir installer CrowdSec, son paquet pour PfSense, le bouncer Firewall et des dépendances.
Pour cela, vous devez récupérer les liens vers les dernières versions en vous référant au GitHub de CrowdSec. Autrement dit, les commandes "pkg add" ci-dessous pointent vers les versions actuelles, mais ce ne seront pas forcément les dernières lorsque vous allez suivre ce tutoriel.
Avant d'installer les paquets, nous allons définir la variable "IGNORE_OSVERSION" à "yes" pour éviter les avertissements lors de l'installation des paquets (dû à la différence entre la version du paquet et la version de FreeBSD sur laquelle est basée PfSense).
Dans la console, saisissez cette commande :
setenv IGNORE_OSVERSION yes
Puis exécutez les commandes suivantes pour télécharger et installer les paquets :
pkg add -f https://github.com/crowdsecurity/pfSense-pkg-crowdsec/releases/download/v0.1.3/abseil-20230125.3.pkg
pkg add -f https://github.com/crowdsecurity/pfSense-pkg-crowdsec/releases/download/v0.1.3/re2-20231101.pkg
pkg add -f https://github.com/crowdsecurity/pfSense-pkg-crowdsec/releases/download/v0.1.3/crowdsec-1.6.0.pkg
pkg add -f https://github.com/crowdsecurity/pfSense-pkg-crowdsec/releases/download/v0.1.3/crowdsec-firewall-bouncer-0.0.28_3.pkg
pkg add -f https://github.com/crowdsecurity/pfSense-pkg-crowdsec/releases/download/v0.1.3/pfSense-pkg-crowdsec-0.1.3.pkg
L'installation de CrowdSec est effectuée à l'emplacement suivant :
/usr/local/etc/crowdsec/
Par la suite, si vous avez besoin de redémarrer CrowdSec, utilisez cette commande (adaptez également pour l'arrêter / le démarrer) :
service crowdsec.sh restart
Avant de poursuivre, vous devez redémarrer votre pare-feu PfSense, sinon CrowdSec ne sera pas actif, et la ligne de commande "cscli" indisponible également.
Voilà, vous venez d'installer CrowdSec sur PfSense !
IV. Configurer CrowdSec sur PfSense
Sachez que tout le jeu de commandes habituel permettant de configurer et d'utiliser CrowdSec est disponible : cscli. Vous pouvez aussi faire l'essentiel de la configuration à partir de l'interface d'administration de PfSense.
À partir du menu, sous "Services", choisissez "CrowdSec".
Par défaut, et c'est plutôt appréciable, CrowdSec est préconfiguré pour être opérationnel et être capable d'analyser les journaux de PfSense. Pour en savoir plus sur les fichiers de logs parsés par CrowdSec, regardez ces deux fichiers :
/usr/local/etc/crowdsec/acquis.yaml
/usr/local/etc/crowdsec/acquis.d/pfsense.yaml
Vous devez tout de même réviser la configuration proposée...
Vous pouvez constater que la "Local API" (LAPI) est activée. Elle est utilisée par CrowdSec pour le partage d'informations entre plusieurs instances. Ici, c'est en local. Au cas où il s'agirait d'un déploiement avec plusieurs machines qui s'échangent les informations (adresses IP bloquées, par exemple), il faudrait s'intéresser à la section "Remote API". Ici, ce n'est pas nécessaire.
Descendez dans la page... Nous pouvons constater que CrowdSec est actif sur toutes les interfaces de PfSense, en entrée (flux malveillants entrants). Il est important de préciser que les règles de pare-feu créées par CrowdSec ne sont pas visibles dans la liste des règles de PfSense que l'on peut afficher en mode web, mais uniquement en ligne de commande.
Cliquez sur le bouton "Save" pour valider la configuration et démarrer CrowdSec.
Désormais, dans le menu "Status", cliquez sur "CrowdSec Status".
Ici, vous pouvez visualiser l'état général de CrowdSec, ainsi qu'obtenir la liste des bouncers, des collections, des scénarios, etc... Mais aussi lister les dernières alertes et les décisions. Pour rappel, une décision correspond au fait de bannir une adresse IP (action par défaut).
Voici la liste des collections actuellement installées :
Nous pourrions en ajouter d'autres à partir de la ligne de commande (cscli collections install). Ceci peut s'avérer utile si votre pare-feu PfSense héberge d'autres services, comme un reverse proxy HAProxy, par exemple.
Enfin, il y a la section "CrowdSec Metrics" accessible via le menu "Diagnostics" de PfSense qui donne des statistiques plus détaillées sur l'activité de CrowdSec sur notre pare-feu. Nous pouvons entre autres visualiser quels sont les fichiers de log analysés par CrowdSec et obtenir des statistiques à leur sujet.
V. Simuler un scan de ports sur PfSense
A partir de l'outil NMAP, nous allons pouvoir réaliser un scan de ports sur l'adresse IP de l'interface WAN du PfSense. Dans cet exemple, il s'agit de "192.168.1.60", mais en production, il s'agirait de votre adresse IP publique. Vous pouvez utiliser NMAP sur Linux, via WSL, ou sinon en mode graphique sous Windows avec Zenmap.
Voici la commande à exécuter pour faire un scan de port à la recherche de services fréquents :
nmap -sV 192.168.1.60
Le scan a permis de détecter que le port 80/tcp (http) était ouvert. C'est normal, car une règle de NAT redirige les flux HTTP vers un serveur Web en DMZ. Il n'a pas obtenu d'autres réponses.
Pour cause, la machine à l'origine du scan a été bannie par CrowdSec. Nous pouvons le voir dans le menu "Status" puis "CrowdSec", en accédant à l'onglet "Decisions". Cette adresse IP a été bannie à cause du scan de port, comme indiqué : pf-scan-multi_ports.
L'information est bien entendu visible à partir de la ligne de commande :
cscli decisions list
Nous pouvons constater que CrowdSec est opérationnel et réactif sur notre pare-feu PfSense ! C'est un gros plus pour la protection de notre réseau !
VI. Conclusion
Suite à la mise en place de CrowdSec sur notre pare-feu PfSense, nous sommes en mesure de détecter et bloquer les adresses IP malveillantes. Ainsi, si une machine vient frapper à la porte de votre pare-feu pour voir quels sont les services ouverts, elle sera directement bannie.
Par la suite, nous verrons comment aller plus loin dans la détection et la configuration s'il y a un reverse proxy HAProxy en place sur le pare-feu PfSense. Pour aller plus loin, nous pourrions aussi déployer CrowdSec sur les serveurs de notre infrastructure et faire en sorte pour que toutes les décisions et alertes soient synchronisées entre les hôtes, en nous appuyant sur l'instance CrowdSec déployée sur PfSense comme point central.
Bonjour Florian, merci pour ce tutos !
Très intéressant d’intégré CrowSec dans pfSense, un IPS clé en main 🙂
J’ai un HA proxy sur le mien, quand sortirez vous le prochain lab avec HA proxy / CrowdSec ?
Merci pour tout 🙂
Bonjour,
Pour le HAPROXY rien de bien compliquer, sur le pfSense taper la commande:
#cscli collections install crowdsecurity/haproxy et valider.
Vous pouvez vérifier l’ajout de la collection « base-http-scenarios » et des analysers (parsers) « haproxy-logs ».
@florian, c’est la même procédure avec OPNSense ?
Hello Guillaume,
Je n’ai pas encore pris le temps de tester… Mais la logique semble être la même : https://docs.crowdsec.net/docs/getting_started/install_crowdsec_opnsense/
bonjour,
vraiment top a quand l’intégration dans les paquets de PF…
question que je me pause, comment se met il a jour dans sa dernière version dispo ?
Salut Florian,
Super idée que cette intégration.
De mon coté pas de chance avecun netgate 3100
j’ai une erreur Exec Format error lorsquue je tente de nacer le firewall crowdsec..
J’investigue
Bonjour,
Cette erreur est normale. Ce tuto est optimisé pour les architectures AMD64.
Si vous posséder un netgate 3100, télécharger l’archive TAR correspondant à votre architecture ici :
https://github.com/crowdsecurity/pfSense-pkg-crowdsec/releases/
Dans le cas d’un netgate 3100 processeur de type ARM vous devez télécharger l’archive
freebsd-15-aarch64.tar ( ou freebsd-14-aarch64.tar) selon votre version de pfsense.
Ensuite vous pouvez déposer l’archive sur votre pfsense, faire un tar -xvf de votre archive, et installer les 5 packages (pkg add -f )
Suite à mon message ci dessus, voici le message exact :
[23.09.1-RELEASE][[email protected]]/root: service crowdsec_firewall start
eval: /usr/local/bin/cscli: Exec format error
Si cela parle a quelqu’un …..
Salut, d’abord merci pour ces explications, cependant je rencontre un problème et je ne sais pas comment le régler.
Puisses tu me donner des pistes stp ?
Globalement crowdsec s’installe bien, je rentre bien chaque paquet nécessaires en ssh depuis l’invit PowerShell.
Je teste un scan av nmap, la encore tout fonctionne, crowdsec le détecte bien dans la liste cscli décision List.
Et là le problème survient, mon pare-feu au bout d’un moment, est bloqué, je ne peux plus accéder à l’interface web de pfsense.
Je pensais que c’était une histoire de version des paquet crowdsec sur GitHub, du coup, j’ai essayé avec des version antérieur mais c’est la même chose.
Donc, depuis le serveur pfsense je fais un restore configuration et il refonctionne, mais sans crowdsec.
Qu’en penses tu, serait ce une règle qui bloque mon accès à l’interface web après l’installation ou autre chose ?
Car depuis mon serveur pfsense j’arrive malgré ce blocage, a ping correctement google.fr et mon Lan. Mais je n’arrive pas non plus, à accéder en ssh à celui-ci.
Merci pour ce tuto, je l’ai installé il y a quelques mois deja, et je me demandais si il y avais une façons de mettre a jours le package
Super Tuto encore,
On a l’impression d’être un pro à la fin :p.
Merci encore pour ce regain de sécurité plus qu’apréciable.
Patrice.
Bonjour,
Il vaudrait mieux utiliser le nouveau script automatique (pour récupérer automatiquement la dernière version stable disponible) :
# fetch https://raw.githubusercontent.com/crowdsecurity/pfSense-pkg-crowdsec/refs/heads/main/install-crowdsec.sh
# sh install-crowdsec.sh