Sie suchen wie man Fail2ban installiert, um SSH auf einem Linux-VPS zu schützen? Fail2ban überwacht die Serverprotokolle, erkennt wiederholte Anmeldefehler und fordert die Firewall auf, die verantwortliche IP-Adresse vorübergehend zu blockieren.
Dieses Tutorial erklärt Schritt für Schritt, wie man Fail2ban auf Debian 12, Debian 13 und Ubuntu 24.04 installiert und konfiguriert. Sie lernen auch, wie Sie seine Funktionsweise überprüfen, die gesperrten IPs anzeigen, eine Adresse entsperren, eine Whitelist erstellen und Nginx schützen.
Um Fail2ban schnell auf Debian oder Ubuntu zu installieren:
sudo apt update
sudo apt install -y fail2ban
sudo systemctl enable --now fail2ban
sudo fail2ban-client status
Die vollständige Konfiguration besteht dann aus:
- Erstellen von
/etc/fail2ban/jail.local; - Aktivieren der Jail
sshd; - Festlegen von
maxretry,findtimeundbantime; - Testen der Konfiguration mit
fail2ban-client -t; - Überprüfen der Sperrungen mit
fail2ban-client status sshd.
Die folgenden Abschnitte erläutern jeden Schritt und die Besonderheiten von systemd in den aktuellen Versionen von Debian.
Bevor Sie beginnen: Vermeiden Sie, sich selbst zu sperren
Eine falsche Konfiguration von Fail2ban kann Ihren eigenen SSH-Zugang unterbrechen. Vor jeder Änderung:
- Öffnen Sie die Webkonsole oder noVNC Ihres VPS;
- Halten Sie Ihre aktuelle SSH-Sitzung geöffnet;
- Notieren Sie Ihre öffentliche IP-Adresse, wenn sie statisch ist;
- Überprüfen Sie den tatsächlich von SSH verwendeten Port;
- Testen Sie die Sperrung nicht von Ihrem einzigen Zugang zum Server.
Um den konfigurierten SSH-Port zu erfahren:
sudo sshd -T | grep '^port '
Wenn der Befehl beispielsweise port 2222 zurückgibt, müssen Sie port = 2222 in der SSH-Jail anstelle von port = ssh angeben.
Wie funktioniert Fail2ban?
Fail2ban basiert auf drei Elementen:
- Ein Filter erkennt Anmeldefehler in den Protokollen mithilfe von regulären Ausdrücken;
- Eine Jail zählt die Fehler von jeder IP-Adresse;
- Eine Aktion wendet die Sperrung mit der verfügbaren Firewall an, z. B. nftables oder iptables.

