Fail2ban : afficher le statut de toutes les jails

Fail2ban est l’un des outils les plus pratiques pour protéger un serveur Linux contre les tentatives répétées d’authentification, les attaques par force brute et certains comportements abusifs dans les logs.

Il surveille des fichiers de logs, détecte des motifs suspects, puis bannit les adresses IP concernées via le pare-feu du système. Sur un serveur exposé à Internet, il devient vite indispensable pour SSH, Postfix, Dovecot, Nginx, Apache, WordPress, Plesk ou encore les services FTP.

Une fois Fail2ban configuré, il est utile de voir rapidement quelles jails sont actives, combien d’IP elles ont bannies, et si certaines jails ne détectent plus rien à cause d’un changement de chemin de log ou de backend.

La commande de base est simple :

sudo fail2ban-client status

Elle affiche le nombre de jails actives et leur liste. Pour obtenir le détail d’une jail précise, on utilise ensuite :

sudo fail2ban-client status sshd

Mais quand le serveur contient plusieurs jails, taper la commande à la main pour chacune devient vite pénible. Voici donc plusieurs méthodes propres pour afficher le statut de toutes les jails Fail2ban d’un coup.

Codeable: trouvez les meilleurs développeurs WordPress

Afficher la liste des jails Fail2ban actives

Commencez par vérifier que Fail2ban tourne correctement :

sudo systemctl status fail2ban --no-pager

Puis listez les jails actives :

sudo fail2ban-client status

Exemple de sortie :

Status
|- Number of jail:      4
`- Jail list:           dovecot, postfix, sasl, sshdLangage du code : JavaScript (javascript)

La documentation et les manpages de fail2ban-client indiquent que la commande status affiche l’état global du serveur Fail2ban, tandis que status <JAIL> affiche l’état d’une jail précise. Manpage Debian fail2ban-client.

Afficher le statut détaillé de toutes les jails

Pour afficher le statut de toutes les jails en une seule commande, vous pouvez utiliser cette version compacte :

sudo fail2ban-client status | sed -n 's/,//g;s/.*Jail list:[[:space:]]*//p' | xargs -n1 sudo fail2ban-client statusLangage du code : JavaScript (javascript)

Elle récupère la liste des jails, retire les virgules, puis lance fail2ban-client status pour chaque jail.

Exemple de sortie :

Status for the jail: postfix
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     4482
|  `- File list:        /var/log/mail.log
`- Actions
   |- Currently banned: 0
   |- Total banned:     223
   `- Banned IP list:

Status for the jail: sasl
|- Filter
|  |- Currently failed: 4
|  |- Total failed:     14126
|  `- File list:        /var/log/mail.log
`- Actions
   |- Currently banned: 4
   |- Total banned:     1927
   `- Banned IP list:   45.148.10.70 46.38.144.17 46.38.144.202 46.38.144.32

Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     0
|  `- File list:        /var/log/auth.log
`- Actions
   |- Currently banned: 0
   |- Total banned:     0
   `- Banned IP list:Langage du code : PHP (php)

Cette commande reste pratique pour une lecture humaine rapide. Elle affiche les compteurs importants : tentatives actuellement détectées, total d’échecs, IP actuellement bannies, total d’IP bannies et fichiers de logs surveillés.

WPEngine: Premium Managed WooCommerce hosting

Version plus lisible avec une boucle shell

Pour éviter une ligne trop dense, utilisez une boucle Bash. Elle est plus facile à relire, modifier et coller dans un script d’administration.

jails=$(sudo fail2ban-client status | sed -n 's/,//g;s/.*Jail list:[[:space:]]*//p')

for jail in $jails; do
    echo
    echo "========== $jail =========="
    sudo fail2ban-client status "$jail"
doneLangage du code : PHP (php)

C’est la version que je préfère pour un usage ponctuel en SSH. Elle évite le côté “one-liner ésotérique retrouvé dans un vieux carnet de sorcier Unix”.

Afficher uniquement les IP bannies dans toutes les jails

Si vous voulez voir rapidement les IP actuellement bannies, utilisez la commande get <JAIL> banip. Elle renvoie les IP bannies pour une jail donnée.

sudo fail2ban-client get sshd banipLangage du code : JavaScript (javascript)

Pour afficher les IP bannies dans toutes les jails :

