Vue normale

Il y a de nouveaux articles disponibles, cliquez pour rafraîchir la page.
À partir d’avant-hierFlux principal

Comment mettre en place une installation multiserveur de CrowdSec ?

25 février 2024 à 17:00

I. Présentation

Dans ce tutoriel, nous allons voir comment effectuer une installation de CrowdSec sur plusieurs machines afin de répliquer les alertes et les décisions entre les différentes instances. Ainsi, lorsqu'un serveur banni une adresse IP, elle est également bannie sur les autres instances CrowdSec synchronisées.

Pour effectuer une installation multiserveur de CrowdSec, toutes les machines doivent avoir une instance CrowdSec installée en local. Ensuite, nous viendrons ajuster la configuration de chaque instance, notamment au niveau de LAPI. Si vous avez plusieurs serveurs exposés sur Internet (un cluster de serveurs Web, par exemple), vous pouvez déployer cette configuration pour que les adresses IP malveillantes soient bannies sur tous les nœuds.

Pour les échanges d'informations, CrowdSec s'appuie sur deux API :

  • Local API ou LAPI : ceci correspond à l'hôte local lorsque l'instance CrowdSec fonctionne de façon autonome
  • Central API ou CAPI : ceci correspond aux instances CrowdSec dans le Cloud, notamment sollicitées pour récupérer les listes d'adresses IP malveillantes communautaires et pour transmettre les signaux à la console CrowdSec.

Ce contenu est disponible au format vidéo :

II. Architecture avec un pare-feu PfSense et des serveurs virtuels

Pour le déploiement, plusieurs scénarios sont envisageables. Vous pouvez utiliser une machine CrowdSec destinée à centraliser toutes les décisions et toutes les alertes, et sur laquelle les autres machines viendront se synchroniser. Il est d'ailleurs possible de s'appuyer sur une base de données, pour des questions de performance.

Aujourd'hui, nous allons déployer un scénario basé sur deux machines :

  • Un pare-feu PfSense, où CrowdSec sera installé et cet hôte sera utilisé pour héberger le rôle de "Local API" pour les trois machines
  • Un serveur Windows Server, où CrowdSec sera installé avec le bouncer windows-firewall

Ici, il n'y a qu'un seul serveur exposé sur Internet, représenté par un serveur Web sous Windows Server, mais il pourrait tout à fait en avoir d'autres (y compris sous Linux). Je vais vous préciser les étapes à effectuer sur les noeuds que l'on pourrait appeler les "clients LAPI".

CrowdSec multi-server PfSense Linux Windows Server

Remarque : dans la vidéo, le scénario est basé sur trois machines, avec un second serveur en DMZ, sous Linux, lui aussi serveur Web et exposé sur Internet également. Référez-vous à la vidéo si nécessaire, selon vos besoins.

III. Point de départ

Ce tutoriel n'abordera pas l'installation de CrowdSec sur les différents hôtes, ni même l'installation des systèmes d'exploitation. Pour cela, référez-vous aux articles suivants :

Quand votre environnement est prêt, vous pouvez passer à la phase de configuration.

IV. Configurer le serveur LAPI central pour CrowdSec

Sur le pare-feu PfSense, nous devons configurer CrowdSec pour qu'il soit en écoute sur une adresse IP du pare-feu, afin de ne pas être accessible uniquement en local. Sans cela, les autres hôtes ne pourront pas venir s'inscrire sur ce serveur LAPI car par défaut l'hôte LAPI est configuré sur l'adresse IP de boucle locale : 127.0.0.1.

Connectez-vous à l'interface d'administration de PfSense, cliquez sur "Services" puis "CrowdSec". Ici, descendez jusqu'à trouver l'option "LAPI host" et remplacez "127.0.0.1" par le nom d'hôte (DNS) de votre pare-feu PfSense, ou l'adresse IP de l'une de ses interfaces. Dans cet exemple, je précise "192.168.200.1" car il s'agit de l'adresse IP de l'interface "DMZ" de mon pare-feu et le serveur Web se situe dans cette zone réseau.

CrowdSec - PfSense en tant que serveur LAPI

Quand c'est fait, sauvegardez la configuration avec le bouton prévu à cet effet.

Il est à noter que cette modification, bien qu'elle soit effectuée via l'interface web de PfSense, pourrait être effectuée en ligne de commande en modifiant le fichier suivant :

/usr/local/etc/crowdsec/config.yaml

D'ailleurs, ce que nous venons d'effectuer en mode web a permis de modifier le fichier de configuration.

Passez à l'étape suivante.

V. Inscrire et autoriser les hôtes sur le serveur LAPI

Le serveur Web sous Windows Server va devoir s'inscrire sur le serveur LAPI CrowdSec, c'est-à-dire notre pare-feu PfSense. Ensuite, nous devrons approuver la demande d'inscription. Cette étape est à effectuer sur chaque serveur qui doit utiliser le serveur LAPI central.

A. Désactiver l'interface LAPI de CrowdSec

