Fail2Ban + CrowdSec : La solution ultime de prévention des intrusions Linux (2026)
Combinez Fail2Ban et CrowdSec pour une défense ultime de vos serveurs Linux en 2026. Bloquez les attaques par force brute, partagez des renseignements sur les menaces et renforcez la sécurité de vos services SSH, Nginx et Web contre les attaquants du monde réel.
Votre serveur Linux est constamment attaqué. Chaque machine connectée à Internet est la cible de scanners automatisés, de bots de force brute et de logiciels de bourrage d'identifiants quelques minutes seulement après sa mise en ligne. En 2026, une seule couche de défense ne suffit plus. La solution idéale consiste à combiner Fail2Ban , le système de prévention des intrusions local éprouvé, avec CrowdSec , la plateforme moderne et collaborative de veille sur les menaces qui bloque les adresses IP avant même qu'elles n'atteignent vos services.
Dans ce guide, nous allons déployer les deux outils sur un serveur Linux, les configurer pour protéger SSH, Nginx et les applications web, et créer une configuration de défense en profondeur qui bloque les attaquants à plusieurs niveaux.
Comprendre l'architecture de défense

Avant de nous plonger dans la configuration, comprenons ce que fait chaque outil et pourquoi vous avez besoin des deux :
- Fail2Ban : Surveille les fichiers journaux locaux, détecte les schémas d'attaque via des expressions régulières et bloque les adresses IP à l'aide d'iptables/firewalld. Réactif : les blocages sont effectués a posteriori. Idéal pour une analyse contextuelle locale.
- CrowdSec : Analyse les journaux en temps réel grâce à des scénarios comportementaux, partage les informations sur les menaces avec une communauté mondiale de plus de 500 000 serveurs et peut bloquer les adresses IP de manière proactive en fonction de la réputation partagée au sein de la communauté. Une approche réactive et proactive.
Ensemble : Fail2Ban gère les bannissements locaux rapides avec un contrôle précis, tandis que CrowdSec ajoute des renseignements sur les menaces alimentés par la communauté et une analyse comportementale plus sophistiquée.
Partie 1 : Installation et configuration de Fail2Ban
Installation
# RHEL/AlmaLinux/Rocky (EPEL required)
sudo dnf install epel-release -y
sudo dnf install fail2ban fail2ban-systemd -y
# Ubuntu/Debian
sudo apt update && sudo apt install fail2ban -y
# Enable and start
sudo systemctl enable --now fail2ban
# Verify
sudo fail2ban-client statusConfiguration de base
Fail2Ban utilise une architecture à configuration divisée : ne modifiez jamais directement jail.conf ; créez un jail.local qui le remplace.
sudo tee /etc/fail2ban/jail.local << 'EOF'
[DEFAULT]
# Ban for 1 hour
bantime = 3600
# Find attacks within 10 minutes
findtime = 600
# Allow 5 failures before ban
maxretry = 5
# Don't ban these IPs (your home IP, monitoring servers)
ignoreip = 127.0.0.1/8 ::1 192.168.0.0/16 10.0.0.0/8
# Use systemd backend (modern Linux)
backend = systemd
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
maxretry = 3
bantime = 7200
[nginx-http-auth]
enabled = true
port = http,https
logpath = /var/log/nginx/error.log
maxretry = 5
[nginx-limit-req]
enabled = true
port = http,https
logpath = /var/log/nginx/error.log
maxretry = 10
[nginx-botsearch]
enabled = true
port = http,https
logpath = /var/log/nginx/access.log
maxretry = 2
[postfix-sasl]
enabled = true
port = smtp,465,submission,imap,imaps,pop3,pop3s
logpath = %(postfix_log)s
maxretry = 3
EOFPrison personnalisée pour WordPress
Si vous utilisez WordPress, protégez la page de connexion avec un filtre personnalisé :
# Create WordPress filter
sudo tee /etc/fail2ban/filter.d/wordpress.conf << 'EOF'
[Definition]
failregex = ^<HOST> .* "POST /wp-login.php
^<HOST> .* "POST /xmlrpc.php
ignoreregex =
EOF
# Add to jail.local
sudo tee -a /etc/fail2ban/jail.local << 'EOF'
[wordpress]
enabled = true
filter = wordpress
logpath = /var/log/nginx/access.log
port = http,https
maxretry = 5
bantime = 86400
findtime = 3600
EOF
sudo systemctl restart fail2banCommandes de gestion Fail2Ban
# Check status of all jails
sudo fail2ban-client status
# Check specific jail
sudo fail2ban-client status sshd
# Manually ban an IP
sudo fail2ban-client set sshd banip 203.0.113.42
# Unban an IP
sudo fail2ban-client set sshd unbanip 203.0.113.42
# Test a filter against a log file
sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf
# View current bans
sudo ipset list fail2ban-sshd 2>/dev/null || sudo iptables -n -L f2b-sshdPartie 2 : Installation et configuration de CrowdSec
Installation
# Add CrowdSec repository
curl -s https://install.crowdsec.net | sudo sh
# Install CrowdSec agent
sudo dnf install crowdsec -y # RHEL/AlmaLinux
# OR
sudo apt install crowdsec -y # Debian/Ubuntu
# Install the Firewall Bouncer (blocks IPs at the firewall level)
sudo dnf install crowdsec-firewall-bouncer-iptables -y
# OR for nftables:
sudo dnf install crowdsec-firewall-bouncer-nftables -y
# Enable services
sudo systemctl enable --now crowdsec
sudo systemctl enable --now crowdsec-firewall-bouncerInstallation des scénarios de détection
CrowdSec utilise des « collections » — des ensembles d'analyseurs et de scénarios pour des services spécifiques. Installez ce dont vous avez besoin :
# List available collections
sudo cscli collections list
# Install common collections
sudo cscli collections install crowdsecurity/linux # SSH, syslog
sudo cscli collections install crowdsecurity/nginx # Nginx logs
sudo cscli collections install crowdsecurity/wordpress # WordPress attacks
sudo cscli collections install crowdsecurity/postfix # Mail server
# For Apache
sudo cscli collections install crowdsecurity/apache2
# After installing collections, reload CrowdSec
sudo systemctl reload crowdsecConfigurer les sources de journaux
CrowdSec doit savoir où se trouvent vos fichiers journaux. Consultez d'abord les résultats de la détection automatique :
# Check what CrowdSec detected automatically
sudo cscli metrics
# View current data sources
cat /etc/crowdsec/acquis.yaml
# If Nginx logs aren't detected, add them manually
sudo tee -a /etc/crowdsec/acquis.yaml << 'EOF'
---
filenames:
- /var/log/nginx/access.log
- /var/log/nginx/error.log
labels:
type: nginx
EOF
sudo systemctl restart crowdsecGestion de la sécurité des foules
# View current decisions (active bans)
sudo cscli decisions list
# View alerts (detected attacks)
sudo cscli alerts list
# Manually ban an IP for 24h
sudo cscli decisions add --ip 203.0.113.42 --duration 24h --reason "Manual ban"
# Remove a ban
sudo cscli decisions delete --ip 203.0.113.42
# Check bouncer status
sudo cscli bouncers list
# View metrics (detections per scenario)
sudo cscli metrics
# Check hub for updates
sudo cscli hub update
sudo cscli hub upgradeIntégration de Fail2Ban et CrowdSec
La stratégie gagnante : faire en sorte que les décisions de CrowdSec déclenchent également des bannissements Fail2Ban, créant ainsi des niveaux de protection redondants. Autre possibilité : utiliser les décisions de CrowdSec pour alimenter la liste de bannissement de Fail2Ban.
# Option A: Use CrowdSec as a Fail2Ban "action" source
# This is advanced — most users should rely on the firewall bouncer
# Option B: Just run both independently (recommended)
# - Fail2Ban handles fast local bans from YOUR logs
# - CrowdSec handles community intelligence + behavioral analysis
# Both write to iptables/nftables
# Verify both are active
sudo fail2ban-client status sshd | grep "Banned IP list"
sudo cscli decisions list | grep "ban"Notifications et alertes
Soyez averti en cas d'attaque détectée. CrowdSec dispose d'un système de notification intégré :
# Install Slack notification plugin
sudo cscli notifications install slack
# Configure Slack webhook
sudo tee /etc/crowdsec/notifications/slack.yaml << 'EOF'
type: slack
name: slack_default
log_level: info
format: |
{{range . -}}
🚨 CrowdSec Alert: {{.Scenario}}
IP: {{.Source.IP}} ({{.Source.Country}})
Duration: {{.Decisions | len}} decision(s)
{{end}}
webhook_url: "https://hooks.slack.com/services/YOUR/WEBHOOK/URL"
EOF
# Link notification to alerts
sudo tee -a /etc/crowdsec/profiles.yaml << 'EOF'
notifications:
- slack_default
EOF
sudo systemctl restart crowdsecListe blanche et réglage
Évitez les faux positifs : ajoutez à la liste blanche vos systèmes de surveillance, Uptime Kuma et les adresses IP de confiance :
# Whitelist specific IPs from CrowdSec decisions
sudo cscli decisions add --ip YOUR_MONITORING_IP --duration 0 --reason "monitoring" --type whitelist
# Or add to CrowdSec whitelist config
sudo tee /etc/crowdsec/parsers/s02-enrich/whitelist.yaml << 'EOF'
name: crowdsecurity/whitelists
description: "Whitelist trusted sources"
whitelist:
reason: "trusted IPs"
ip:
- "192.168.1.0/24"
- "10.0.0.0/8"
- "YOUR_MONITORING_SERVER_IP"
EOF
sudo systemctl reload crowdsec
# For Fail2Ban, add to ignoreip in jail.local:
# ignoreip = 127.0.0.1/8 192.168.0.0/16 YOUR_MONITORING_IPSurveillance de votre posture de sécurité
Créez un script de synthèse quotidienne rapide pour examiner vos statistiques de sécurité :
#!/bin/bash
# security-report.sh — Run daily: 0 8 * * * /opt/scripts/security-report.sh
echo "=== Security Report $(date +%Y-%m-%d) ==="
echo ""
echo "--- Fail2Ban Status ---"
fail2ban-client status | grep -E "Jail list|Number"
echo ""
echo "--- CrowdSec Decisions (last 24h) ---"
cscli decisions list --limit 20
echo ""
echo "--- Top Attacking IPs (SSH) ---"
grep "Invalid user|Failed password" /var/log/auth.log | grep -oP '(d{1,3}.){3}d{1,3}' | sort | uniq -c | sort -rn | head -10
echo ""
echo "--- Active CrowdSec Bans ---"
cscli decisions list | wc -l
echo " total active decisions"Conclusion
L'utilisation conjointe de Fail2Ban et CrowdSec vous offre un système de prévention des intrusions robuste et multicouche, capable de gérer les schémas d'attaque locaux et les renseignements sur les menaces globales. Fail2Ban demeure la solution fiable pour un bannissement rapide et basé sur des règles, tandis que CrowdSec y ajoute l'analyse comportementale et le blocage proactif collaboratif.
En 2026, face à des volumes d'attaques atteignant des niveaux records, la défense en profondeur est indispensable. Déployez cette configuration sur chaque serveur Linux exposé à Internet que vous gérez. Vous vous féliciterez plus tard de cette initiative en consultant les journaux et en découvrant des milliers d'attaques bloquées qui n'ont jamais eu la moindre chance.