Passer au contenu principal

Sécurité (Linux)

fail2ban multi-services

fail2ban surveille n'importe quel log et bannit les IP qui dépassent un seuil d'échecs. La section SSH a couvert la jail sshd de base. Cette section traite les jails multi-services, le ban progressif et les filtres personnalisés.

Architecture

  • Jail : une règle de surveillance (fichier de log + filtre + action)
  • Filtre : expressions régulières qui identifient les tentatives dans les logs
  • Action : ce qui se passe quand le seuil est atteint (ban IP via nftables)

Jails standard incluses

fail2ban embarque des filtres pour les services courants. Les activer dans /etc/fail2ban/jail.local :

[DEFAULT]
bantime  = 1h
findtime = 10m
maxretry = 5
ignoreip = 127.0.0.1/8 192.168.1.0/24

[sshd]
enabled = true

[nginx-http-auth]
enabled  = true
logpath  = /var/log/nginx/error.log

[nginx-limit-req]
enabled  = true
logpath  = /var/log/nginx/error.log

[apache-auth]
enabled  = true
logpath  = /var/log/apache2/error.log

Ban progressif (récidivisme)

fail2ban supporte une durée de ban progressive : plus une IP récidive, plus elle est bannie longtemps.

[DEFAULT]
bantime.increment  = true
bantime.multiplier = 2        # doublement à chaque récidive
bantime.maxtime    = 1w       # maximum 1 semaine
bantime            = 1h       # valeur de base

Jail personnalisée

Pour surveiller un service maison, créer un filtre dans /etc/fail2ban/filter.d/ :

# /etc/fail2ban/filter.d/mon-appli.conf
[Definition]
failregex = ^.* \[error\] .* Login failed from <HOST>
ignoreregex =
# jail.local
[mon-appli]
enabled  = true
logpath  = /var/log/mon-appli/error.log
maxretry = 3

Tester le filtre avant activation :

fail2ban-regex /var/log/mon-appli/error.log /etc/fail2ban/filter.d/mon-appli.conf

Gérer les bans

fail2ban-client status                # liste toutes les jails actives
fail2ban-client status sshd           # IPs bannies pour sshd
fail2ban-client unban 1.2.3.4         # débannir une IP
fail2ban-client reload                # recharger la configuration

En pratique

Sur un serveur web, activer au minimum sshd + nginx-http-auth. Toujours inclure les IP de l'équipe dans ignoreip (LAN, VPN) pour éviter de se bannir soi-même. Le ban progressif est efficace contre les scanners persistants sans saturer les tables nftables. Les logs de ban sont dans /var/log/fail2ban.log.