Jeder Server im Internet wird permanent von Bots angegriffen, die gängige Passwörter durchprobieren. Fail2ban erkennt solche Angriffe automatisch und sperrt die Angreifer-IPs. Ein Muss für jeden Server.

Was ist Fail2ban?

Fail2ban überwacht Log-Dateien auf fehlgeschlagene Anmeldeversuche. Nach einer konfigurierbaren Anzahl von Fehlversuchen sperrt es die IP-Adresse des Angreifers automatisch via Firewall (iptables/nftables).

Installation

Ubuntu/Debian

apt update
apt install fail2ban

CentOS/RHEL/AlmaLinux

dnf install epel-release
dnf install fail2ban

Dienst aktivieren

systemctl enable fail2ban
systemctl start fail2ban

Grundkonfiguration

Fail2ban verwendet zwei Konfigurationsdateien:

  • /etc/fail2ban/jail.conf - Standardwerte (nicht bearbeiten!)
  • /etc/fail2ban/jail.local - Eigene Einstellungen (überschreiben)

Erstellen Sie Ihre lokale Konfiguration:

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

Wichtige Einstellungen

[DEFAULT]
# Wie lange eine IP gesperrt wird (10 Minuten)
bantime = 10m

# Zeitfenster für Fehlversuche
findtime = 10m

# Fehlversuche bis zur Sperre
maxretry = 5

# E-Mail-Benachrichtigung (optional)
destemail = admin@example.com
sender = fail2ban@example.com
action = %(action_mwl)s

Zeitformate

  • s = Sekunden
  • m = Minuten
  • h = Stunden
  • d = Tage

SSH absichern

SSH ist standardmäßig aktiviert. Prüfen Sie die Einstellungen:

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

Bei einem anderen SSH-Port:

[sshd]
port = 2222

Weitere Jails aktivieren

Apache

[apache-auth]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/apache2/*error.log
maxretry = 3

[apache-badbots]
enabled = true
port = http,https
filter = apache-badbots
logpath = /var/log/apache2/*access.log
maxretry = 2

Nginx

[nginx-http-auth]
enabled = true
port = http,https
filter = nginx-http-auth
logpath = /var/log/nginx/*error.log
maxretry = 3

[nginx-botsearch]
enabled = true
port = http,https
filter = nginx-botsearch
logpath = /var/log/nginx/*access.log
maxretry = 2

Postfix (Mailserver)

[postfix]
enabled = true
port = smtp,465,submission
filter = postfix
logpath = /var/log/mail.log
maxretry = 3

Dovecot (IMAP/POP3)

[dovecot]
enabled = true
port = pop3,pop3s,imap,imaps
filter = dovecot
logpath = /var/log/mail.log
maxretry = 3

Fail2ban verwalten

Status prüfen

# Übersicht aller Jails
fail2ban-client status

# Details zu einem Jail
fail2ban-client status sshd

Gesperrte IPs anzeigen

fail2ban-client status sshd

Ausgabe:

Status for the jail: sshd
|- Filter
|  |- Currently failed: 2
|  |- Total failed:     156
|  `- File list:        /var/log/auth.log
`- Actions
   |- Currently banned: 3
   |- Total banned:     47
   `- Banned IP list:   192.168.1.100 10.0.0.5 203.0.113.42

IP manuell sperren

fail2ban-client set sshd banip 192.168.1.100

IP entsperren

fail2ban-client set sshd unbanip 192.168.1.100

Alle IPs eines Jails entsperren

fail2ban-client unban --all

IPs von der Sperre ausnehmen

Tragen Sie Ihre eigene IP oder vertrauenswürdige IPs in die Whitelist ein:

[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 IHRE_IP

Wichtig: Ihre eigene IP whitelisten, sonst sperren Sie sich eventuell selbst aus!

Aggressive Konfiguration

Für Server mit vielen Angriffen:

[DEFAULT]
bantime = 24h
findtime = 1h
maxretry = 3

[recidive]
enabled = true
filter = recidive
logpath = /var/log/fail2ban.log
bantime = 1w
findtime = 1d
maxretry = 3

Das recidive-Jail sperrt Wiederholungstäter für eine Woche.

Logs prüfen

# Fail2ban-Log
tail -f /var/log/fail2ban.log

# Sperrungen anzeigen
grep "Ban" /var/log/fail2ban.log

# Entsperrungen anzeigen
grep "Unban" /var/log/fail2ban.log

Konfiguration testen

Nach Änderungen an der Konfiguration:

# Syntax prüfen
fail2ban-client -t

# Dienst neu laden
systemctl reload fail2ban

Häufige Probleme

Jail startet nicht

Log prüfen:

journalctl -u fail2ban -n 50

Häufige Ursachen:

  • Log-Datei existiert nicht
  • Falscher Pfad in logpath
  • Filter-Regex passt nicht

Eigene IP gesperrt

fail2ban-client set sshd unbanip IHRE_IP

Dann IP zur ignoreip-Liste hinzufügen!

Angreifer werden nicht gesperrt

Prüfen Sie, ob der Filter funktioniert:

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

Fazit

Fail2ban ist ein essentielles Tool für jeden Linux-Server. Die Installation ist einfach, und mit der Standardkonfiguration ist SSH bereits geschützt. Erweitern Sie den Schutz auf Webserver und Mailserver, und vergessen Sie nicht, Ihre eigene IP zu whitelisten.