Fail2ban einrichten: Brute-Force-Angriffe automatisch blocken
Fail2ban überwacht deine Logs und sperrt IPs nach zu vielen Fehlversuchen – mit sicherer Whitelist für die eigene Adresse, damit du dich nicht aussperrst.
Inhaltsverzeichnis
Sieh dir nach ein paar Tagen im Internet einmal journalctl -u ssh an: Hunderte
Login-Versuche von fremden IPs, im Sekundentakt. Solange dein SSH auf
Schlüssel-Login umgestellt ist, kommt davon keiner rein –
aber es rauscht im Log und frisst Ressourcen. Fail2ban liest diese Logs mit und
sperrt automatisch, wer es zu oft erfolglos probiert.
Was bauen wir?
Am Ende überwacht Fail2ban 1.1 auf deinem Debian 13 die SSH-Anmeldungen und sperrt nach zu vielen Fehlversuchen die angreifende IP für eine festgelegte Zeit – per Firewall-Regel. Deine eigene IP steht auf einer Whitelist, damit dich das nie selbst trifft. Du kannst Sperren einsehen, manuell setzen und wieder aufheben.
Voraussetzungen
- Ein abgesicherter Server (Schlüssel-Login) mit aktiver Firewall
- Deine eigene öffentliche IP – finde sie z. B. über
wieistmeineip.de oder
curl -s ifconfig.mevon deinem lokalen Rechner
Schritt für Schritt
Bevor wir konfigurieren, drei Begriffe, die das ganze Werkzeug erklären:
- Filter – ein Muster, das eine „fehlgeschlagene Anmeldung" im Log erkennt (für SSH bringt Fail2ban das fertig mit).
- Jail („Gefängnis") – verbindet einen Filter mit einer Log-Quelle und den
Regeln „wie oft in welchem Zeitraum". Das
sshd-Jail überwacht die SSH-Logins. - Action – was beim Überschreiten passiert: Standardmäßig eine Firewall-Regel,
die die IP für
bantimeblockt.
Kurz: Filter erkennt Fehlversuche → Jail zählt sie → Action sperrt. Alles, was du unten konfigurierst, ist eine dieser drei Stellschrauben.
Schritt 1: Fail2ban installieren
sudo apt update
sudo apt install -y fail2banPrüfe die Version:
fail2ban-client --versionFail2Ban v1.1.0Debian sperrt ab sofort – noch ohne deine Whitelist
/etc/fail2ban/jail.d/defaults-debian.conf schaltet dabei das sshd-Jail direkt ein.
Fail2ban sperrt also ab diesem Moment – mit den Standardwerten aus jail.conf
(10 Minuten Sperre nach 5 Fehlversuchen in 10 Minuten) und ohne deine eigene IP auf
der Whitelist. Mach deshalb sofort mit Schritt 2 weiter.Schritt 2: Eigene Konfiguration in jail.local
Nie jail.conf bearbeiten
/etc/fail2ban/jail.conf wird bei Updates überschrieben. Eigene
Einstellungen gehören immer in /etc/fail2ban/jail.local – diese Datei bleibt
erhalten und überschreibt die Standardwerte.Lege die Datei an:
sudo nano /etc/fail2ban/jail.local[DEFAULT]
# Wie lange gesperrt wird
bantime = 1h
# Zeitfenster, in dem die Fehlversuche zählen
findtime = 10m
# So viele Fehlversuche sind erlaubt, dann Ban
maxretry = 5
# Deine eigene(n) IP(s) – wird NIE gesperrt
ignoreip = 127.0.0.1/8 ::1 DEINE_EIGENE_IP
[sshd]
enabled = trueZeile für Zeile:
bantime = 1h– Sperrdauer. Für hartnäckige Fälle siehe die Eskalation in Schritt 5.findtime+maxretry– „5 Fehlversuche innerhalb von 10 Minuten → Ban".ignoreip– die wichtigste Zeile: Trage hier deine eigene IP ein, damit du dich nicht selbst aussperrst. Hast du eine wechselnde IP zu Hause, nutze besser den Zugang über einen festen Punkt (später VPN) statt einer weiten Freigabe.[sshd] enabled = true– aktiviert das SSH-Gefängnis („Jail"). Auf Debian ist es überdefaults-debian.confohnehin schon an; explizit in der eigenen Datei zu stehen schadet nicht und macht sichtbar, was läuft.
Erst die eigene IP eintragen
ignoreip ein, bevor du die Konfiguration in Schritt 3
übernimmst – sonst kann dich schon ein eigener Tippfehler beim Login aussperren. Die
Adresse, von der du gerade verbunden bist, zeigt dir das erste Feld von
echo "$SSH_CLIENT".Debian 13 liest das systemd-Journal
logpath (etwa /var/log/auth.log) angeben. Die Datei existiert auf
modernen Systemen oft gar nicht mehr; das Journal ist die richtige Quelle und
funktioniert ohne Zusatzkonfiguration.Schritt 3: Konfiguration übernehmen
Prüfe zuerst, ob die Datei syntaktisch stimmt – das erspart dir einen Dienst, der nach dem Reload nicht mehr hochkommt:
sudo fail2ban-client -tOK: configuration test is successfulJetzt die neue Konfiguration übernehmen:
sudo systemctl reload fail2banDer Reload ist der entscheidende Schritt. Der Dienst läuft ja schon seit der
Installation – ein systemctl start (oder enable --now) macht bei einem laufenden
Dienst gar nichts, deine jail.local bliebe unbeachtet und es gälten weiter Debians
Standardwerte. Nach jeder Änderung an jail.local also erneut reload.
Dass Fail2ban nach einem Reboot von selbst wieder startet, hat das Paket schon eingerichtet – nachsehen kostet nichts:
systemctl is-enabled fail2banenabledKommt hier disabled, hol es mit sudo systemctl enable --now fail2ban nach. Und der
Blick auf den Dienst selbst:
sudo systemctl status fail2banDu solltest active (running) sehen.
Schritt 4: Status prüfen
So siehst du, welche Jails aktiv sind:
sudo fail2ban-client statusStatus
|- Number of jail: 1
`- Jail list: sshdUnd die Details des SSH-Jails:
sudo fail2ban-client status sshdStatus for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- Journal matches: _SYSTEMD_UNIT=ssh.service + _COMM=sshd
`- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list:Die Zeile Journal matches bestätigt, dass Fail2ban das systemd-Journal liest.
Currently banned steigt, sobald jemand zu oft danebengreift – und das summiert sich:
Auf unserem Testserver zählte Fail2ban in elf Tagen Laufzeit 9.494 Fehlversuche und
481 Sperren – rund 860 Anmeldeversuche und 44 Bans pro Tag, ohne dass wir irgendetwas
dafür tun mussten.
Ob wirklich deine Werte gelten und nicht mehr Debians Standard, fragst du direkt ab:
sudo fail2ban-client get sshd bantime36003600 Sekunden sind die Stunde aus deiner jail.local. Steht hier noch 600, hat der
Reload aus Schritt 3 gefehlt – dann läuft Fail2ban weiter mit den Standardwerten.
Schritt 5: Sperren verwalten – und Bans eskalieren
Eine IP von Hand entsperren (z. B. wenn ein Kollege sich vertippt hat):
sudo fail2ban-client set sshd unbanip 203.0.113.45Eine IP sofort sperren:
sudo fail2ban-client set sshd banip 203.0.113.45Beide Befehle antworten mit der Zahl der IPs, die sie tatsächlich angefasst haben:
1Kommt eine 0 zurück, ist nichts passiert – beim Entsperren heißt das meist, dass die
IP gar nicht gesperrt war (Tippfehler in der Adresse).
Gegen besonders hartnäckige Angreifer lohnt sich eskalierende Sperrzeit: Wer
wiederkommt, wird länger gesperrt. Ergänze im [DEFAULT]-Block:
bantime.increment = true
bantime.maxtime = 1wDamit verdoppelt Fail2ban die Sperrzeit bei jedem erneuten Auffallen derselben IP –
bis maximal eine Woche. Nach der Änderung sudo systemctl reload fail2ban. Dass die
Eskalation wirklich aktiv ist, bestätigt dir – wie in Schritt 4 – eine direkte Abfrage:
sudo fail2ban-client get sshd bantime.incrementTrueWenn es nicht funktioniert
Du hast dich selbst ausgesperrt. ignoreip fehlte oder enthielt die falsche IP.
Verbinde dich über die Konsole im netcup SCP (unabhängig von SSH) und entsperre
dich mit sudo fail2ban-client set sshd unbanip DEINE_EIGENE_IP. Trage deine IP
anschließend in ignoreip ein und lade neu. Deshalb steht die Whitelist in Schritt 2
an erster Stelle.
fail2ban.service startet nicht (systemctl status zeigt „failed"). Fast immer
ein Tippfehler in jail.local. Prüfe die Syntax mit sudo fail2ban-client -t
(Testmodus) – der Befehl nennt die fehlerhafte Zeile.
Deine Werte aus jail.local greifen nicht. Es wird nur 10 Minuten gesperrt, oder die
eigene IP fliegt trotz ignoreip raus. Fast immer fehlt der Reload – der Dienst lief
schon, bevor du die erste eigene Zeile geschrieben hast, und start/enable --now tut
bei einem laufenden Dienst nichts. Was wirklich gilt, zeigen
sudo fail2ban-client get sshd bantime (600 = Debian-Standard, 3600 = deine Stunde)
und sudo fail2ban-client get sshd ignoreip; übernommen wird es mit
sudo systemctl reload fail2ban.
Es wird nie jemand gesperrt, obwohl das Log voller Fehlversuche ist. Prüfe mit
sudo fail2ban-client status sshd, ob Total failed überhaupt steigt. Bleibt es bei
0, findet der Filter die Einträge nicht – meist, weil eine veraltete Anleitung einen
logpath auf eine nicht existierende Datei gesetzt hat. Auf Debian 13 den logpath
aus jail.local entfernen und das Journal nutzen (Schritt 2).
Sperren „wirken" nicht – die IP verbindet sich weiter. Auf Debian 13 sperrt Fail2ban
per nftables (banaction = nftables aus defaults-debian.conf). Sichtbar wird das
mit sudo nft list table inet f2b-table: Dort steht die Kette f2b-chain und darin ein
Adress-Set addr-set-sshd mit den gesperrten IPs. sudo iptables -L -n | grep f2b
liefert dagegen nichts – das ist kein Fehler, sondern die falsche Werkzeugebene, an
der ältere Anleitungen hängen bleiben. Fehlt die Tabelle ganz, hakt das Zusammenspiel mit
der Firewall – Dienst neu starten und /var/log/fail2ban.log ansehen.
Wartung & Backups
Sperren im Blick behalten:
sudo fail2ban-client status sshdzeigt jederzeit, wie viele IPs aktuell gesperrt sind. Die Historie steht nicht im Journal, sondern in einer eigenen Datei – Fail2ban loggt lautlogtargetin/etc/fail2ban/fail2ban.confnach/var/log/fail2ban.log:Terminalsudo grep -E "Ban|Unban" /var/log/fail2ban.log | tail -5Ausgabe2026-08-16 01:36:52,583 fail2ban.actions [326875]: NOTICE [sshd] Ban 203.0.113.45journalctl -u fail2banzeigt dagegen nur Start, Reload und Fehler des Dienstes.Weitere Jails: Sobald Dienste mit eigenem Login dazukommen (z. B. eine Web-App), kannst du passende Jails aktivieren – nach demselben Muster wie
[sshd].jail.localsichern: Deine Konfiguration ist schnell wiederhergestellt, gehört aber ins Backup deiner Server-Konfiguration.Nächster Schritt CrowdSec: Fail2ban schützt deinen Host anhand deiner Logs. Der moderne Nachfolger CrowdSec ergänzt das um eine kollaborative Angriffsabwehr (geteilte Blocklisten) und wertet die Zugriffs-Logs deines Reverse Proxy aus – sinnvoll, sobald Web-Apps dazukommen. Für den Einstieg ist Fail2ban genau richtig.
Damit ist das Sicherheits-Fundament komplett: Schlüssel-Login, zwei Firewall-Ebenen (UFW + netcup-Firewall), automatische Updates und aktiver Brute-Force-Schutz. Dein Server ist jetzt nicht nur eingerichtet, sondern solide abgesichert.
Zuletzt aktualisiert: 26.08.2026
Feedback per E-Mail: feedback@serverkueche.de
Wie geht's weiter?

CrowdSec: moderne, kollaborative Angriffsabwehr
CrowdSec mit dem Traefik-Bouncer einrichten: Angriffe aus den Zugriffs-Logs erkennen, Angreifer per 403 blocken und von …
Das könnte dir auch schmecken

Restic-Backups einrichten: verschlüsselt und off-site
Off-Site-Backups mit Restic: verschlüsselt einrichten, Snapshots wiederherstellen, mit Retention aufräumen und per …

Linux-Benutzer, Gruppen & Dateirechte verstehen
Wer darf was auf deinem Server? Dieser Grundlagen-Guide erklärt Benutzer, Gruppen und Dateirechte an echten Befehlen – …

Erste Schritte mit einem netcup VPS
Vom bestellten Server zum einsatzbereiten System: SSH-Login, Updates, ein sudo-Benutzer und die wichtigsten Handgriffe …