Files
2026-05-12 15:51:17 +02:00

97 lines
3.3 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
set -uo pipefail
ok() { echo -e "✅ $1"; }
info() { echo -e "ℹ️ $1"; }
warn() { echo -e "⚠️ $1"; }
err() { echo -e "❌ $1"; }
echo ""
echo "──────────────────────────────────────────────────────────"
# Wenn kein Container angegeben → automatisch suchen
if [[ $# -eq 0 ]]; then
info "Kein fail2ban Container angegeben, versuche Autodetect"
CONTAINER=$(docker ps --format '{{.Names}}' | grep -i fail2ban | head -n1)
if [[ -z "$CONTAINER" ]]; then
err "Kein Fail2Ban Container gefunden"
echo "──────────────────────────────────────────────────────────"
exit 1
else
info "Container gefunden"
fi
else
CONTAINER="$1"
# Existiert der Container überhaupt?
if ! docker ps -a --format '{{.Names}}' | grep -Fxq "$CONTAINER"; then
err "Container '$CONTAINER' existiert nicht"
echo "──────────────────────────────────────────────────────────"
exit 1
fi
# Läuft der Container?
if ! docker ps --format '{{.Names}}' | grep -Fxq "$CONTAINER"; then
err "Container '$CONTAINER' läuft nicht"
echo "──────────────────────────────────────────────────────────"
exit 1
fi
fi
info "Verwende Container: $CONTAINER"
echo "──────────────────────────────────────────────────────────"
echo ""
JAILS=$(docker exec "$CONTAINER" fail2ban-client status \
| awk -F: '/Jail list/ {print $2}' | xargs)
IFS=',' read -ra JAIL_ARRAY <<< "$JAILS"
for JAIL in "${JAIL_ARRAY[@]}"; do
JAIL=$(echo "$JAIL" | xargs)
IPS=$(docker exec "$CONTAINER" fail2ban-client status "$JAIL" \
| awk -F: '/Banned IP list/ {print $2}' | xargs)
if [[ -z "$IPS" ]]; then
ok "$JAIL → keine Bans"
continue
fi
info "🔓 $JAIL → entbanne: $IPS"
COUNT=0
FAILED=0
for IP in $IPS; do
if docker exec "$CONTAINER" fail2ban-client set "$JAIL" unbanip "$IP" >/dev/null 2>&1; then
((COUNT++))
else
((FAILED++))
warn "$JAIL → konnte $IP nicht entbannen"
fi
done
REMAINING=$(docker exec "$CONTAINER" fail2ban-client status "$JAIL" \
| awk '/Currently banned/ {print $4}')
if [[ "$REMAINING" == "0" ]]; then
ok "$JAIL → $COUNT IP(s) entfernt"
else
err "$JAIL → $REMAINING IP(s) noch gebannt"
fi
done
echo ""
echo "──────────────────────────────────────────────────────────"
ok "Fertig."
echo "──────────────────────────────────────────────────────────"