À partir du serveur Windows Server, où CrowdSec est installé, vous devez commencer par modifier le fichier de configuration "config.yaml" situé à cet emplacement :

C:\ProgramData\CrowdSec\config\config.yaml

Dans ce fichier, vous devez ajouter la ligne "enable: false" sous "server:", et commenter la ligne "listen_uri" afin de désactiver la LAPI de CrowdSec. En effet, ce n'est plus utile sur ce serveur puisque nous allons solliciter la LAPI de l'instance CrowdSec installée sur le pare-feu PfSense.

Attention à la syntaxe, notamment aux espaces, car YAML est très pointilleux là-dessus.

Windows Server - CrowdSec - Déclarer serveur LAPI distant

Une fois que c'est fait, sauvegardez le fichier.

B. Inscrire les hôtes CrowdSec sur le serveur LAPI

Toujours sur ce même serveur, ouvrez une console PowerShell ou une Invite de commande afin d'inscrire l'hôte sur le serveur LAPI. Exécutez la commande suivante, en adaptant l'adresse IP (et éventuellement le port, si vous l'avez modifié).

cscli lapi register -u  http://192.168.200.1:8080

Si l'on ne précise pas de nom, comme c'est le cas avec la commande ci-dessus, un ID aléatoire sera généré. Si vous souhaitez préciser un nom, afin que ce soit plus parlant, utilisez la commande de cette façon :

cscli lapi register -u  http://192.168.200.1:8080 --machine <nom de la machine>

Vous devez obtenir un résultat semblable à celui-ci :

Windows Server - CrowdSec - Exemple cscli lapi register

Pour prendre en compte l'ensemble des modifications que nous venons d'effectuer, redémarrez le service CrowdSec :

Restart-Service crowdsec

Passez à la suite.

C. Approuver les hôtes CrowdSec

Basculez sur le serveur LAPI, c'est-à-dire sur le pare-feu, afin d'approuver la machine que l'on vient d'inscrire. Connectez-vous à la console, via SSH, par exemple.

Exécutez la commande suivante pour lister les machines :

cscli machines list

