Fail2Ban¶
Fail2Ban überwacht Log-Dateien und sperrt IPs, die verdächtige Aktivitäten zeigen.
Warum Fail2Ban?¶
Defense in Depth
Fail2Ban ergänzt die SSH-Härtung und Firewall als weitere Sicherheitsebene. Selbst wenn ein Angreifer die Firewall passiert, wird er nach wenigen Fehlversuchen gesperrt.
sequenceDiagram
participant A as Angreifer
participant F as Fail2Ban
participant S as SSH-Server
participant FW as Firewall
A->>S: Login-Versuch 1 (falsch)
S->>F: Log: Failed password
A->>S: Login-Versuch 2 (falsch)
S->>F: Log: Failed password
A->>S: Login-Versuch 3 (falsch)
S->>F: Log: Failed password
F->>FW: Ban IP für 1h
A->>FW: Login-Versuch 4
FW-->>A: Connection refused
1. Fail2Ban installieren¶
2. Konfiguration erstellen¶
Niemals jail.conf direkt bearbeiten
Die Datei /etc/fail2ban/jail.conf wird bei
Updates überschrieben. Erstelle stattdessen eine eigene Konfiguration.
Erstelle die lokale Konfigurationsdatei:
3. Jail-Konfiguration anpassen¶
Bearbeite die lokale Konfiguration:
Globale Einstellungen¶
Ersetze die [DEFAULT] Sektion:
[DEFAULT]
# Ignorierte IPs (deine eigene IP hinzufügen!)
ignoreip = 127.0.0.1/8 ::1
# Ban-Dauer (in Sekunden)
bantime = 1h # (1)!
# Zeitfenster für Fehlversuche
findtime = 10m # (2)!
# Anzahl Fehlversuche bis zum Ban
maxretry = 3 # (3)!
# Backend für Log-Überwachung
backend = systemd # (4)!
# Ban-Aktion (iptables/nftables)
banaction = iptables-multiport
banaction_allports = iptables-allports
- Ban-Dauer: 1 Stunde. Kann erhöht werden (z.B.
24h,1w). - Zeitfenster: 3 Fehlversuche in 10 Minuten = Ban.
- Maximal 3 Fehlversuche.
- Verwendet systemd für Log-Zugriff (modern und zuverlässig).
SSH-Jail konfigurieren¶
Füge am Ende der Datei hinzu oder bearbeite den existierenden [sshd] Block:
[sshd]
enabled = true
mode = aggressive # (1)!
port = 2222
filter = sshd
logpath = /var/log/auth.log
backend = systemd
maxretry = 3
findtime = 10m
bantime = 1h
- Aggressiver Modus: Erkennt mehr Angriffsmuster.
Erweiterte Jails (optional)¶
Nginx-Jail
Recidive-Jail (Wiederholungstäter)
[recidive]
enabled = true
logpath = /var/log/fail2ban.log
banaction = %(banaction_allports)s
bantime = 1w # 1 Woche
findtime = 1d # 1 Tag
maxretry = 3 # Nach 3 Bans = langer Ban
Dieses Jail sperrt IPs, die wiederholt gesperrt wurden, für eine längere Zeit.
4. Fail2Ban starten¶
# Dienst starten
sudo systemctl start fail2ban
# Beim Boot automatisch starten
sudo systemctl enable fail2ban
5. Status überprüfen¶
Dienst-Status¶
Erwartete Ausgabe:
● fail2ban.service - Fail2Ban Service
Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled)
Active: active (running) since ...
Jail-Status¶
Ausgabe:
Detaillierter SSH-Jail-Status¶
Ausgabe:
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 5
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 1
|- Total banned: 2
`- Banned IP list: 192.168.1.100
6. Testen der Konfiguration¶
Nur von einer anderen IP testen!
Teste nicht von deiner eigenen IP, sonst sperrst du dich aus.
Von einem anderen System aus (z.B. VPN oder anderem Server):
Nach 3 Versuchen sollte die Verbindung blockiert werden.
Auf dem Server überprüfen:
Zusammenfassung¶
Nach Abschluss dieses Abschnitts:
- Fail2Ban installiert und konfiguriert
- SSH-Jail aktiviert mit sinnvollen Schwellenwerten
- Dienst gestartet und für Autostart aktiviert
Server-Härtung abgeschlossen!¶
Gratulation! Die grundlegende Server-Härtung ist abgeschlossen.
Du hast folgende Sicherheitsmaßnahmen implementiert:
- System aktualisiert und Basis-Setup durchgeführt
- SSH gehärtet
- Firewall konfiguriert
- Fail2Ban für Brute-Force-Schutz