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.
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