Fail2Ban: Dein kleiner Wächter gegen Brute-Force Angriffe

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?

  1. fail2ban überwacht Logdateien (z. B. /var/log/auth.log, /var/log/nginx/error.log).
  2. Bei wiederholten fehlerhaften Einträgen (z. B. „Failed password for …“) erkennt ein Filter ein Muster.
  3. Ü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.
  4. 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 dem maxretry 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 LogpfadDocker, chrooted services oder Custom-Locations können abweichen.
  • Für Server in Cloud-Umgebungen: setze maxretry und bantime 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.

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert