Überblick bei Fail2ban   Vor kurzem aktualisiert!


Wer einen eigenen Server mit SSH-Zugang oder Maildiensten betreibt, kennt das Phänomen: Ein Blick in die Logfiles zeigt hunderte von Anmeldeversuchen aus der ganzen Welt. Hier schlägt die Stunde von Fail2Ban. Doch wie behält man den Überblick, wer gerade „vor der Tür“ steht?

Warum ist ein guter Überblick wichtig?

Fail2Ban arbeitet normalerweise im Hintergrund. Dennoch ist es sinnvoll, den Status regelmäßig zu prüfen:

Fail2Ban
Abbildung: Screenshot Fail2Ban
  1. Erfolgskontrolle: Arbeitet mein Regelwerk (Jails) korrekt? Werden Angreifer auf dem Mailserver genauso effektiv geblockt wie auf dem SSH-Port?
  2. Fehlalarm-Check: Habe ich vielleicht jemand fälschlich ausgesperrt (z. B. durch ein falsch hinterlegtes Passwort im Mail-Client)? Ein schneller Blick zeigt, ob diese IP-Adresse auf der „Blacklist“ gelandet ist.
  3. Gefahrenanalyse: Wenn bestimmte Jails (wie recidive für Wiederholungstäter) plötzlich extrem viele Einträge haben, deutet das auf eine gezielte Kampagne gegen den Server hin.

„Admin-Dashboard“ für das Terminal

Die Standardausgabe von Fail2Ban ist funktional, aber etwas unübersichtlich. Mit dem folgenden Bash-Skript erstellen wir eine Tabelle, die alle aktiven Jails, die Anzahl der Versuche und – besonders wichtig – die aktuell gesperrten IP-Adressen auf einen Blick anzeigt.

Das Skript: f2b-status

Kopiere diesen Code in eine Datei unter /usr/local/bin/f2b-status und mache sie mit chmod +x ausführbar.

#!/bin/bash
echo -e "\033[1mFail2Ban Status Übersicht & Gesperrte IPs\033[0m"
echo -e "--------------------------------------------------------------------------------"
printf "%-15s | %-8s | %-8s | %-8s | %-8s\n" "Jail" "Cur-Fail" "Tot-Fail" "Cur-Ban" "Tot-Ban"
echo -e "--------------------------------------------------------------------------------"

# Liste der Jails sauber extrahieren
jails=$(fail2ban-client status | grep "Jail list:" | sed 's/.*Jail list://; s/,//g')

for j in $jails; do
    stats=$(fail2ban-client status "$j")
    
    cur_fail=$(echo "$stats" | grep "Currently failed:" | grep -oE '[0-9]+')
    tot_fail=$(echo "$stats" | grep "Total failed:" | grep -oE '[0-9]+')
    cur_ban=$(echo "$stats" | grep "Currently banned:" | grep -oE '[0-9]+')
    tot_ban=$(echo "$stats" | grep "Total banned:" | grep -oE '[0-9]+')
    
    banned_ips=$(echo "$stats" | grep "Banned IP list:" | sed 's/.*Banned IP list://' | sed 's/^[ \t]*//')
    
    printf "%-15s | %-8s | %-8s | %-8s | %-8s\n" \
           "$j" "$cur_fail" "$tot_fail" "$cur_ban" "$tot_ban"
    
    if [ -n "$banned_ips" ]; then
        echo -e "   \033[33m└─ IPs: $banned_ips\033[0m"
    fi
done

echo -e "--------------------------------------------------------------------------------"
echo -e "\033[1mSchnellanleitung / Hilfe:\033[0m"
echo -e "  \033[32mLog ansehen (live):\033[0m    tail -f /var/log/fail2ban.log"
echo -e "  \033[32mLog durchsuchen:\033[0m       grep \"Ban\" /var/log/fail2ban.log"
echo -e "  \033[31mIP entsperren:\033[0m        fail2ban-client set <JAIL> unbanip <IP>"
echo -e "  \033[34mIP manuell sperren:\033[0m   fail2ban-client set <JAIL> banip <IP>"
echo -e "--------------------------------------------------------------------------------"

Mit solchen kleinen Tools behält man gut den Überblick und sieht sofort, wenn etwas auf einem Linux-Server „schief läuft“.