Ceci va permettre d'obtenir une liste avec deux machines :

  • La machine locale, ici "pfsense"
  • La machine distante que l'on vient d'inscrire, identifier par le nom "3f8ba55c46b54537aadaac7c5b7717a44wNuYECMrmksQ9Mm" (car je n'ai pas précisé de nom ; j'ignorais l'option permettant de nommer la machine à ce moment-là)

Désormais, il faut valider / approuver cette nouvelle machine en attente. Pour cela, exécutez la commande suivante :

cscli machines validate <nom de la machine>
cscli machines validate 3f8ba55c46b54537aadaac7c5b7717a44wNuYECMrmksQ9Mm

En principe, vous devriez obtenir un message de confirmation, comme celui-ci :

CrowdSec - cscli machines list and validate

Passez à la suite.

VI. Déclarer les nouveaux bouncers

A. Ajouter un bouncer et obtenir une clé d'API

Toujours sur le serveur LAPI, à savoir PfSense, nous allons devoir déclarer la machine distante comme étant un bouncer. Ceci signifie qu'elle aura la permission de venir déclarer de nouvelles alertes et décisions pour bloquer des adresses IP malveillantes.

La commande suivante permet de déclarer un bouncer nommé "SRV-WS2022". Vous pouvez reprendre le nom d'hôte de votre machine.

cscli bouncers add <nom de la machine>
cscli bouncers add SRV-WS2022

Comme le montre l'image ci-dessous, nous obtenons une clé d'API pour cet hôte :

CrowdSec - Déclarer un hôte en tant que bouncer

Cette clé d'API va lui permettre de s'authentifier sur le serveur LAPI en tant que bouncer.

B. Configurer le bouncer sur l'hôte

Retournez sur le serveur distant. Pour ma part, c'est le serveur Web sous Windows Server. L'objectif va être de configurer le bouncer Windows Firewall installé sur cette machine pour qu'il déclare les décisions sur le serveur LAPI central, plutôt qu'en local. Ceci implique d'installer le bouncer sur le serveur, au préalable.

Éditez le fichier suivant :

C:\ProgramData\CrowdSec\config\bouncers\cs-windows-firewall-bouncer.yaml

Dans ce fichier, vous devez modifier deux options :

  • api_endpoint
  • api_key

Elles sont mises en évidence sur l'image ci-dessous.

Pour l'option "api_endpoint", vous devez indiquer l'adresse IP (ou le nom d'hôte) ainsi que le port de votre serveur LAPI central (soit le PfSense).

Pour l'option "api_key", vous devez indiquer la clé d'API obtenue précédemment via la commande "cscli bouncers add".

Ce qui donne :

Quand c'est fait, redémarrez le service Windows correspondant au bouncer Firewall :

Restart-Service cs-windows-firewall-bouncer

Du côté de PfSense, si nous regardons l'onglet "Bouncers" présent sur la page de statut de CrowdSec, nous pouvons voir deux bouncers valides ! Il y a le bouncer présent en local sur PfSense et notre hôte distant sous Windows Server.

CrowdSec - Multi-serveurs avec PfSense

La configuration est prête, vous allez pouvoir la tester...

VII. Tester la configuration

Pour tester cette configuration, nous allons devoir simuler un comportement malveillant. Dans le cas présent, mon serveur Web Windows Server est accessible grâce à une règle de NAT (car le reverse proxy n'est pas configuré sur le pare-feu) créée sur le pare-feu PfSense.

À l'aide d'une machine distante, je vais accéder à ce site Web qui est celui par défaut de IIS. Il s'agit d'un Lab et l'interface WAN de mon PfSense a l'adresse IP "192.168.1.60", donc j'effectue un scan Web sur cette adresse IP à l'aide de l'outil Nikto.

Ci-dessous, l'action est effectuée à partir d'une machine Kali Linux. Ce scan effectué par Nikto est bruyant et devrait alerter rapidement CrowdSec.

En effet, nous pouvons constater qu'il y a bien eu une décision prise par CrowdSec : bloquer l'adresse IP correspondante à mon hôte Kali Linux. Le résultat ci-dessous est issu de la machine Windows Server.

CrowdSec multi-server - Adresse IP bannie

Nous pouvons voir qu'il y a eu plusieurs alertes générées :

CrowdSec - Lister les alertes LAPI

Mais, comment savoir si c'est le pare-feu ou le serveur web qui a pris la décision de bloquer cette adresse IP ?

Pour cela, nous pouvons regarder les détails de l'alerte. Par exemple, l'alerte avec l'ID numéro 4 correspondant à du "http-xss-probbing". Pour cela, nous devons exécuter la commande suivante :

cscli alerts inspect 4

Dans les détails, nous pouvons voir la ligne "Machine :" accompagnée par un nom d'hôte. Ici, j'obtiens un ID de machine (souvenez-vous, la machine n'a pas été nommée lors de son inscription initiale). Cet identifiant correspond bien à mon serveur Web, donc c'est ce serveur qui a bloqué l'adresse IP.

Nous pouvons le vérifier en faisant la correspondance entre cet ID et celui visible dans la liste des machines :

cscli machines list

Voici le résultat en image :

CrowdSec - Inspecter une alerte et identifier hôte source

Remarque : nous pouvons également ajouter l'option "-m" aux commandes "cscli alerts list" et "cscli decisions list" pour ajouter une nouvelle colonne avec l'ID de la machine.

Du côté de l'interface Web de PfSense, cette adresse IP est également bannie ! La décision est bien synchronisée entre tous les hôtes. Ainsi, les deux machines vont bloquer tous les flux en provenance de cette adresse IP malveillante.

CrowdSec - Synchronisation des décisions

VIII. Conclusion

Grâce à ce tutoriel basé sur uniquement deux hôtes, nous voyons bien le potentiel et l'intérêt de CrowdSec dans une architecture multiserveur, notamment lorsqu'il y a plusieurs serveurs exposés sur Internet. Le fait de coupler les serveurs avec le pare-feu permet de bannir les adresses IP malveillantes directement en entrée du réseau, ce qui est intéressant pour protéger notre infrastructure.

Sachez que malgré la présence d'une authentification, tous les flux échangés entre les hôtes sont effectués en clair puisque le protocole HTTP est utilisé. Il s'agit de flux interne, entre le serveur en DMZ et le pare-feu, donc c'est acceptable. Toutefois, si vous envisagez d'utiliser un serveur LAPI externe ou qui implique que des flux vont transiter sur Internet, vous devez faire évoluer la configuration pour basculer les connexions en HTTPS.

The post Comment mettre en place une installation multiserveur de CrowdSec ? first appeared on IT-Connect.

Installer CrowdSec sur un pare-feu PfSense pour protéger son réseau

18 février 2024 à 17:00

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 :

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.

PfSense - Menu Diagnostique commandes

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é.

PfSense - Activer accès SSH

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
install crowdsec pfsense

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".

PfSense - Menu Services 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...

Configurer CrowdSec sur PfSense - Etape 1

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.

Configurer CrowdSec sur PfSense - Etape 2

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.

Configurer CrowdSec sur PfSense - Etape 3

Cliquez sur le bouton "Save" pour valider la configuration et démarrer CrowdSec.

Désormais, dans le menu "Status", cliquez sur "CrowdSec Status".

Configurer CrowdSec sur PfSense - Etape 4

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.

PfSense - CrowdSec Metrics

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.

Scan de port avec nmap - Exemple

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.

PfSense - Adresse IP bannie par CrowdSec

L'information est bien entendu visible à partir de la ligne de commande :

cscli decisions list 
PfSense - Exemple de cscli

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.

The post Installer CrowdSec sur un pare-feu PfSense pour protéger son réseau first appeared on IT-Connect.

❌
❌