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?
Was ist Fail2Ban eigentlich?
Fail2Ban ist ein Tool, das Logdateien (z. B. /var/log/auth.log oder /var/log/mail.log) scannt. Es sucht nach verdächtigen Mustern, wie zum Beispiel mehrfach gescheiterten Login-Versuchen.
Sobald ein definierter Schwellenwert ( maxretry) erreicht ist, greift Fail2Ban ein und weist die Firewall des Servers (z. B. UFW oder iptables) an, die IP-Adresse des Angreifers für eine bestimmte Zeit zu sperren.
Warum ist ein guter Überblick wichtig?
Fail2Ban arbeitet normalerweise im Hintergrund. Dennoch ist es sinnvoll, den Status regelmäßig zu prüfen:
- Erfolgskontrolle: Arbeitet mein Regelwerk (Jails) korrekt? Werden Angreifer auf dem Mailserver genauso effektiv geblockt wie auf dem SSH-Port?
- 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.
- Gefahrenanalyse: Wenn bestimmte Jails (wie
recidivefü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“.
