CrowdSec

Mis à jour le jeudi 30 mai 2024 par johackim

CrowdSec est un Pare-feu communautaire open-source pour se protéger des attaques informatiques.

Il analyse le comportement des visiteurs via les logs et répond de manière adaptée :

  • Bloquer l'adresse IP
  • Ajouter un captcha
  • Ajouter un code HTTP 403
  • ect...

Les adresses IP agressives sont envoyées à CrowdSec pour être partagés entre tous les utilisateurs afin d'améliorer la sécurité de chacun.

Installation

Pour l'installer sur Ubuntu ou Debian :

curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | sudo bash
sudo apt install -y crowdsec

Pour l'installer sur Arch Linux :

yay -S --noconfirm crowdsec-bin

Pour les autres systèmes, voir la documentation.

Utilisation classique

CrowdSec a plusieurs composants :

  • Parser : Analyse les logs pour les transformer en événements.
  • Scenario : Analyse les événements pour les transformer en décisions.
  • Decision : Action à effectuer suite à un événement.
  • Bouncer : Outil pour appliquer les décisions.
  • Collection : Ensemble de parsers, scenarios et bouncers.

Pour démarrer CrowdSec, il faut lancer le service :

sudo systemctl start crowdsec

Pour bloquer les adresses IP, il faut installer le bouncer iptables (ou nftables) :

apt install -y crowdsec-firewall-bouncer-iptables # Ubuntu/Debian
# ou
yay -S --noconfirm crowdsec-firewall-bouncer-iptables # Arch Linux
# Démarrer le service
sudo systemctl start crowdsec-firewall-bouncer

Pour bannir une adresse IP :

cscli decisions add -t ban -i <IP>

Il n'est pas possible de bannir une IP définitivement, mais vous pouvez mettre une durée de +100ans avec le paramètre -d 999999h 😅.

Pour inspecter une attaque :

cscli alerts inspect -d <id>

Et si vous souhaitez relier votre serveur à la Console de CrowdSec (facultatif) :

Cela vous permettra d'ajouter des blocklists facilement.

Autrement, vous pouvez toujours exécuter une commande comme celle-ci :

# https://github.com/firehol/blocklist-ipsets/
while read -r ip; do cscli decisions add -t ban -i $ip; done < blocklist.txt

Et si vous souhaitez whitelister des IPs (ex: les IPs de Github), éditez le fichier /etc/crowdsec/parsers/s02-enrich/whitelists.yaml et relancez le service crowdsec.

Pour avoir un visuel de l'état de crowdsec :

cscli metrics

Si vous rencontrez un faux positif, vous pouvez identifier la raison du bannissement avec cscli alerts inspect -d <id> et désactiver le ban avec cscli decisions remove --id <id> ou le scénario en question avec cscli scenarios remove <scenario>.

Exemples :

cscli scenarios remove --force crowdsecurity/http-probing
cscli scenarios remove --force crowdsecurity/http-crawl-non_statics

Utilisation avec Traefik

Pour utiliser CrowdSec avec Traefik, j'utilise ces 2 stacks docker :

Une fois installé, j'ajoute la configuration suivante dans le fichier /etc/crowdsec/acquis.yaml à l'intérieur du conteneur Crowdsec :

filenames:
- /var/log/traefik/access.log
labels:
type: traefik

Ensuite, je rentre la commande suivante à l'intérieur du conteneur CrowdSec :

cscli bouncers add traefik-bouncer

Et je redémarre la stack docker avec la variable d'environnement CROWDSEC_BOUNCER_API_KEY qui contient la clé d'api qui s'affiche en sortie de la commande précédente.

Chaque service relié à Traefik sera protégé par CrowdSec.

Si vous exécutez une commande comme dirsearch -u https://example.com sur un de vos sites internet, votre IP sera automatiquement banni pendant 4h.


Références :