Fail2Ban einrichten: Der automatische Türsteher für Ihren Server
Zurück
Einleitung: Warum Sie Fail2Ban lieben lernen werden
Stellen Sie sich vor: Ein Einbrecher versucht ständig, Ihre Haustür aufzubrechen. Jedes Mal, wenn er es versucht, notieren Sie seine Gesichtszüge. Beim 3. Versuch ruft die Polizei und stellt ihn für eine Stunde an den Pranger.
Das ist Fail2Ban in Aktion – Ihr persönlicher, unermüdlicher Türsteher, der 24/7 aufpasst und Angreifer automatisch blockiert.
Was ist Fail2Ban? Einfach erklärt
Die Grundidee
text
Fail2Ban überwacht Log-Dateien → Findet fehlgeschlagene Login-Versuche → Zählt, wie oft eine IP das versucht → Blockt diese IP nach zu vielen Versuchen → Entblockt sie nach einer gewissen Zeit
Reales Beispiel aus meinem Server
text
14:30:01 - IP 45.67.89.123 - Failed SSH login 14:30:03 - IP 45.67.89.123 - Failed SSH login 14:30:05 - IP 45.67.89.123 - Failed SSH login 14:30:06 - FAIL2BAN: IP 45.67.89.123 für 1 Stunde geblockt! ✅
Das Beste: Fail2Ban läuft automatisch, 24/7, kostenlos.
Warum JEDER Server-Betreiber Fail2Ban braucht
Die erschreckende Statistik
text
• Ein ungeschützter Server wird durchschnittlich alle 39 Sekunden gescannt • Pro Tag: ~2.200 automatische Angriffsversuche • Ohne Schutz: Erfolg nach 5-10 Tagen garantiert • Mit Fail2Ban: 99% der Angriffe werden blockiert
Was ohne Fail2Ban passiert
bash
# Was Hacker auf Ihrem Server sehen $ nmap -p 22 123.123.123.123 PORT STATE SERVICE 22/tcp open ssh # Sie probieren aus... $ hydra -l root -P passlist.txt ssh://123.123.123.123 [22][ssh] host: 123.123.123.123 login: root password: admin123 # ERFOLG! Server geknackt.
Mit Fail2Ban: Nach 3 Versuchen ist die IP geblockt. Game over für den Hacker.
Schritt-für-Schritt: Fail2Ban installieren (5 Minuten)
Für Ubuntu/Debian Server
bash
# 1. System updaten sudo apt update sudo apt upgrade -y # 2. Fail2Ban installieren sudo apt install fail2ban -y # 3. Dienst starten und aktivieren sudo systemctl start fail2ban sudo systemctl enable fail2ban # 4. Status prüfen sudo systemctl status fail2ban
Für CentOS/RHEL/AlmaLinux
bash
# 1. EPEL Repository hinzufügen (falls nötig) sudo yum install epel-release -y # 2. Fail2Ban installieren sudo yum install fail2ban -y # 3. Dienst starten sudo systemctl start fail2ban sudo systemctl enable fail2ban
Die wichtigste Konfiguration: jail.local
Die Basis-Konfiguration erstellen
bash
# Original-Konfiguration kopieren sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local # Konfiguration bearbeiten sudo nano /etc/fail2ban/jail.local
Minimal-Konfiguration für den Anfang
ini
[DEFAULT] # Ignoriere unsere eigene IP (wichtig!) ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 123.123.123.123 # Wie lange blockieren? (in Sekunden) bantime = 3600 # 1 Stunde # Für hartnäckige Angreifer: # bantime = 86400 # 24 Stunden # Zeitfenster für Zählung (in Sekunden) findtime = 600 # 10 Minuten # Maximal erlaubte Versuche maxretry = 3 # Nach 3 Fehlversuchen blockieren # Mail-Benachrichtigungen (optional) destemail = admin@ihredomain.de sender = fail2ban@ihredomain.de mta = sendmail action = %(action_mwl)s # Blockieren + Email senden
Die 5 wichtigsten Jail-Konfigurationen
1. SSH Schutz (absolut essentiell!)
ini
[sshd] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 3 bantime = 86400 # 24 Stunden bei SSH-Angriffen
2. WordPress Login Schutz
ini
[wordpress]
enabled = true
port = http,https
filter = wordpress
logpath = /var/log/nginx/wordpress-access.log
/var/log/apache2/wordpress-access.log
maxretry = 5
bantime = 3600
3. FTP Schutz (ProFTPD/vsftpd)
ini
[proftpd] enabled = true port = ftp,ftp-data,ftps,ftps-data filter = proftpd logpath = /var/log/proftpd/proftpd.log maxretry = 3 [vsftpd] enabled = true port = ftp,ftp-data,ftps,ftps-data filter = vsftpd logpath = /var/log/vsftpd.log
4. MySQL/MariaDB Schutz
ini
[mysqld-auth] enabled = true filter = mysqld-auth port = 3306 logpath = /var/log/mysql/error.log maxretry = 3
5. phpMyAdmin Schutz
ini
[phpmyadmin-syslog] enabled = true port = http,https filter = phpmyadmin logpath = /var/log/phpmyadmin/access.log maxretry = 3
Filter erstellen: Fail2Ban sagen, wonach es suchen soll
Beispiel: WordPress Login Filter
bash
sudo nano /etc/fail2ban/filter.d/wordpress.conf
ini
[Definition]
failregex = ^<HOST>.*POST.*wp-login\.php.* 200
^<HOST>.*POST.*wp-login\.php.* 302
ignoreregex =
Beispiel: Nginx/Apache Login Filter
bash
sudo nano /etc/fail2ban/filter.d/nginx-http-auth.conf
ini
[Definition]
failregex = ^<HOST>.*"POST /wp-login\.php HTTP/.*" 200
^<HOST>.*"GET /wp-admin/ HTTP/.*" 200
datepattern = %%d/%%b/%%Y:%%H:%%M:%%S %%z
Fail2Ban in Aktion: So sieht es aus
Die Logs von Fail2Ban
bash
# Fail2Ban Logs anzeigen sudo tail -f /var/log/fail2ban.log
Typische Ausgabe:
text
2024-01-15 14:30:05 [sshd] Ban 45.67.89.123 2024-01-15 14:30:10 [wordpress] Ban 78.91.23.45 2024-01-15 14:45:22 [sshd] Unban 45.67.89.123
Aktuell geblockte IPs anzeigen
bash
# SSH geblockte IPs sudo fail2ban-client status sshd # Alle aktiven Jails sudo fail2ban-client status # Details zu einem Jail sudo fail2ban-client get sshd banip
Praktische Tipps für den Alltag
1. IP manuell blockieren (wenn nötig)
bash
# IP sofort blockieren sudo fail2ban-client set sshd banip 123.123.123.123 # IP entsperren sudo fail2ban-client set sshd unbanip 123.123.123.123
2. Fail2Ban neu laden (nach Konfig-Änderungen)
bash
# Konfiguration neu laden sudo fail2ban-client reload # Oder Dienst neu starten sudo systemctl restart fail2ban
3. Logging überprüfen
bash
# Letzte 50 Zeilen der Fail2Ban Logs sudo tail -50 /var/log/fail2ban.log # Nach bestimmten IPs suchen sudo grep "45.67.89.123" /var/log/fail2ban.log
Fortgeschrittene Konfiguration
Whitelist für vertrauenswürdige IPs
ini
# In jail.local unter [DEFAULT]
ignoreip = 127.0.0.1/8 ::1
192.168.1.0/24 # Lokales Netzwerk
123.123.123.123 # Ihre eigene IP
89.163.123.45 # Büro-IP
1.2.3.4 # Kollege
Unterschiedliche Bantimes für verschiedene Dienste
ini
[sshd] bantime = 86400 # 24h - SSH ist kritisch [wordpress] bantime = 3600 # 1h - Web-Login weniger kritisch [proftpd] bantime = 7200 # 2h - Mittel
Email-Benachrichtigungen einrichten
ini
[DEFAULT] destemail = admin@ihredomain.de sender = fail2ban@ihredomain.de mta = sendmail action = %(action_mwl)s # mwl = mail with loglines
Fail2Ban mit Cloudflare kombinieren
Cloudflare-Integration für zusätzlichen Schutz
bash
# Cloudflare Filter installieren sudo apt install python3-pip sudo pip3 install cfail2ban # Konfiguration erstellen sudo nano /etc/fail2ban/action.d/cloudflare.conf
ini
[Definition]
actionstart =
actionstop =
actioncheck =
actionban = curl -s -X POST "https://api.cloudflare.com/client/v4/zones/<ZONE_ID>/firewall/access_rules/rules" \
-H "X-Auth-Email: <EMAIL>" \
-H "X-Auth-Key: <API_KEY>" \
-H "Content-Type: application/json" \
--data '{"mode":"block","configuration":{"target":"ip","value":"<ip>"},"notes":"Banned by Fail2Ban"}'
actionunban = curl -s -X DELETE "https://api.cloudflare.com/client/v4/zones/<ZONE_ID>/firewall/access_rules/rules/<RULE_ID>" \
-H "X-Auth-Email: <EMAIL>" \
-H "X-Auth-Key: <API_KEY>"
Monitoring: Fail2Ban im Blick behalten
Einfaches Monitoring-Script
bash
#!/bin/bash
# /usr/local/bin/check-fail2ban.sh
JAILS=$(sudo fail2ban-client status | grep "Jail list" | sed 's/.*Jail list://' | tr ',' '\n')
echo "=== Fail2Ban Status am $(date) ==="
echo ""
for jail in $JAILS; do
jail=$(echo $jail | xargs)
STATUS=$(sudo fail2ban-client status $jail | grep "Currently banned")
echo "$jail: $STATUS"
done
echo ""
echo "=== Letzte 10 Blocks ==="
sudo tail -10 /var/log/fail2ban.log | grep "Ban"
Als Cronjob (stündlich):
bash
0 * * * * /usr/local/bin/check-fail2ban.sh >> /var/log/fail2ban-status.log
Problembehandlung: Wenn's mal nicht klappt
Häufige Probleme und Lösungen
1. Fail2Ban blockiert mich selbst
bash
# Soforthilfe: IP entsperren sudo fail2ban-client set sshd unbanip IHRE_IP # Dauerhaft: Zur Whitelist hinzufügen # In jail.local: ignoreip = ... IHRE_IP
2. Fail2Ban startet nicht
bash
# Fehler anzeigen sudo systemctl status fail2ban -l # Konfiguration testen sudo fail2ban-client -t # Logs prüfen sudo journalctl -u fail2ban -f
3. Zu viele false positives
ini
# In jail.local: maxretry = 6 # Höher setzen bantime = 600 # Kürzer setzen (10 Minuten)
Fail2Ban vs. Andere Lösungen
Vergleichstabelle
| Lösung | Kosten | Einrichtung | Wirksamkeit | Für wen? |
|---|---|---|---|---|
| Fail2Ban | Kostenlos | Mittel | Sehr hoch | Server-Betreiber |
| Cloudflare WAF | Ab $20/Monat | Einfach | Hoch | Alle Websites |
| Wordfence Premium | $99/Jahr | Sehr einfach | Hoch | WordPress |
| CSF Firewall | Kostenlos | Komplex | Sehr hoch | Experten |
Fail2Bans Vorteile: Kostenlos, flexibel, leichtgewichtig, bewährt.
Sicherheitsbest Practices
Was Sie zusätzlich tun sollten
1. SSH Port ändern
bash
# /etc/ssh/sshd_config Port 22222 # statt 22
2. Root-Login deaktivieren
bash
# /etc/ssh/sshd_config PermitRootLogin no
3. SSH Keys statt Passwörter
bash
# Auf Client: ssh-keygen -t ed25519 # Auf Server: ssh-copy-id benutzer@server
4. Regelmäßige Updates
bash
# Fail2Ban updaten sudo apt update && sudo apt upgrade fail2ban # Regelmäßig Logs prüfen sudo fail2ban-client status
Fail2Ban Statistiken auswerten
Nützliche Befehle für Insights
bash
# Meist geblockte IPs
sudo grep "Ban" /var/log/fail2ban.log | awk '{print $7}' | sort | uniq -c | sort -rn | head -20
# Erfolgreichste Jails
sudo grep "Ban" /var/log/fail2ban.log | awk '{print $5}' | tr -d '[]' | sort | uniq -c | sort -rn
# Zeitliche Verteilung
sudo grep "Ban" /var/log/fail2ban.log | awk '{print $2}' | cut -d: -f1 | sort | uniq -c
Automatische Reports per Email
Täglicher Report-Script
bash
#!/bin/bash # /etc/cron.daily/fail2ban-report REPORT="/tmp/fail2ban-report.txt" EMAIL="admin@ihredomain.de" echo "=== Täglicher Fail2Ban Report für $(hostname) ===" > $REPORT echo "Generiert am: $(date)" >> $REPORT echo "" >> $REPORT # Status aller Jails sudo fail2ban-client status >> $REPORT 2>&1 # Letzte 24h Blocks echo "" >> $REPORT echo "=== Blocks in den letzten 24h ===" >> $REPORT sudo grep "$(date -d '24 hours ago' '+%Y-%m-%d')" /var/log/fail2ban.log | grep "Ban" >> $REPORT # Email senden mail -s "Fail2Ban Report $(date +%Y-%m-%d)" $EMAIL < $REPORT # Aufräumen rm $REPORT
Checkliste: Ihr Fail2Ban-Setup
✅ Installation (5 Minuten)
-
Fail2Ban installiert
-
Dienst gestartet und aktiviert
-
jail.local erstellt
-
Standard-Konfiguration getestet
✅ Konfiguration (15 Minuten)
-
SSH Jail aktiviert
-
Eigene IP whitelisted
-
WordPress/Web-Jail konfiguriert (falls nötig)
-
Bantime und maxretry angepasst
✅ Testing (10 Minuten)
-
Fail2Ban neu geladen
-
Test-Login mit falschem Passwort
-
IP-Block verifiziert
-
Unban Funktion getestet
✅ Monitoring (5 Minuten)
-
Logs konfiguriert
-
Email-Benachrichtigung eingerichtet (optional)
-
Monitoring-Script installiert
Fazit: Ihr digitaler Wachhund
Fail2Ban ist nicht nur ein Tool – es ist Ihre persönliche Security-Gewohnheit. Wie das Abschließen der Haustür, wenn Sie das Haus verlassen.
Die drei größten Vorteile:
-
Automatisch: Läuft 24/7 im Hintergrund
-
Effektiv: Blockt 99% der automatisierten Angriffe
-
Kostenlos: Keine laufenden Kosten, nur einmalige Einrichtung
Die Wahrheit: Ein Server ohne Fail2Ban ist wie ein Haus mit offener Tür in einer belebten Straße. Es ist keine Frage ob, sondern wann jemand hereinkommt.
Noch einfacher: Bei vielen Hosting-Anbietern (inklusive NexoraHost Managed Server) ist Fail2Ban bereits vorinstalliert und konfiguriert. Fragen Sie einfach nach!
Brauchen Sie Hilfe? Unser Team richtet Fail2Ban gerne für Sie ein und konfiguriert es optimal für Ihre Anforderungen. Oft in weniger als 30 Minuten. Einfach eine Support-Anfrage stellen!
Weitere Blogartikel
Du suchst nach einem neuen Server oder Webhosting und wirst von günstigen Lockangeboten überschüttet? Vorsicht – was auf den ersten Blick wie ein Schnäppchen aussieht, kann langfristig zu einer teuren Überraschung werden. Wir zeigen d...
Was ist eigentlich... Webspace? Einfach erklärt (nicht nur für Oma!) Hast du schon mal von Webspace gehört und gedacht: "Was soll das sein?" Keine Sorge, du bist nicht allein. Viele Leute wissen nicht, was das ist - dabei nutzen sie es jeden Tag....
Du hast bereits erste Erfahrungen mit Minecraft Servern gesammelt und möchtest jetzt deinen eigenen, professionellen Server aufsetzen? Egal ob du mit Mods, Plugins oder im klassischen Vanilla-Stil spielen willst – dieser Guide führt dich durch die wichtigsten...