jails=$(sudo fail2ban-client status | sed -n 's/,//g;s/.*Jail list:[[:space:]]*//p')

for jail in $jails; do
    ips=$(sudo fail2ban-client get "$jail" banip)
    if [ -n "$ips" ]; then
        echo "[$jail]"
        printf '%s\n' "$ips" | tr ' ' '\n'
        echo
    fi
doneLangage du code : PHP (php)

C’est beaucoup plus lisible si votre objectif est simplement de savoir qui est actuellement bloqué, et dans quelle jail.

Codeable: trouvez les meilleurs développeurs WordPress

Afficher un résumé compact des jails Fail2ban

Pour un audit rapide, je préfère souvent un résumé en colonnes : jail, IP actuellement bannies, total des bannissements, erreurs actuelles, erreurs totales.

Voici une version Bash simple :

#!/usr/bin/env bash

set -euo pipefail

jails=$(sudo fail2ban-client status | sed -n 's/,//g;s/.*Jail list:[[:space:]]*//p')

printf '%-25s %10s %10s %10s %10s\n' "Jail" "Banned" "TotalBan" "Failed" "TotalFail"
printf '%-25s %10s %10s %10s %10s\n' "----" "------" "--------" "------" "---------"

for jail in $jails; do
    status=$(sudo fail2ban-client status "$jail")

    currently_banned=$(printf '%s\n' "$status" | awk -F: '/Currently banned:/ { gsub(/^[ \t]+/, "", $2); print $2 }')
    total_banned=$(printf '%s\n' "$status" | awk -F: '/Total banned:/ { gsub(/^[ \t]+/, "", $2); print $2 }')
    currently_failed=$(printf '%s\n' "$status" | awk -F: '/Currently failed:/ { gsub(/^[ \t]+/, "", $2); print $2 }')
    total_failed=$(printf '%s\n' "$status" | awk -F: '/Total failed:/ { gsub(/^[ \t]+/, "", $2); print $2 }')

    printf '%-25s %10s %10s %10s %10s\n' \
        "$jail" \
        "${currently_banned:-0}" \
        "${total_banned:-0}" \
        "${currently_failed:-0}" \
        "${total_failed:-0}"
doneLangage du code : PHP (php)

Vous pouvez l’enregistrer dans un fichier :

sudo nano /usr/local/sbin/fail2ban-summary

Puis le rendre exécutable :

sudo chmod +x /usr/local/sbin/fail2ban-summary

Ensuite, lancez simplement :

fail2ban-summary

Exemple de sortie :

Jail                          Banned   TotalBan     Failed  TotalFail
----                          ------   --------     ------  ---------
dovecot                            1       1280          3      18291
postfix                            0        223          0       4482
sasl                               4       1927          4      14126
sshd                               0         42          0        913

Ce genre de résumé est parfait pour voir immédiatement quelles jails travaillent vraiment, et lesquelles sont peut-être inutiles ou mal configurées.

Afficher les jails configurées mais pas forcément actives

fail2ban-client status affiche les jails actuellement actives. Si vous voulez vérifier la configuration, regardez aussi les fichiers dans :

/etc/fail2ban/jail.conf
/etc/fail2ban/jail.local
/etc/fail2ban/jail.d/

La bonne pratique consiste à ne pas modifier jail.conf directement. Utilisez plutôt jail.local ou des fichiers .local dans /etc/fail2ban/jail.d/. Ainsi, les mises à jour du paquet Fail2ban ne remplacent pas vos réglages locaux.

Pour repérer les jails explicitement activées :

sudo grep -R "enabled *= *true" /etc/fail2ban/jail.local /etc/fail2ban/jail.d/ 2>/dev/nullLangage du code : JavaScript (javascript)

Si une jail est configurée mais absente de fail2ban-client status, elle n’est probablement pas chargée, ou Fail2ban n’a pas été rechargé après modification.

Kinsta: Premium Managed WordPress hosting

Recharger Fail2ban après modification

Après modification d’une jail, rechargez Fail2ban :

sudo fail2ban-client reload

Ou rechargez une jail précise :

sudo fail2ban-client reload sshd

Si vous préférez passer par systemd :

sudo systemctl reload fail2ban

En cas de doute, vérifiez le service :

sudo systemctl status fail2ban --no-pager

Consulter les logs Fail2ban

