#!/bin/zsh
# =============================================================================
# Script Name: f2b_check_ips.sh
# Version: 1.1
# Author: Andreas Fleckl
# Description: This script extracts and prints all banned IPs from Fail2Ban
# jails, with an option to filter IPs based on a search argument.
# Includes error handling and logging.
# =============================================================================
# Function to extract the list of jails
extract_jail_list() {
# Run fail2ban-client status and extract the jail list
JAIL_LIST=$(fail2ban-client status | awk -F'\t' '/Jail list/ {print $2}' | tr ',' '\n' | tr -d ' ')
# Check if jail list is empty
if [[ -z "$JAIL_LIST" ]]; then
echo "No jails found."
return 1
fi
echo "$JAIL_LIST"
return 0
}
# Function to extract and print all banned IPs
extract_and_print_all_banned_ips() {
JAIL_LIST=$(extract_jail_list)
if [[ $? -ne 0 ]]; then
return 1
fi
ALL_BANNED_IPS=""
for JAIL in ${(f)JAIL_LIST}; do
STATUS_OUTPUT=$(fail2ban-client status $JAIL)
# Extract the banned IPs
BANNED_IP_LIST=$(echo "$STATUS_OUTPUT" | grep -oP '(?<=Banned IP list:\t).*')
if [[ -n "$BANNED_IP_LIST" ]]; then
ALL_BANNED_IPS+="$BANNED_IP_LIST "
fi
done
# Print all found IPs, one per line
echo "$ALL_BANNED_IPS" | tr ' ' '\n'
}
# Function to filter the IPs based on the provided argument
filter_ips() {
SEARCH_IP=$1
extract_and_print_all_banned_ips | grep "$SEARCH_IP"
}
# Main execution
if [[ $# -gt 0 ]]; then
filter_ips $1
else
extract_and_print_all_banned_ips
fi