51 lines
1.5 KiB
Bash
Executable File
51 lines
1.5 KiB
Bash
Executable File
#!/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."
|