From d59273b3117f8f47f40c9db28a9df8c7224d2fe2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Th=C3=A9o=20-=20Le=20Filament?= <theo@le-filament.com>
Date: Thu, 2 Mar 2023 14:43:34 +0100
Subject: [PATCH] feat(fail2ban): add total count of IP addresses banned

---
 check_fail2ban.sh | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/check_fail2ban.sh b/check_fail2ban.sh
index ca0f120..22e35bf 100755
--- a/check_fail2ban.sh
+++ b/check_fail2ban.sh
@@ -64,6 +64,7 @@ fi
 
 all_jail_stats=$(sudo /usr/bin/fail2ban-client banned | tr "'" '"' | python3 -c "import collections, json, sys; banned=json.load(sys.stdin); print('\n'.join([f'{name},{len(ips)}' for jails in banned for name, ips in jails.items()]))")
 
+total_banned_ips=0
 # IP address banned count for expected jails.
 for jail in ${jails//,/ }; do
     if jail_stats=$(grep "$jail" <(echo "$all_jail_stats")); then
@@ -74,7 +75,8 @@ for jail in ${jails//,/ }; do
             status='OK'
             [[ ${jail_ips} -ge $ips_threshold_warning ]] && status='WARNING'
             [[ ${jail_ips} -ge $ips_threshold_critical ]] && status='CRITICAL'
-            output+="${status}: ${jail} jail hold ${jail_ips} IP address\n"
+            output+="${status}: ${jail} jail hold ${jail_ips} IP addresses\n"
+	   total_banned_ips=$(( $total_banned_ips + $jail_ips ))
 
             perf+="${jail_name}=${jail_ips}${ips_scale} "
             continue
@@ -83,6 +85,9 @@ for jail in ${jails//,/ }; do
     output+="NOK: ${jail} jail is missing\n"
 done
 
+output+="INFO: fail2ban ban ${total_banned_ips} IP addresses"
+perf+="total=${total_banned_ips}${ips_scale} "
+
 # Nagios OK status.
 exit_code=0
 # Nagios WARNING status.
-- 
GitLab