
- Fail2ban analysiert Logdateien und sperrt IPs nach mehrfachen Fehlversuchen temporär.
- Installation via apt, yum oder dnf – je nach Distribution.
- Wichtige Parameter: bantime, findtime, maxretry – individuell anpassbar.
- Eigene Filter für Apache, Nginx oder andere Dienste erstellbar.
- DSGVO-konformer Betrieb durch regelmäßige Löschung alter Logs.
Einleitung
Brute-Force-Angriffe gehören zu den häufigsten Bedrohungen für Linux-Server. Ich sehe das immer wieder: Logdateien quellen über, die CPU-Last steigt, und irgendwann ist der Server kompromittiert. Fail2ban ist ein Intrusion-Prevention-Tool, das Logdateien in Echtzeit analysiert und auffällige IPs temporär sperrt. In dieser Anleitung zeige ich Ihnen, wie Sie Fail2ban auf Ihrem Server installieren, konfigurieren und für verschiedene Dienste nutzen – mit Fokus auf deutsche Umgebungen und DSGVO-konformes Logging.
1. Schritt: Fail2ban installieren
Die Installation ist unkompliziert. Für Debian/Ubuntu verwenden Sie:
sudo apt update && sudo apt install fail2ban -yFür CentOS/RHEL 7 oder älter:
sudo yum install epel-release && sudo yum install fail2ban -yFür Fedora und CentOS 8+:
sudo dnf install fail2ban -yÜberprüfen Sie die Installation mit fail2ban-client --version. Erscheint eine Versionsnummer, ist alles bereit. (Ich bevorzuge die Version 0.11.x wegen der verbesserten Regex-Unterstützung.)
2. Schritt: Grundkonfiguration vornehmen
Die Hauptkonfiguration liegt in /etc/fail2ban/jail.conf. Diese Datei wird bei Updates überschrieben. Erstellen Sie daher eine lokale Kopie:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.localBearbeiten Sie jail.local. Die wichtigsten Parameter:
ignoreip: IPs, die niemals gesperrt werden – zwingend Ihre eigene IP und localhost.bantime: Dauer der Sperre in Sekunden. Empfehlung: 600 (10 Minuten) für erste Tests, später 3600 (1 Stunde).findtime: Zeitfenster, in dem Fehlversuche gezählt werden (z. B. 600 Sekunden).maxretry: Anzahl der Fehlversuche vor Sperre. Standard 5, ich setze oft 3.
Beispiel für SSH ([sshd]):
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 6003. Schritt: Einen benutzerdefinierten Filter erstellen
Filter liegen in /etc/fail2ban/filter.d/. Ein Filter definiert, welche Logmuster zu einer Sperre führen. Ich zeige Ihnen einen Filter gegen 404-Scans in Nginx. Erstellen Sie /etc/fail2ban/filter.d/nginx-404.conf:
[Definition]
failregex = ^ .* "GET .* HTTP/.*" 404 .*$
ignoreregex = Dann aktivieren Sie den Jail in jail.local:
[nginx-404]
enabled = true
filter = nginx-404
logpath = /var/log/nginx/access.log
maxretry = 5
bantime = 600Testen Sie den Filter mit sudo fail2ban-regex /var/log/nginx/access.log /etc/fail2ban/filter.d/nginx-404.conf. (Ich mache das immer vor der Aktivierung, um false positives zu vermeiden.)
4. Schritt: Fail2ban aktivieren und testen
Starten und aktivieren Sie den Dienst:
sudo systemctl enable fail2ban
sudo systemctl start fail2banPrüfen Sie den Status mit sudo fail2ban-client status. Sie sollten die aktiven Jails sehen. Simulieren Sie einen Angriff: Melden Sie sich mehrfach falsch per SSH an. Überprüfen Sie mit sudo fail2ban-client status sshd, ob die IP gesperrt wurde. (Einmal habe ich vergessen, ignoreip zu setzen – und mich selbst ausgesperrt. Seitdem bin ich vorsichtig.)
5. Schritt: Überwachung und Logging einrichten
Fail2ban schreibt seine eigenen Logs nach /var/log/fail2ban.log. Ich empfehle, diese regelmäßig zu rotieren (logrotate) und auf verdächtige Muster zu prüfen. Für E-Mail-Benachrichtigungen aktivieren Sie in jail.local:
[DEFAULT]
action = %(action_mwl)sDas versendet eine Mail mit Logauszug. Achten Sie auf DSGVO: IP-Adressen sind personenbezogene Daten. Löschen Sie Logs nach spätestens 7 Tagen oder anonymisieren Sie sie. (Ich habe eine cron-Job, der Logs älter als 3 Tage komprimiert und nach 30 Tagen löscht.)
6. Schritt: Fail2ban für verschiedene Dienste konfigurieren
Hier eine Übersicht empfohlener Parameter für gängige Dienste:
| Dienst | maxretry | bantime (Sekunden) | findtime (Sekunden) |
|---|---|---|---|
| SSH | 3 | 600 | 600 |
| Apache (auth) | 5 | 300 | 300 |
| Nginx (404) | 10 | 600 | 600 |
| Postfix (SASL) | 3 | 3600 | 3600 |
| vsftpd | 5 | 600 | 600 |
Passen Sie die Werte an Ihre Umgebung an. (Ich setze bei kritischen Diensten wie SSH lieber niedrige maxretry-Werte.)
Häufige Fehler und deren Vermeidung
- Fehler 1: jail.local nicht erstellt. Änderungen in jail.conf gehen bei Updates verloren. Erstellen Sie immer jail.local.
- Fehler 2: Falsche Regex im Filter. Testen Sie mit
fail2ban-regex, bevor Sie den Jail aktivieren. - Fehler 3: Zu kurze bantime. 10 Minuten sind ein guter Start, für Brute-Force-Angriffe empfehle ich mindestens 1 Stunde.
- Fehler 4: Ignorieren eigener IPs vergessen. Setzen Sie
ignoreip = 127.0.0.1/8 ::1plus Ihre öffentliche IP. - Fehler 5: Keine Überwachung der Logs. Prüfen Sie regelmäßig
/var/log/fail2ban.logauf Fehler oder unerwartete Sperren.
FAQ – Häufig gestellte Fragen
Kann Fail2ban auch DDoS-Angriffe abwehren?
Nein, Fail2ban ist gegen Brute-Force-Angriffe konzipiert, nicht gegen DDoS. Für DDoS benötigen Sie spezialisierte Tools wie iptables-Rate-Limiting oder Cloud-Dienste.
Wie kann ich eine gesperrte IP manuell entsperren?
Mit sudo fail2ban-client set <jail> unbanip <IP>. Ersetzen Sie <jail> durch den Jail-Namen (z. B. sshd).
Ist Fail2ban DSGVO-konform?
Ja, wenn Sie die Logs regelmäßig löschen und IPs nicht länger als nötig speichern. Empfehlung: Log-Rotation nach 7 Tagen, Löschung nach 30 Tagen.
Kann ich Fail2ban mit mehreren Servern nutzen?
Ja, über eine zentrale Datenbank (z. B. MySQL) oder das fail2ban-client-Remote-Interface. Für kleine Setups reicht die lokale Konfiguration.
Welche Linux-Distributionen werden unterstützt?
Alle gängigen: Debian, Ubuntu, CentOS, Fedora, openSUSE, Arch Linux. Die Installation variiert leicht, die Konfiguration ist identisch.
Das war’s. Fail2ban ist ein mächtiges Werkzeug – aber nur, wenn Sie es richtig konfigurieren. Testen Sie die Einstellungen in einer sicheren Umgebung, bevor Sie sie produktiv einsetzen. Haben Sie eigene Tipps oder Fragen? Schreiben Sie einen Kommentar – ich lese mit.