Pour comprendre pourquoi une IP a été bannie, ou pourquoi une jail ne bannit rien, consultez les logs Fail2ban.

Sur beaucoup de distributions :

sudo tail -f /var/log/fail2ban.logLangage du code : JavaScript (javascript)

Avec systemd :

sudo journalctl -u fail2ban -f

Pour chercher une IP précise :

sudo grep "203.0.113.10" /var/log/fail2ban.logLangage du code : JavaScript (javascript)

Dans un environnement Plesk, Plesk recommande aussi de regarder /var/log/fail2ban.log pour identifier quelle jail a banni une IP. Documentation Plesk : vérifier pourquoi une IP est bannie.

Débannir une IP dans une jail

Si vous devez débannir une IP légitime, commencez par identifier la jail concernée avec le statut ou les logs.

Puis utilisez :

sudo fail2ban-client set sshd unbanip 203.0.113.10Langage du code : CSS (css)

Pour bannir manuellement une IP dans une jail :

sudo fail2ban-client set sshd banip 203.0.113.10Langage du code : CSS (css)

Évitez de débannir une IP uniquement parce qu’un utilisateur dit “ça ne marche pas”. Vérifiez d’abord la jail, le log et la raison du bannissement. Parfois, Fail2ban est brutal. Parfois, il a juste très bonne mémoire.

Vérifier le backend de logs utilisé par une jail

Sur les distributions modernes, Fail2ban peut utiliser plusieurs backends pour lire les logs : fichiers classiques, systemd journal, auto-détection, etc.

Si une jail ne détecte plus rien, vérifiez son statut :

sudo fail2ban-client status sshd

Regardez notamment la ligne File list. Si elle pointe vers un fichier inexistant, la jail ne verra jamais les tentatives d’attaque.

Sur Debian/Ubuntu récents, certains logs d’authentification peuvent dépendre de journald, rsyslog, ou du fichier /var/log/auth.log selon la configuration. Une jail sshd peut donc nécessiter backend = systemd ou un chemin de log correct.

Exemple dans un fichier local :

[sshd]
enabled = true
backend = systemdLangage du code : JavaScript (javascript)

Après modification :

sudo fail2ban-client reload sshd
sudo fail2ban-client status sshd

Checklist rapide d’audit Fail2ban

Voici ma séquence habituelle pour vérifier Fail2ban sur un serveur :

# 1. Vérifier le service.
sudo systemctl status fail2ban --no-pager

# 2. Lister les jails actives.
sudo fail2ban-client status

# 3. Afficher le statut de toutes les jails.
jails=$(sudo fail2ban-client status | sed -n 's/,//g;s/.*Jail list:[[:space:]]*//p')

for jail in $jails; do
    echo
    echo "========== $jail =========="
    sudo fail2ban-client status "$jail"
done

# 4. Voir les logs Fail2ban.
sudo tail -n 100 /var/log/fail2ban.log

# 5. Suivre Fail2ban en direct.
sudo journalctl -u fail2ban -fLangage du code : PHP (php)

Commandes utiles à garder sous le coude

ActionCommande
Lister les jails activessudo fail2ban-client status
Voir le statut d’une jailsudo fail2ban-client status sshd
Voir les IP bannies d’une jailsudo fail2ban-client get sshd banip
Débannir une IPsudo fail2ban-client set sshd unbanip 203.0.113.10
Bannir une IP manuellementsudo fail2ban-client set sshd banip 203.0.113.10
Recharger Fail2bansudo fail2ban-client reload
Recharger une jailsudo fail2ban-client reload sshd
Voir les logssudo journalctl -u fail2ban -f

Conclusion

Pour obtenir le statut de toutes les jails Fail2ban, la commande rapide reste très utile :

sudo fail2ban-client status | sed -n 's/,//g;s/.*Jail list:[[:space:]]*//p' | xargs -n1 sudo fail2ban-client statusLangage du code : JavaScript (javascript)

Mais pour une administration régulière, je préfère une petite boucle Bash ou un script résumé. C’est plus lisible, plus facile à adapter, et beaucoup plus agréable quand le serveur contient plusieurs jails.

Le plus important reste de ne pas regarder seulement le nombre d’IP bannies. Vérifiez aussi les fichiers de logs surveillés, le backend utilisé, les compteurs d’échecs et les jails réellement actives.

Sources

Demandez à l'IA son opinion

Laisser un commentaire