RousselTMLEARNING

Article · CrowdSec : de la découverte à l'expertise

Les bouncers et le bouncer pare-feu

1. Le rôle d’un bouncer #

Appliquer les décisions.

Le principe #

Un bouncer (remediation component) applique les décisions de la LAPI. Il s'authentifie avec une clé générée par cscli. Le moteur et les bouncers peuvent être sur des machines différentes.

sudo cscli bouncers add mon-bouncer
sudo cscli bouncers list
sudo cscli bouncers delete mon-bouncer
La clé ne s'affiche qu'une fois. Conservez-la dans un gestionnaire de secrets. Utilisez une clé par bouncer, pour pouvoir en révoquer une seule.

Où bloquer ? #

Quatre niveaux de blocage : CDN, pare-feu, reverse proxy, application

BouncerNiveauÀ retenir
Pare-feuNoyauProtège tous les ports : SSH, SMTP, bases de données
TraefikProxyPlugin communautaire, voir la leçon dédiée
Nginx, OpenResty, ApacheServeur webBan, captcha et WAF AppSec
HAProxy SPOAProxyRemplace l’ancien bouncer Lua, déprécié
Cloudflare, Fastly, AWS WAFCDN, WAFBloque avant vos serveurs
Blocklist MirrorRéseauPublie une liste pour pfSense, Fortinet, MikroTik…
WordPress, PHP, MagentoApplicationSans accès root

La liste complète est sur le Hub. Le bouncer Ingress Nginx est lui aussi déprécié.

Live ou stream ? #

Comparaison des modes live et stream des bouncers

En test réel avec le plugin Traefik, une IP tout juste bannie continuait de passer en mode live tant que son statut « autorisée » restait en cache. En mode stream, elle était bloquée dès la synchronisation suivante.

L’API des décisions #

Tous les bouncers utilisent cette API. Une IP sans décision renvoie null ; sans clé valide, la réponse est 403.

curl -s -H "X-Api-Key: $KEY" "http://127.0.0.1:8080/v1/decisions?ip=203.0.113.50"
# [{"duration":"3h59m44s","origin":"crowdsec","scenario":"crowdsecurity/ssh-bf","scope":"Ip","type":"ban","value":"203.0.113.50"}]

curl -s -H "X-Api-Key: $KEY" "http://127.0.0.1:8080/v1/decisions/stream?startup=true"
# {"new": [...], "deleted": [...]}

2. Le bouncer pare-feu #

Installation, configuration et contrôle.

Installer #

sudo apt install crowdsec-firewall-bouncer-nftables
# ou : crowdsec-firewall-bouncer-iptables
sudo systemctl status crowdsec-firewall-bouncer
sudo cscli bouncers list

Sur la même machine que la LAPI, le paquet crée sa clé tout seul. Sinon, générez-la et reportez-la dans la configuration.

Configurer #

Le fichier est /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml. Placez vos réglages dans un fichier .yaml.local pour qu'ils survivent aux mises à jour.

mode: nftables
update_frequency: 10s
log_mode: file
log_dir: /var/log/
log_level: info
api_url: http://127.0.0.1:8080/
api_key: VOTRE_CLE
disable_ipv6: false
deny_action: DROP
deny_log: false
nftables:
  ipv4:
    enabled: true
    set-only: false
    table: crowdsec
    chain: crowdsec-chain
    priority: -10
  ipv6:
    enabled: true
    set-only: false
    table: crowdsec6
    chain: crowdsec6-chain
    priority: -10
OptionRôle
modenftables, iptables, ipset, pf
update_frequencyFréquence de mise à jour
deny_actionDROP (par défaut) ou REJECT
iptables_chainsChaînes à protéger. Ajoutez DOCKER-USER pour les ports de conteneurs publiés
set-onlyVous gérez les règles, le bouncer remplit seulement le set

Vérifier #

sudo cscli decisions add --ip 203.0.113.50 --duration 10m
sudo nft list table ip crowdsec
sudo cscli metrics show bouncers
sudo cscli decisions delete --ip 203.0.113.50
table ip crowdsec {
	counter crowdsec-blacklists-cscli {
		packets 3 bytes 180
	}
	set crowdsec-blacklists-cscli {
		type ipv4_addr
		flags timeout
		elements = { 203.0.113.50 timeout 9m58s expires 9m50s }
	}
}
Ne vous bannissez pas. Avant de tester, ajoutez votre adresse d'administration à une allowlist et gardez un accès console chez votre hébergeur.

Sources #

Commandes et blocage vérifiés sur CrowdSec 1.8.2 et le bouncer pare-feu 0.0.38 en mode nftables.

📄 Les bouncers CrowdSec : principes et bouncer pare-feu →

Mon suivi

  • ⏱ Durée estimée : ≈ 9 min

Connectez-vous pour suivre votre progression et prendre des notes. Se connecter

💬 Poser une question

Articles recommandés

CrowdSec : comprendre le pare-feu collaboratif

Ce qu'est CrowdSec, comment il détecte et bloque les attaques : Security Engine, parsers, scénari...

Bouncers CrowdSec : Cloudflare, équipements réseau, Kubernetes et bouncer sur mesure

Bloquer au CDN avec Cloudflare Workers, alimenter pfSense ou MikroTik avec Blocklist Mirror, prot...

Protéger Traefik avec CrowdSec : le plugin bouncer

Mettre en place le bouncer CrowdSec dans Traefik : plugin, middleware, modes stream et live, IP r...

Bouncers CrowdSec pour Nginx, Apache et HAProxy

Mettre en place les bouncers CrowdSec pour Nginx, OpenResty, Apache et HAProxy SPOA : configurati...

Réseau sous Linux : configuration, diagnostic, pare-feu et SSH

Configurer et dépanner le réseau Linux : ip, ss, netplan et NetworkManager, DNS, diagnostic par c...

Les plugins Traefik : l'exemple de CrowdSec pour bloquer les attaques

Étendre Traefik avec des plugins (catalogue officiel, interpréteur Yaegi), puis protéger ses appl...

Observabilité de CrowdSec : IP bannies, attaques bloquées, Prometheus et Grafana

Suivre CrowdSec : cscli metrics, IP bannies, attaques détectées, volume bloqué par les bouncers, ...

Installer et configurer CrowdSec : paquets, Docker, acquisition

Installer CrowdSec avec les paquets ou Docker, comprendre ses fichiers, déclarer les logs à lire,...

CrowdSec en production : bonnes pratiques

Les réflexes pour exploiter CrowdSec en production : LAPI, clés, faux positifs, base de données, ...

Soutenir

♥ SOUTENIR

Soutenez RousselTM Learning

Les formations, articles, TP et attestations restent gratuits et sans publicité intrusive. Une contribution libre, du montant de votre choix, finance l’hébergement, les environnements de TP et l’écriture de nouveaux contenus.

Contribuer avec PayPal Montant libre · carte bancaire ou compte PayPalEn savoir plus
QR code PayPal
Ou scannez ce QR code avec votre téléphone

Merci, chaque contribution compte !