Drei Parameter steuern hauptsächlich das Auslösen einer Sperre:
maxretry: Anzahl der erlaubten Fehler vor der Sperrung;findtime: Zeitraum, in dem diese Fehler gezählt werden;bantime: ursprüngliche Dauer der Sperrung.
Mit der Konfiguration maxretry = 5, findtime = 10m und bantime = 1h wird eine Adresse, die fünf Fehler in zehn Minuten produziert, für eine Stunde blockiert.
Fail2ban ersetzt nicht die SSH-Authentifizierung mit Schlüsseln, eine korrekt konfigurierte Firewall oder Sicherheitsupdates. Es ist eine zusätzliche Schicht, die darauf abzielt, wiederholte Versuche zu reduzieren.
Wie installiert man Fail2ban auf Debian 12/13 oder Ubuntu 24.04?
Installieren Sie das von Ihrer Distribution bereitgestellte Paket:
sudo apt update
sudo apt install -y fail2ban
sudo systemctl enable --now fail2ban
Überprüfen Sie dann die installierte Version und stellen Sie sicher, dass der Dienst antwortet:
fail2ban-client --version
sudo fail2ban-client ping
sudo fail2ban-client status
Eine funktionierende Installation sollte unter anderem Server replied: pong zurückgeben.
Auf Debian und Ubuntu aktiviert das Paket in der Regel die Jail sshd. Nehmen Sie jedoch nicht an, dass SSH bereits geschützt ist: Überprüfen Sie ausdrücklich seinen Status.
sudo fail2ban-client status sshd
Wenn die Jail nicht existiert, der Dienst nicht startet oder kein Protokoll gefunden wird, fahren Sie mit der folgenden Konfiguration fort.
Besonderheit von Debian 12 und Debian 13
Bei einer frischen Installation von Debian 12 oder 13 kann /var/log/auth.log fehlen, da rsyslog standardmäßig nicht mehr installiert ist. Die SSH-Ereignisse werden dann im systemd-Protokoll gespeichert. Auf einem aktualisierten Server oder einem, auf dem rsyslog installiert wurde, kann die Datei jedoch weiterhin existieren.
Überprüfen Sie die verfügbare Quelle:
test -f /var/log/auth.log && echo "auth.log vorhanden" || echo "Systemd-Protokolle wahrscheinlich verwendet"
sudo journalctl -u ssh --since "10 minutes ago" --no-pager
Wenn Fail2ban den Fehler Have not found any log file for sshd jail anzeigt, verwenden Sie das in der nächsten Sektion vorgestellte Backend systemd.
Wie konfiguriert man Fail2ban, um SSH zu schützen?
Ändern Sie nicht direkt /etc/fail2ban/jail.conf. Diese Datei gehört zum Paket und kann sich bei einem Update ändern. Platzieren Sie Ihre Anpassungen nur in /etc/fail2ban/jail.local oder in einer .local-Datei unter /etc/fail2ban/jail.d/.
Die Hauptladeordnung ist wie folgt:
jail.conf;jail.d/*.conf;jail.local;jail.d/*.local.
Die zuletzt gelesenen Parameter überschreiben die vorherigen Werte.
Erstellen Sie die lokale Datei:
sudo nano /etc/fail2ban/jail.local
Hier ist eine Basis, die für einen klassischen Linux-VPS geeignet ist und das systemd-Protokoll verwendet:
[DEFAULT]
# Ursprüngliche Dauer der Sperrung
bantime = 1h
# Zählen der Fehler über einen Zeitraum von 10 Minuten
findtime = 10m
maxretry = 5
# Verlängern der Dauer, wenn dieselbe IP wiederholt
bantime.increment = true
bantime.factor = 1
bantime.maxtime = 1w
# Adressen, die niemals gesperrt werden dürfen
ignoreip = 127.0.0.1/8 ::1
[sshd]
enabled = true
backend = systemd
port = ssh
Wenn SSH auf einem benutzerdefinierten Port lauscht, ersetzen Sie port = ssh:
[sshd]
enabled = true
backend = systemd
port = 2222
Wichtig: Verwenden Sie mit
backend = systemdkeinen Parameterlogpathin der Jail. Fail2ban fragt direkt das systemd-Protokoll ab.
Warum progressive Sperren verwenden?
Mit bantime.increment = true behält Fail2ban die Historie der Sperrungen in seiner lokalen Datenbank und erhöht schrittweise deren Dauer. Mit den obigen Werten können Wiederholungen zu Sperren von einer Stunde, dann zwei Stunden, vier Stunden usw. führen, ohne eine Woche zu überschreiten.
Dieser Mechanismus reduziert das Interesse an wiederholten Versuchen, während er eine permanente Sperrung aufgrund eines einfachen menschlichen Fehlers vermeidet. Seine Wirksamkeit hängt jedoch vom Verhalten der Angreifer ab: Ein Botnetz, das viele verschiedene Adressen verwendet, wird durch die Verlängerung der Sperre einer einzigen IP nicht gestoppt.
Wie überprüft man, ob Fail2ban funktioniert?
Testen Sie immer das Laden der Konfiguration, bevor Sie sie anwenden:
sudo fail2ban-client -t
Wenn keine Fehler zurückgegeben werden, laden Sie Fail2ban neu und überprüfen Sie die SSH-Jail:
sudo fail2ban-client reload
sudo fail2ban-client status sshd
sudo journalctl -u fail2ban -n 50 --no-pager
Der Test fail2ban-client -t überprüft die Konfiguration, beweist jedoch nicht allein, dass der Filter Ihre Protokolle erkennt oder dass die Firewall tatsächlich die IPs blockiert. Um den SSH-Filter mit systemd zu testen:
sudo fail2ban-regex --print-all-matched systemd-journal sshd
Wenn Ihr Server /var/log/auth.log verwendet:
sudo fail2ban-regex --print-all-matched /var/log/auth.log sshd
Führen Sie einen funktionalen Test durch, ohne den Zugang zu verlieren
Verwenden Sie eine zweite Internetverbindung, z. B. die Internetfreigabe eines Telefons, und verursachen Sie absichtlich mehrere SSH-Fehler. Halten Sie Ihre Administrationssitzung und die Webkonsole geöffnet.
Überprüfen Sie dann das Ergebnis:
sudo fail2ban-client status sshd
sudo fail2ban-client banned
Überprüfen Sie auch, ob die Firewall eine Fail2ban-Regel enthält. Je nach Ihrem System:
sudo nft list ruleset | grep -iE 'f2b|fail2ban'
sudo iptables -S | grep -i f2b
Eine dieser Befehle kann nichts zurückgeben, wenn der Server nur das andere Firewall-System verwendet.
Wie sieht man die von Fail2ban gesperrten IPs?
Aktive Jails anzeigen
sudo fail2ban-client status
Die von der SSH-Jail gesperrten IPs anzeigen
sudo fail2ban-client status sshd
Alle gesperrten IPs anzeigen
sudo fail2ban-client banned
Wie entsperrt man eine IP mit Fail2ban?
Wenn Ihre Adresse nach mehreren falschen Passwörtern blockiert wurde, verwenden Sie die Webkonsole des VPS oder eine andere autorisierte Verbindung, um die folgenden Befehle auszuführen.
Eine IP aus einer bestimmten Jail entsperren
sudo fail2ban-client set sshd unbanip 203.0.113.42
Eine IP aus allen Jails entsperren
sudo fail2ban-client unban 203.0.113.42
Alle IPs entsperren
Dieser Befehl leert die Sperrungen aller Jails. Verwenden Sie ihn nur, wenn es wirklich notwendig ist:
sudo fail2ban-client unban --all
Eine IP manuell sperren
sudo fail2ban-client set sshd banip 198.51.100.17
Wie fügt man eine IP zur Fail2ban-Whitelist hinzu?
Der Parameter ignoreip enthält die Adressen, die Fail2ban niemals sperren soll. Er akzeptiert IPv4-Adressen, IPv6-Adressen, CIDR-Bereiche und DNS-Namen.
[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 203.0.113.42 192.0.2.0/24
Laden Sie dann die Konfiguration neu:
sudo fail2ban-client -t
sudo fail2ban-client reload
Fügen Sie Ihre persönliche Adresse nur hinzu, wenn sie statisch und tatsächlich kontrolliert ist. Vermeiden Sie es, einen zu großen Bereich, der zu einem Anbieter oder einem öffentlichen VPN gehört, auf die Whitelist zu setzen: Ein Angreifer, der denselben Bereich verwendet, könnte dann nicht mehr gesperrt werden.
Um eine IP vorübergehend in der SSH-Jail zu ignorieren:
sudo fail2ban-client set sshd addignoreip 203.0.113.42
Diese Änderung wird im Speicher angewendet und ist keine persistente Konfiguration. Um sie nach einem Neustart oder einer Neuladung beizubehalten, fügen Sie die Adresse in eine .local-Datei ein.
Wie schützt man Nginx mit Fail2ban?
Fail2ban bietet mehrere Nginx-Filter. Zwei Jails sind besonders nützlich:
nginx-http-auth, für wiederholte Fehler bei der HTTP Basic-Authentifizierung;nginx-limit-req, für Anfragen, die durch die Nginx-Drosselung abgelehnt werden.
Fügen Sie die erforderlichen Jails in /etc/fail2ban/jail.local hinzu:
[nginx-http-auth]
enabled = true
port = http,https
[nginx-limit-req]
enabled = true
port = http,https
maxretry = 10
Die Jail nginx-limit-req erstellt nicht die Drosselung für Sie. Nginx muss bereits die Direktiven limit_req_zone und limit_req verwenden, und die Ablehnungen müssen in seinem Fehlerprotokoll erscheinen.
Überprüfen Sie die Nginx-Konfiguration und testen Sie den Filter, bevor Sie die Jail aktivieren:
sudo nginx -T | grep -E 'limit_req(_zone)?'
sudo fail2ban-regex /var/log/nginx/error.log nginx-limit-req
sudo nginx -t
Laden Sie dann die beiden Dienste neu:
sudo systemctl reload nginx
sudo fail2ban-client -t
sudo fail2ban-client reload
sudo fail2ban-client status nginx-limit-req
Wenn Nginx hinter Cloudflare, einem Reverse-Proxy oder einem Load-Balancer steht, konfigurieren Sie zuerst die Wiederherstellung der tatsächlichen IP-Adresse des Besuchers. Andernfalls können die Protokolle die Adresse des Proxys enthalten, und Fail2ban könnte diesen anstelle des verantwortlichen Clients blockieren.
Wenn Ihr Webserver noch nicht installiert ist, lesen Sie unser Handbuch zur Installation von Nginx und PHP-FPM auf einem VPS.
Für Windows wird das entsprechende Prinzip in unserem Handbuch zu RDP-Brute-Force-Angriffen auf einem Windows-VPS vorgestellt.
Warum funktioniert Fail2ban nicht oder sperrt keine IP?
1. Überprüfen Sie, ob der Dienst funktioniert
sudo systemctl --no-pager --full status fail2ban
sudo fail2ban-client ping
sudo journalctl -u fail2ban -n 100 --no-pager
2. Überprüfen Sie, ob die Jail aktiv ist
sudo fail2ban-client status
sudo fail2ban-client status sshd
3. Überprüfen Sie die Quelle der Protokolle
sudo journalctl -u ssh -n 50 --no-pager
sudo tail -n 50 /var/log/auth.log
Der zweite Befehl schlägt normalerweise fehl, wenn /var/log/auth.log nicht existiert. In diesem Fall verwenden Sie das systemd-Backend.
4. Testen Sie den Filter
sudo fail2ban-regex systemd-journal sshd
Wenn die Zähler trotz echter Anmeldefehler bei Null bleiben, überprüfen Sie den protokollierten Dienst, den ausgewählten Filter, das Backend und den SSH-Port.
5. Überprüfen Sie die Firewall-Aktion
sudo fail2ban-client get sshd actions
sudo nft list ruleset | grep -iE 'f2b|fail2ban'
sudo iptables -S | grep -i f2b
Fail2ban kann je nach Distribution, Paketversion und Ihrer Konfiguration nftables oder iptables verwenden. Erzwingen Sie keine andere Aktion, ohne die aktuell verwendete Firewall zu identifizieren.
Die häufigsten Fehler
Sich selbst sperren
Fünf falsche Passwörter können Ihre IP für die gesamte Dauer, die durch bantime festgelegt ist, blockieren. Halten Sie eine Webkonsole verfügbar und fügen Sie nur Ihre vertrauenswürdigen festen IPs in ignoreip ein.
Direktes Ändern von jail.conf
Die Dateien .conf werden mit dem Paket verteilt. Verwenden Sie eine .local-Datei, um eine lesbare Konfiguration beizubehalten und Updates zu erleichtern.
Den benutzerdefinierten SSH-Port vergessen
Fail2ban kann Fehler erkennen, ohne den richtigen Port zu blockieren, wenn die Jail und der Dienst nicht übereinstimmen. Vergleichen Sie die Ausgabe von sshd -T mit dem Parameter port.
Annehmen, dass der Syntaxtest ausreicht
fail2ban-client -t ersetzt keinen Test des Filters und eine Überprüfung der Firewall-Regeln. Überprüfen Sie die drei Ebenen: Konfiguration, Erkennung und Sperrung.
Die Adresse eines Reverse-Proxys sperren
Ohne korrekte Konfiguration der tatsächlichen IPs kann Fail2ban nur die Adresse von Cloudflare oder dem Proxy sehen. Korrigieren Sie zuerst die Nginx-Protokolle, bevor Sie die HTTP-Jails aktivieren.
Glauben, dass Fail2ban DDoS-Angriffe blockiert
Fail2ban wirkt, nachdem die Verbindungen auf dem Server angekommen sind. Es kann Brute-Force-Angriffe reduzieren, kann jedoch nicht verhindern, dass ein volumetrischer Angriff die Netzwerkverbindung upstream überlastet.
Die Sicherheit des VPS tatsächlich verstärken
Für einen konsistenten Schutz kombinieren Sie Fail2ban mit mehreren Maßnahmen:
- Verwenden Sie SSH-Schlüssel und deaktivieren Sie die Passwortauthentifizierung, wenn möglich — lesen Sie unser Handbuch zur Konfiguration eines SSH-Schlüssels auf einem Linux-VPS;
- Verweigern Sie den direkten SSH-Zugang von
root; - Öffnen Sie nur die notwendigen Ports mit einer Firewall;
- Installieren Sie regelmäßig Sicherheitsupdates;
- Überwachen Sie die Protokolle und Warnungen des Servers;
- Behalten Sie einen Backup-Zugang zur Konsole;
- Aktivieren Sie HTTPS für Webdienste.
Unser Handbuch Certbot: Installieren eines SSL-Zertifikats von Let's Encrypt ergänzt diese Konfiguration. Sie können auch unsere anderen Tutorials in der Linux-Dokumentation finden.
Fail2ban und DDoS-Schutz adressieren zwei unterschiedliche Risiken. Fail2ban blockiert identifizierte Verhaltensweisen in den Serverprotokollen, während DDoS-Schutz den volumetrischen Verkehr upstream filtert. Die VPS Linux OuiHeberg beinhalten DDoS-Schutz und Root-Zugang, um die Einstellungen dieses Handbuchs anzuwenden.
FAQ zu Fail2ban
Funktioniert Fail2ban mit UFW, nftables oder iptables?
Ja, aber die verwendete Aktion hängt vom Paket und der Serverkonfiguration ab. Überprüfen Sie dies mit sudo fail2ban-client get sshd actions, und überprüfen Sie dann die Regeln mit nft list ruleset oder iptables -S. Vermeiden Sie es, zu behaupten, dass ein System standardmäßig verwendet wird, ohne es auf der betreffenden Maschine zu überprüfen.
Schützt Fail2ban vor DDoS-Angriffen?
Nein. Es behandelt hauptsächlich wiederholte Verhaltensweisen, die in den Protokollen sichtbar sind, wie SSH- oder HTTP-Fehler. Ein volumetrischer Angriff muss durch die Netzwerk-Infrastruktur des Hosting-Anbieters gefiltert werden.
Sollte man den SSH-Port ändern?
Das Ändern des SSH-Ports reduziert normalerweise den Lärm automatisierter Scans, bietet jedoch keinen starken Schutz: Ein vollständiger Scan kann den neuen Port finden. SSH-Schlüssel, die Deaktivierung von Passwörtern und die Netzwerkfilterung bleiben vorrangig.
Warum sperrt Fail2ban keine IP?
Die häufigsten Ursachen sind eine inaktive Jail, ein falsches Backend, ein fehlendes Protokoll, ein Filter, der nicht zu den Protokollen passt, oder eine falsche Firewall-Aktion. Überprüfen Sie nacheinander status, fail2ban-regex, die Protokolle des Dienstes und die Firewall-Regeln.
Quellen und Überprüfungsmethode
Dieses Handbuch wurde anhand der folgenden offiziellen Ressourcen überprüft:
- offizielle Fail2ban-Konfiguration und Jail-Parameter;
- Handbuch
jail.confvon Fail2ban 1.1.0 unter Debian 13; - Handbuch
fail2ban-clientvon Fail2ban 1.1.0; - Handbuch zum Testen von Filtern mit
fail2ban-regex; - Debian 12 Hinweise zum Wechsel von rsyslog zu systemd-journald als Standard;
- Fail2ban-Paket 1.0.2, das mit Ubuntu 24.04 LTS geliefert wird.
Die Befehle müssen immer auf dem Zielserver überprüft werden, da ein benutzerdefinierter SSH-Port, eine ersetzte Firewall oder eine geänderte Protokollierung das Ergebnis ändern können.
Fazit
Eine zuverlässige Fail2ban-Konfiguration beschränkt sich nicht nur auf die Installation des Pakets. Es muss überprüft werden, dass die Jail aktiv ist, dass der Filter tatsächlich die Fehler erkennt und dass die Firewall das Verbot durchsetzt.
Für einen klassischen Debian- oder Ubuntu-VPS ist eine SSH-Jail mit fünf Versuchen innerhalb von zehn Minuten, einem anfänglichen Verbot von einer Stunde und progressiven Zeiträumen eine angemessene Basis. Passen Sie diese Werte jedoch an Ihre Benutzer an, behalten Sie einen Notzugang und kombinieren Sie Fail2ban mit SSH-Schlüsseln, einer strengen Firewall und regelmäßigen Updates.
Fail2ban ist freie Software und funktioniert bei allen kompatiblen Hosting-Anbietern. Wenn Sie eine Linux-Umgebung mit Root-Zugriff und DDoS-Schutz suchen, entdecken Sie die VPS Linux NVMe OuiHeberg.
