Fail2ban – lister et trier les IP bannies

Lister et trier les ips bannies par Fail2ban

Il est utile de connaitre les IPs actuellement bannies par l’excellent Fail2ban.Nous allons lister et trier les ips bannies par Fail2ban avec awk.Fail2ban_logo

 

Pour rappelle cette application permet de définir le nombre de tentative maximum de connexion pour un service donné. Il peux être très intéressant pour des services tel que ssh et son daemon sshd, mais pas que. Je vous laisse vous documenter sur Fail2ban

les ips bannies par Fail2ban

Personnellement j’utilise :

awk '($(NF-1) = /Ban/){print $NF}' /var/log/fail2ban.log | sort | uniq -c | sort -n

cette commande vous renvoi les IP bannies avec leur nombre de tentative. Information importante pour bannir les IP définitivement de l’accès à votre serveur/machine.

Vérifier le fonctionnement de Fail2ban :

fail2ban-client status sshd

retourne le statut de la prison « sshd » (avec le nombre de tentatives échouées et la liste des IP bannies)

sinon le classique

systemctl status fail2ban

doit retourner un Active: active (running) since et une date depuis laquelle Fail2ban est actif.

 

Bonus script  :

#!/bin/bash

# fail2ban-tools.sh : utilitaire multifonction pour auditer les IPs bannies par Fail2Ban
# Usage :
#   ./fail2ban-tools.sh --list      # Liste les IP bannies par prison
#   ./fail2ban-tools.sh --whois     # Affiche les infos WHOIS des IP bannies
#   ./fail2ban-tools.sh --count     # Compte le nombre d'IPs bannies par prison
#   ./fail2ban-tools.sh --help      # Affiche l'aide

list_ips() {
    echo "Liste des IP bannies par prison"
    echo "-------------------------------"
    for jail in $(fail2ban-client status | grep 'Jail list' | cut -d: -f2 | tr ',' ' '); do
        jail=$(echo "$jail" | xargs)
        echo -e "\n[$jail]"
        fail2ban-client status "$jail" | grep 'Banned IP list' | cut -d: -f2
    done
}

whois_ips() {
    echo "Audit WHOIS des IPs bannies"
    echo "---------------------------"
    for jail in $(fail2ban-client status | grep 'Jail list' | cut -d: -f2 | tr ',' ' '); do
        jail=$(echo "$jail" | xargs)
        echo -e "\n[$jail]"
        IPs=$(fail2ban-client status "$jail" | grep 'Banned IP list' | cut -d: -f2)
        for ip in $IPs; do
            echo "IP : $ip"
            whois "$ip" | grep -iE 'OrgName|Country|OrgID|netname' | head -n 5
            echo "---"
        done
    done
}

count_ips() {
    echo "Nombre d'IPs bannies par prison"
    echo "-------------------------------"
    for jail in $(fail2ban-client status | grep 'Jail list' | cut -d: -f2 | tr ',' ' '); do
        jail=$(echo "$jail" | xargs)
        count=$(fail2ban-client status "$jail" | grep -oP '(?<=Banned IP list: ).*' | wc -w)
        echo "$jail : $count IP(s)"
    done
}

print_help() {
    echo "Usage: $0 [--list | --whois | --count | --help]"
    echo ""
    echo "  --list     Liste les IP bannies par prison"
    echo "  --whois    Affiche les infos WHOIS des IP bannies"
    echo "  --count    Compte le nombre d'IPs bannies par prison"
    echo "  --help     Affiche cette aide"
}

case "$1" in
    --list) list_ips ;;
    --whois) whois_ips ;;
    --count) count_ips ;;
    --help|-h|*) print_help ;;
esac