Sicherheit

fail2ban erklärt — Brute-Force-Schutz für SSH und Webserver

Direkte Antwort: fail2ban beobachtet Logfiles auf fehlgeschlagene Login-Versuche und sperrt aufdringliche IPs automatisch via Firewall-Regel. Auf einem OpenClaw-Server schützt es vor allem SSH, kann aber auch nginx, Postfix oder andere Dienste absichern.

Was ist fail2ban?

fail2ban ist ein klassisches Linux-Sicherheits-Tool, das automatisch IPs blockt, von denen wiederholt fehlgeschlagene Login-Versuche kommen. Es überwacht Logfiles, erkennt Muster (z.B. "X fehlgeschlagene SSH-Logins in Y Sekunden") und schreibt eine Firewall-Regel, die diese IP für eine definierte Zeit aussperrt.

Auf einem öffentlich erreichbaren Server (z.B. einem Hetzner-VPS, auf dem dein OpenClaw-Agent läuft) ist fail2ban ein Muss. Innerhalb von Minuten nach Inbetriebnahme treffen die ersten Brute-Force-Versuche aus aller Welt ein.

Kontext

Brute-Force-Attacken auf SSH sind keine theoretische Bedrohung. Wer ein frisches VPS aufsetzt und nichts macht, sieht in den Logs schon nach 30 Minuten dutzende Login-Versuche aus China, Russland und Vietnam. Ohne Schutz ist es eine Frage der Zeit, bis ein schwaches Passwort geknackt wird.

fail2ban ist die einfachste, schnellste und stabilste Antwort darauf. Es ist seit 2004 verfügbar, sehr gut getestet und auf jeder Distribution ein Apt/Dnf-Paket entfernt.

Funktionsweise

fail2ban arbeitet in drei Komponenten:

  1. Filter: Regex-Muster, die fehlgeschlagene Logins in Logfiles erkennen
  2. Jail: Eine Konfiguration, die einen Filter mit Aktion und Limits verbindet
  3. Action: Was passieren soll bei Treffer (typisch: IP via iptables/nftables blocken)

Standard-Verhalten:

  • 3 fehlgeschlagene SSH-Logins in 10 Minuten -> IP für 10 Minuten gesperrt
  • Bei wiederholtem Vorfall -> längere Sperre

Praxis-Beispiel

Installation auf Ubuntu/Debian:

sudo apt update
sudo apt install fail2ban
sudo systemctl enable --now fail2ban

Konfiguration: Erstelle eine lokale Override-Datei (Original nicht editieren):

sudo nano /etc/fail2ban/jail.local

Inhalt:

