Fail2ban installiere konfigurieren Schutz gegen Brute Force Angriffe in Ubuntu und Linux  Bild © PCMasters.deFail2ban installiere konfigurieren Schutz gegen Brute Force Angriffe in Ubuntu und Linux (Bild © PCMasters.de)

Funktionen von Fail2ban

Fail2ban überwacht Systemprotokolle auf bestimmte Muster, die auf fehlgeschlagene Authentifizierungsversuche hinweisen. Sobald innerhalb eines bestimmten Zeitraums eine vordefinierte Schwelle an Fehlversuchen erreicht ist, löst die Software eine Sperrmaßnahme aus. Dies geschieht durch eine Aktualisierung der System-Firewall, um den gesamten eingehenden Datenverkehr von der identifizierten bösartigen IP-Adresse abzuweisen.

Installationsverfahren für verschiedene Distributionen

Die Installation von Fail2ban variiert je nach verwendeter Linux-Distribution leicht.

Für Ubuntu- und Debian-Systeme

Das Paket ist über die Standard-Repositories verfügbar:

apt update
apt install fail2ban

Für CentOS-, RHEL- und AlmaLinux-Systeme

Das EPEL-Repository (Extra Packages for Enterprise Linux) muss zuerst installiert werden:

dnf install epel-release
dnf install fail2ban

Dienstaktivierung

Unabhängig von der Distribution muss der Dienst so eingestellt werden, dass er beim Systemstart automatisch startet und sofort gestartet wird:

systemctl enable fail2ban
systemctl start fail2ban

Fail2ban konfigurieren

Fail2ban nutzt ein Konfigurationssystem mit zwei Dateien, um sicherzustellen, dass System-Updates die benutzerdefinierten Anpassungen nicht überschreiben. Die Datei /etc/fail2ban/jail.conf enthält Standardwerte und sollte nicht geändert werden. Stattdessen sollten Administratoren eine Datei /etc/fail2ban/jail.local erstellen und bearbeiten. So initialisierst du die lokale Konfiguration:

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
nano /etc/fail2ban/jail.local

Im Abschnitt [DEFAULT] steuern drei Hauptvariablen die Sperrlogik:

  • bantime: Die Dauer, für die eine IP gesperrt wird (z. B. 10m für zehn Minuten).
  • findtime: Der Zeitraum, in dem fehlgeschlagene Anmeldeversuche gezählt werden (z. B. 10m).
  • maxretry: Die Anzahl der zulässigen fehlgeschlagenen Anmeldeversuche, bevor die Sperre ausgelöst wird.

Zeitformate sind definiert als s (Sekunden), m (Minuten), h (Stunden) und d (Tage). Außerdem können Administratoren E-Mail-Benachrichtigungen konfigurieren, indem sie destemail, sender und die action auf %(action_mwl)s setzen.

Dienstspezifische Jails implementieren

Ein Jail ist ein spezifischer Regelsatz, der auf einen bestimmten Dienst angewendet wird.

Secure Shell (SSH)-Schutz

Um SSH zu sichern, muss der Abschnitt [sshd] konfiguriert werden. Wenn der Server einen nicht standardmäßigen Port verwendet, muss dieser angegeben werden:

[sshd]
enabled = true
port = ssh 
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 1h

Webserver-Schutz (Apache und Nginx)

Bei Apache können Administratoren apache-auth aktivieren, um die Authentifizierung zu schützen, sowie apache-badbots, um bekannte bösartige Crawler zu blockieren. Für Nginx gibt es ähnliche Jails: nginx-http-auth und nginx-botsearch. Beide überwachen in der Regel die Verzeichnisse /var/log/apache2/ bzw. /var/log/nginx/ und zielen auf die Ports 80 (HTTP) und 443 (HTTPS) ab.

Schutz für Mailserver (Postfix und Dovecot)

Mailserver sind Ziele mit hoher Priorität. Die [postfix]-Jail schützt SMTP (Ports 25, 465, 587) und die [dovecot]-Jail schützt IMAP/POP3 (Ports 110, 143, 993, 995), wobei beide die Datei /var/log/mail.log überwachen.

Betriebsmanagement und Client-Befehle

Das Tool fail2ban-client dient zur Echtzeit-Verwaltung des Dienstes.

Status prüfen

Um alle aktiven Jails anzuzeigen:

fail2ban-client status

Um detaillierte Statistiken für ein bestimmtes Jail anzuzeigen

fail2ban-client status sshd

Manuelle IP-Verwaltung

Um eine IP manuell zu sperren:

fail2ban-client set sshd banip 192.168.1.100

Um eine IP manuell wieder freizugeben:

fail2ban-client set sshd unbanip 192.168.1.100

Um alle Sperren für eine bestimmte Jail aufzuheben:

fail2ban-client unban –all

Administrative Sicherheitsvorkehrungen und Whitelisting

Um ein versehentliches Aussperren zu verhindern, müssen Administratoren vertrauenswürdige IP-Adressen in der ignoreip-Direktive innerhalb des [DEFAULT]-Abschnitts definieren:

ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 [DIE_STATISCHE_IP]

Erweiterte Sicherheitsmaßnahmen: Das „Recidive“-Jail

Für Umgebungen, die mit einem hohen Aufkommen an hartnäckigen Angriffen konfrontiert sind, wird eine aggressive Konfiguration empfohlen. Dazu gehört die Erhöhung der bantime auf 24 Stunden und die Implementierung des recidive-Jails. Das Recidive-Jail überwacht das Fail2ban-Protokoll selbst (/var/log/fail2ban.log), um IPs zu identifizieren, die wiederholt gesperrt und wieder freigegeben werden, und wendet anschließend eine langfristige Sperre (z. B. eine Woche) auf diese Wiederholungstäter an.

Überwachung und Fehlerbehebung

Protokollanalyse

Die Echtzeitüberwachung von Sperren kann wie folgt erfolgen:

tail -f /var/log/fail2ban.log
grep "Ban" /var/log/fail2ban.log
grep "Unban" /var/log/fail2ban.log

Konfigurationsüberprüfung

Vor dem Neustart des Dienstes sollte die Syntax überprüft werden:

fail2ban-client -t
systemctl reload fail2ban

Fehlerbehebung

Wenn ein Jail nicht startet, sollten Administratoren die Systemprotokolle überprüfen:

journalctl -u fail2ban -n 50

Häufige Fehlerquellen sind fehlende Protokolldateien, falsche logpath-Definitionen oder Regex-Muster im Filter, die nicht zum aktuellen Protokollformat passen. Um zu testen, ob ein Filter Fehler korrekt erkennt, kannst du folgenden Befehl verwenden:

fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf