← Retour aux tutoriels

Linux — fail2ban et CrowdSec : bannissement et renseignement collaboratif

Mise en place de fail2ban et CrowdSec pour la protection des services exposés : jails SSH et web, bouncers, scénarios et listes de blocage collaboratives.

Déploiement de fail2ban et CrowdSec pour bannir les sources malveillantes sur les services exposés, en local et via renseignement collaboratif.

Contexte

fail2ban bannit les IP sur la base de motifs de logs et de seuils, via des règles de pare-feu locales. CrowdSec ajoute une couche de détection comportementale et une base de réputation mutualisée, avec des bouncers appliquant le blocage au niveau pare-feu ou reverse proxy. Les deux peuvent coexister, fail2ban sur les services historiques et CrowdSec sur le trafic web et la corrélation.

Détection

État des jails fail2ban et IP actuellement bannies :

fail2ban-client status
fail2ban-client status sshd

Décisions et alertes CrowdSec en cours, et métriques d’acquisition :

cscli decisions list
cscli alerts list --since 24h
cscli metrics

Vérification des scénarios actifs et de la connexion à la console collaborative :

cscli scenarios list
cscli capi status

Durcissement

Jail fail2ban SSH avec bannissement progressif (/etc/fail2ban/jail.d/sshd.local) :

[sshd]
enabled  = true
backend  = systemd
maxretry = 3
findtime = 600
bantime  = 3600
bantime.increment = true
bantime.factor = 2
bantime.maxtime = 1w
ignoreip = 127.0.0.1/8 192.0.2.0/24

Jail web pour les 401/403 répétés sur le reverse proxy :

[nginx-auth]
enabled  = true
port     = http,https
filter   = nginx-http-auth
logpath  = /var/log/nginx/error.log
maxretry = 5
findtime = 300
bantime  = 7200
fail2ban-client reload

Installation des collections CrowdSec adaptées aux services exposés et du bouncer pare-feu :

cscli collections install crowdsecurity/sshd crowdsecurity/nginx crowdsecurity/base-http-scenarios
systemctl reload crowdsec
cscli bouncers add fw-bouncer
apt-get install -y crowdsec-firewall-bouncer-nftables

Le bouncer applique les décisions au niveau nftables ; le jeu crowdsec-blacklists est consulté en amont du trafic. Éviter le double bannissement de la même source par fail2ban et CrowdSec sur le même service afin de ne pas dédupliquer inutilement les règles de pare-feu.

Vérification

Test du bannissement fail2ban par simulation de log et inspection de la règle de pare-feu :

fail2ban-client set sshd banip 192.0.2.66
fail2ban-client status sshd | grep -A2 'Banned IP'
nft list ruleset | grep -i 192.0.2.66
fail2ban-client set sshd unbanip 192.0.2.66

Test d’une décision manuelle CrowdSec et confirmation de son application par le bouncer :

cscli decisions add --ip 198.51.100.20 --duration 5m --reason "test"
cscli decisions list --ip 198.51.100.20
nft list ruleset | grep -i 198.51.100.20
cscli decisions delete --ip 198.51.100.20

La présence de l’IP dans le ruleset nftables confirme la chaîne complète détection → décision → application.

Vous avez un projet sur ces sujets ?

Nous contacter →