[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 3
backend = systemd
ignoreip = 127.0.0.1/8 ::1

[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 24h

Aktivieren:

sudo systemctl restart fail2ban
sudo fail2ban-client status sshd

Beispiel-Output von fail2ban-client status sshd:

Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     127
|  `- File list:        /var/log/auth.log
`- Actions
   |- Currently banned: 4
   |- Total banned:     38
   `- Banned IP list:   45.146.165.x 121.227.31.x 45.95.169.x ...

Erweiterte Jails

fail2ban kann mehr als SSH:

[nginx-http-auth]
enabled = true
filter = nginx-http-auth
port = http,https
logpath = /var/log/nginx/error.log
maxretry = 3

[postfix]
enabled = true
filter = postfix
logpath = /var/log/mail.log
maxretry = 5

Praxis-Setup für OpenClaw-Server:

  • SSH (auf Port 22 oder Custom-Port)
  • nginx (falls du eine Web-UI hostest)
  • Webhook-Endpoint (eigener Filter für deine API)

fail2ban + UFW

UFW und fail2ban beißen sich nicht — sie ergänzen sich. UFW ist die statische Firewall (welche Ports sind offen?), fail2ban die dynamische Reaktion (welche IPs sind aktuell zu aggressiv?). Beide sollten gleichzeitig laufen.

| Aspekt | UFW | fail2ban | | --- | --- | --- | | Zweck | Statische Port-Regeln | Dynamische IP-Bans | | Konfiguration | Selten geändert | Reagiert kontinuierlich | | Schutz vor | Unerwünschten Ports | Brute-Force-Attacken |

Häufige Fehler / Stolperfallen

  1. Eigene IP nicht gewhitelistet: Wenn du dich aus Versehen 5x falsch einloggst, sperrst du dich selbst aus. Setze deine eigene IP in ignoreip. Lockout-Recovery: Über das Hetzner Web-Console-Feature einloggen.
  2. Logpath falsch: Auf systemd-Systemen liegt SSH-Log meist im Journal, nicht in /var/log/auth.log. Dann backend = systemd setzen.
  3. bantime zu kurz: 10 Minuten reichen oft nicht — Bots versuchen es einfach später nochmal. Stunden oder Tage sind sinnvoller.
  4. maxretry zu hoch: "10 Versuche erlauben" lädt Bots ein. 3 reicht für Menschen aus, Bots werden schnell rausgekickt.
  5. Nicht testen: Nach Setup einmal absichtlich falsch einloggen und prüfen, ob Ban greift. sudo fail2ban-client status sshd zeigt's.

fail2ban + SSH-Key statt Passwort

Die wirkungsvollste Maßnahme bleibt: Passwort-Auth komplett deaktivieren und nur SSH-Keys erlauben. Damit nutzen Brute-Force-Versuche nichts mehr, fail2ban hält trotzdem die Logs sauber:

# /etc/ssh/sshd_config
PasswordAuthentication no
PermitRootLogin no

Manuell IPs unbannen

Falls du eine IP manuell entsperren willst:

sudo fail2ban-client set sshd unbanip 1.2.3.4

Oder eine IP explizit bannen:

sudo fail2ban-client set sshd banip 1.2.3.4

fail2ban-Logs prüfen

Logs gehen ins systemd-Journal:

sudo journalctl -u fail2ban -f
sudo journalctl -u fail2ban --since "24 hours ago"

Beispiel-Eintrag bei einem Ban:

fail2ban.actions: WARNING [sshd] Ban 45.146.165.x

fail2ban + Tailscale

Wenn du Tailscale nutzt, ist fail2ban für SSH meist überflüssig — denn dein SSH ist gar nicht mehr öffentlich erreichbar. fail2ban macht aber weiterhin Sinn für andere öffentliche Services (nginx-Auth, Webhooks).

Performance-Aspekt

fail2ban liest Logfiles permanent. Auf großen Servern mit viel Traffic kann das CPU kosten. Lösung: backend = systemd statt polling, das ist effizienter weil event-getrieben statt File-Polling.

Verwandte Begriffe

Vollständiges Server-Hardening: Modul 2 der Masterclass und Modul 6.

Tipp: OpenClaw braucht einen Server, auf dem es 24/7 läuft. Hostinger KVM 2 in Frankfurt reicht für den Anfang und kostet nur wenige Euro im Monat. Hostinger ansehenAffiliate-Link — wir erhalten eine Provision, wenn du über diesen Link bestellst. Für dich ändert sich am Preis nichts.

Weitere Begriffe

Soul.md

Die Persönlichkeits-Datei deines OpenClaw-Agenten.

Heartbeat

Das System, das deinen OpenClaw-Agenten proaktiv arbeiten lässt.

Model Context Protocol (MCP)

Ein Standard-Protokoll für die Kommunikation zwischen KI-Agenten und externen Tools.

Identity File

Die Grundkonfiguration, die festlegt, wer dein Agent ist und wie er sich verhält.

OpenClaw Skills

Vorgefertigte Fähigkeiten, die deinem Agent beibringen, externe Tools zu nutzen.

OpenClaw Gateway

Der laufende Prozess, der deinen Agenten mit Messengern verbindet.

Anthropic API

Pay-per-Use API für Claude — die direkte Schnittstelle zu Anthropics LLMs.

Claude Token

Authentifizierungs-Token für Claude Pro und Max — günstiger als API-Pay-per-Use.

Tool Use

Mechanismus, mit dem LLMs externe Funktionen aufrufen — die Grundlage agentischer Systeme.

RAG (Retrieval-Augmented Generation)

KI-Antworten mit zusätzlichem Wissen aus Dokumenten oder Vektor-Datenbanken anreichern.

Cron / Crontab

Linux-Standard für zeitgesteuerte Aufgaben — die Grundlage proaktiver KI-Agenten.

systemd

Linux Service-Manager — startet OpenClaw automatisch und überwacht den Prozess.

UFW (Uncomplicated Firewall)

Einfache Firewall-Konfiguration unter Ubuntu — Default-Deny mit selektiven Allows.

Tailscale

Mesh-VPN — sicherer Remote-Zugriff auf den eigenen KI-Server ohne offene Ports.

Webhook

HTTP-Callback für ereignisbasierte Integrationen — wie Telegram OpenClaw kontaktiert.

Prompt Injection

Angriffstechnik gegen LLM-Systeme — OWASP-LLM-Top-1-Risiko.

User.md

Datei mit Nutzer-Infos für Personalisierung deines OpenClaw-Agenten.