Files
wiki/Catalogue-Self-Hosted/apps/app-fail2ban.md
T
2026-06-09 18:40:21 +02:00

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/24 dans [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 bridgenetwork_mode: host est nécessaire pour qu'iptables voie le trafic entrant réel.

Ressources

Pages Liées