#!/bin/bash
# =============================================================================
# Script Name: f2b_status.sh
# Version: 1.6
# Description: This script retrieves and displays the status of all Fail2Ban
# jails, including error handling and logging.
# =============================================================================
# Log file path
LOG_FILE="/var/log/fail2ban-status.log"
# Function to log messages with timestamp
log_message() {
echo "$(date +"%Y-%m-%d %H:%M:%S") - $1" | tee -a "$LOG_FILE"
}
# Function to retrieve the list of jails
get_jail_list() {
fail2ban-client status | grep 'Jail list:' | cut -d ":" -f2 | tr -d ',' | xargs
}
# Retrieve the list of jails
log_message "Retrieving the list of Fail2Ban jails..."
JAIL_LIST=$(get_jail_list)
# Check if any jails were found
if [ -z "$JAIL_LIST" ]; then
log_message "No jails found."
exit 1
fi
# Convert JAIL_LIST into an array
IFS=' ' read -r -a JAIL_ARRAY <<< "$JAIL_LIST"
# Iterate over each jail and display its status
for JAIL in "${JAIL_ARRAY[@]}"; do
log_message "Retrieving status for jail: $JAIL"
STATUS=$(fail2ban-client status "$JAIL" 2>&1)
if echo "$STATUS" | grep -q "Sorry but the jail"; then
log_message "Failed to retrieve status for jail: $JAIL. Error: $STATUS"
else
log_message "Status for jail $JAIL retrieved successfully."
echo "Status for jail: $JAIL"
echo "$STATUS"
echo "----------------------------"
fi
done
log_message "Fail2Ban status check completed."