Was ist fail2ban?
fail2ban ist ein kleines, aber mächtiges Tool, das Logdateien nach fehlgeschlagenen Login-Versuchen (oder anderen verdächtigen Mustern) durchsucht und die verantwortlichen IP-Adressen automatisiert per Firewall (z. B. iptables
/nftables
oder firewalld
) sperrt. Ideal gegen Brute-Force-Angriffe auf SSH, FTP, Web-Admin-Schnittstellen u.ä.
Wie funktioniert es?
- fail2ban überwacht Logdateien (z. B.
/var/log/auth.log
,/var/log/nginx/error.log
). - Bei wiederholten fehlerhaften Einträgen (z. B. „Failed password for …“) erkennt ein Filter ein Muster.
- Überschreitet die Anzahl der Fehlsversuche eine Schwelle (
maxretry
) innerhalb eines Zeitfensters (findtime
), wird die IP gebannt (bantime
) — meist durch Einfügen einer Regel in die Firewall. - Nach Ablauf von
bantime
wird die IP wieder freigegeben (oder dauerhaft gesperrt, je nach Konfiguration).
Warum du fail2ban einsetzen solltest
- Sehr geringes Ressourcen-Overhead.
- Automatisches Abwehren vieler Standard-Angriffsarten (SSH, FTP, HTTP Auth, Postfix, …).
- Einfach anzupassen (eigene Filter/Jails möglich).
- Funktioniert sofort auf vielen Linux-Distributionen.
Schnellstart — Installation (Debian/Ubuntu & CentOS/RHEL)
Debian / Ubuntu
sudo apt update
sudo apt install fail2ban -y
CentOS / RHEL (falls EPEL nötig)
sudo yum install epel-release -y
sudo yum install fail2ban -y
# oder dnf auf neueren Systemen
Nach der Installation läuft der Dienst meist automatisch; prüfen:
sudo systemctl status fail2ban
Grundkonfiguration — sichere Methode
Wichtig: Niemals jail.conf
direkt editieren — Updates überschreiben. Lege stattdessen jail.local
an (oder Dateien unter /etc/fail2ban/jail.d/
).
Beispiel /etc/fail2ban/jail.local
:
[DEFAULT]
bantime = 3600 # 1 Stunde
findtime = 600 # 10 Minuten
maxretry = 5
backend = auto
banaction = iptables-multiport
[sshd]
enabled = true
port = ssh
logpath = /var/log/auth.log
maxretry = 4
Für Systeme mit nftables
oder firewalld
musst du ggf. banaction
anpassen (z. B. nftables
oder firewallcmd-ipset
).
Wichtige Optionen erklärt
bantime
— Dauer der Sperre in Sekunden (oder-1
für permanent).findtime
— Zeitraum, in demmaxretry
Fehlschläge zählen.maxretry
— Anzahl der Fehlversuche bis zum Ban.ignoreip
— Whitelist für IPs, z. B. lokale Admin-IP oder VPN:ignoreip = 127.0.0.1/8 192.0.2.5
logpath
— welche Logdatei überwacht wird.filter
— verweist auf die Regex-Definition in/etc/fail2ban/filter.d/
.
Beispiel: Web-Login (Nginx + Basic Auth) jail
[nginx-http-auth]
enabled = true
port = http,https
filter = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 3
bantime = 3600
(Die passende Filterdefinition ist meist bereits in /etc/fail2ban/filter.d/nginx-http-auth.conf
enthalten.)
Eigene Filter schreiben — kleines Beispiel
Angenommen du möchtest ein spezielles Dienst-Log überwachen. Lege Datei an /etc/fail2ban/filter.d/meinservice.conf
:
[Definition]
failregex = ^%(__prefix_line)sAuthentication failed for user .* from <HOST>$
ignoreregex =
<HOST>
steht für die IP-Adresse in der gefundenen Logzeile. Teste Filter mit fail2ban-regex
(siehe unten).
Nützliche Befehle zum Testen & Debuggen
- Status aller Jails:
sudo fail2ban-client status
- Status eines Jails:
sudo fail2ban-client status sshd
- IP manuell bannen / entbannen:
sudo fail2ban-client set sshd banip 203.0.113.5
sudo fail2ban-client set sshd unbanip 203.0.113.5
- Filter testen (prüft, ob Logzeilen erkannt werden):
sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf
- Logs live ansehen:
sudo tail -f /var/log/fail2ban.log /var/log/auth.log
Typische Fallen & Best Practices
- Whitelist wichtige IPs (z. B. Monitoring, Admin-Netze) mit
ignoreip
. - Achte auf korrekten Logpfad — Docker, chrooted services oder Custom-Locations können abweichen.
- Für Server in Cloud-Umgebungen: setze
maxretry
undbantime
so, dass legitime Nutzer nicht aus Versehen ausgesperrt werden. - Wenn du Loadbalancer/Proxy verwendest: fail2ban sollte die Client-IP sehen (X-Forwarded-For richtig behandeln oder Logging konfigurieren).
- Nutze
banaction
passend zur Firewall (iptables vs nftables vs firewalld). - Überwache fail2ban-Logs (z. B. in deinem Monitoring), damit du siehst, ob legitime IPs gebannt werden.
Schreibe einen Kommentar