5.8 KiB
title: Fail2Ban created: 2026-06-07 updated: 2026-06-07 type: app tags: [catalogue, networking, security, brute-force, ip-banning, python] confidence: high contested: false sources: [https://selfh.st/apps/?tag=networking, https://github.com/fail2ban/fail2ban]
🚫 Fail2Ban
Daemon de protection anti-brute-force qui surveille les logs de services (SSH, web, mail…) et bannit automatiquement les IP suspectes via iptables/nftables. Le standard historique de la sécurité périmétrique self-hosted.
| Métadonnée | Valeur |
|---|---|
| Site web | fail2ban.org |
| GitHub | fail2ban/fail2ban |
| License | GPL-2.0 |
| Langage | Python |
| Étoiles | 14 800 ⭐ |
| Dernière MAJ | 2026-05-12 |
| Catégorie | cat-networking |
Description
Fail2Ban est un framework de prévention d'intrusions écrit en Python qui lit en continu les fichiers de journalisation (syslog, auth.log, nginx, postfix, etc.) et déclenche des actions — le plus souvent un ban IP via iptables, nftables ou ufw — lorsqu'un comportement suspect est détecté. Plusieurs tentatives SSH échouées depuis la même IP ? Fail2Ban ajoute cette IP à une « jail » et la bloque pour une durée configurable (par défaut 10 minutes, récidive = durée exponentielle).
L'outil est structuré autour de filtres (regex) et de jails (politiques) : un filtre reconnaît un motif dans les logs (ex. « Failed password for »), une jail définit combien d'occurrences déclenchent un ban, sur quelle durée, et quelle action exécuter. Plus de 100 filtres sont fournis par défaut (sshd, apache, nginx, postfix, dovecot, recidive, etc.), couvrant la majorité des services courants d'un homelab.
Fail2Ban s'intègre dans une défense en profondeur : il ne remplace pas un pare-feu applicatif (WAF) ni l'authentification forte, mais il réduit drastiquement la surface d'attaque en bloquant en bordure les scans et attaques automatisées. Il est l'ancêtre et le complément local de solutions collaboratives comme app-crowdsec, qui pousse la logique plus loin avec un partage d'IOC entre instances.
Installation
Docker Compose (recommandé)
L'image officielle monte le daemon avec iptables, en network_mode: host ou via un sidecar : le plus simple est network_mode: host afin que Fail2Ban puisse manipuler la table INPUT d'iptables du système hôte.
# docker-compose.yml
services:
fail2ban:
image: crazymax/fail2ban:latest
container_name: fail2ban
restart: unless-stopped
network_mode: host
cap_add:
- NET_ADMIN
- NET_RAW
volumes:
- /var/log:/var/log:ro
- /home/fail2ban/data:/data
- ./action.d:/etc/fail2ban/action.d:ro
- ./filter.d:/etc/fail2ban/filter.d:ro
- ./jail.d:/etc/fail2ban/jail.d:ro
- ./fail2ban.local:/etc/fail2ban/fail2ban.local:ro
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
Installation manuelle (Debian/Ubuntu)
sudo apt update && sudo apt install fail2ban -y
sudo systemctl enable --now fail2ban
Configuration
Le fichier canonique est /etc/fail2ban/jail.local (qui surcharge jail.conf). Exemple minimaliste :
[DEFAULT]
backend = systemd
bantime = 1h
findtime = 10m
maxretry = 5
banaction = nftables-multiport
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = %(sshd_log)s
maxretry = 3
[nginx-http-auth]
enabled = true
filter = nginx-http-auth
port = http,https
logpath = /var/log/nginx/error.log
Commandes utiles :
sudo fail2ban-client status # état global
sudo fail2ban-client status sshd # état d'une jail
sudo fail2ban-client set sshd unbanip 203.0.113.42
sudo fail2ban-client banned # IP bannies cumulées
Alternatives
Open Source
- app-crowdsec — Successeur moderne, collaboratif (blocklist partagée), Go
- app-crowdsec-manager — Dashboard web de visualisation CrowdSec
- DenyHosts — Spécialisé SSH, plus maintenu
- sshguard — Plus léger, écrit en C, basé sur PF/ipfw
- iptables recent match — Solution noyau sans daemon (règle pure)
Propriétaire (ce que Fail2Ban remplace)
- Cloudflare WAF (payant) — filtrage en périphérie CDN
- Imperva / Akamai Bot Manager (entreprise)
- Fail2ban-as-a-Service (Cognito, Castle.io)
Sécurité
- Mettre à jour régulièrement (CVE historiques sur le parsing des filtres).
- Ne jamais logger en clair les mots de passe : Fail2Ban stocke les bannis, pas les credentials.
- Combiner avec un VPN (WireGuard) plutôt qu'exposer SSH sur Internet.
- Whitelist IP de confiance via
ignoreip = 192.168.0.0/16 203.0.113.0/24dans[DEFAULT]. - Utiliser
recidive: une jail qui bannit longuement (1 semaine) les IP qui recidivent après un premier ban. - Notifications : webhook Discord/Slack via
action.d/pour réagir en temps réel. - Docker : attention aux containers en
bridge—network_mode: hostest nécessaire pour qu'iptables voie le trafic entrant réel.
Ressources
Pages Liées
- cat-networking — Catégorie parente
- cat-security — Catégorie transversale
- app-crowdsec — Successeur moderne et collaboratif
- app-crowdsec-manager — Dashboard CrowdSec
- recettes-docker-compose — Templates partagés
- securisation-home-lab — Guide sécurité global