Fail2Ban Konfiguration: SSH Brute-Force-Schutz Anleitung
Schützen Sie Ihren Server vor SSH-Brute-Force-Angriffen mit Fail2Ban. Installation, jail.local-Konfiguration, Nginx/Apache-Jails, IP-Whitelist, Ban-Überwachung und E-Mail-Benachrichtigungen.
Inhaltsverzeichnis
Fail2Ban Konfiguration: SSH Brute-Force-Schutz Anleitung
SSH-Brute-Force-Angriffe gehören zu den häufigsten Bedrohungen für jeden internetfähigen Server. Fail2Ban ist ein leistungsstarkes Tool, das fehlgeschlagene Anmeldeversuche überwacht und Angreifer-IP-Adressen automatisch sperrt. Diese Anleitung führt Sie durch die Einrichtung von Fail2Ban mit umfassendem Schutz für SSH, Nginx und Apache.
Was ist Fail2Ban?
Fail2Ban ist ein Sicherheitstool, das Log-Dateien überwacht und IP-Adressen, die innerhalb eines bestimmten Zeitfensters zu viele fehlgeschlagene Anmeldeversuche machen, mit iptables/nftables-Regeln sperrt. In Python geschrieben, enthält es fertige Filter für viele Dienste.
Installation
# Ubuntu/Debian
sudo apt update
sudo apt install fail2ban -y
# CentOS/AlmaLinux/Rocky Linux
sudo dnf install epel-release -y
sudo dnf install fail2ban -y
# Fail2Ban-Dienst starten
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
# Status prüfen
sudo systemctl status fail2ban
jail.local Konfiguration
Die Hauptkonfigurationsdatei von Fail2Ban ist jail.conf. Bearbeiten Sie diese Datei jedoch nicht direkt — sie kann bei Updates überschrieben werden. Erstellen Sie stattdessen eine jail.local-Datei:
# jail.conf kopieren
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# Konfiguration bearbeiten
sudo nano /etc/fail2ban/jail.local
# /etc/fail2ban/jail.local
[DEFAULT]
# Sperrdauer (Sekunden) — 1 Stunde
bantime = 3600
# Erkennungsfenster (Sekunden) — 10 Minuten
findtime = 600
# Maximale fehlgeschlagene Versuche
maxretry = 5
# Backend (auto, pyinotify, gamin, polling, systemd)
backend = auto
# Log-Level (CRITICAL, ERROR, WARNING, NOTICE, INFO, DEBUG)
loglevel = INFO
# Log-Ziel
logtarget = /var/log/fail2ban.log
# E-Mail-Benachrichtigung
destemail = admin@example.com
sender = fail2ban@example.com
mta = sendmail
# Aktion — sperren und E-Mail senden
action = %(action_mwl)s
# Whitelist — diese IPs werden nie gesperrt
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24
SSH-Jail-Konfiguration
# In /etc/fail2ban/jail.local
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 86400 # 24 Stunden
findtime = 600
Für SSH werden maxretry = 3 und bantime = 86400 (24 Stunden) empfohlen. Dies erlaubt Angreifern nur 3 Versuche pro Tag.
Nginx-Jail-Konfiguration
# Nginx HTTP-Authentifizierungsfehler
[nginx-http-auth]
enabled = true
port = http,https
filter = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 5
bantime = 3600
# Nginx Rate-Limiting-Verletzung
[nginx-limit-req]
enabled = true
port = http,https
filter = nginx-limit-req
logpath = /var/log/nginx/error.log
maxretry = 10
bantime = 600
# Nginx 404-Flood-Schutz
[nginx-404]
enabled = true
port = http,https
filter = nginx-404
logpath = /var/log/nginx/access.log
maxretry = 20
findtime = 60
bantime = 3600
Apache-Jail-Konfiguration
# Apache-Authentifizierungsfehler
[apache-auth]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/apache2/error.log
maxretry = 5
bantime = 3600
# Apache Bad Bots
[apache-badbots]
enabled = true
port = http,https
filter = apache-badbots
logpath = /var/log/apache2/access.log
maxretry = 2
bantime = 86400
IP-Whitelist
[DEFAULT]
# Mehrere IPs oder Subnetze hinzufügen
ignoreip = 127.0.0.1/8 ::1 10.0.0.0/8 192.168.0.0/16 203.0.113.1
# Konfiguration neu laden
sudo fail2ban-client reload
# Whitelist überprüfen
sudo fail2ban-client get sshd ignoreip
Gesperrte IPs überwachen
# Status aller Jails anzeigen
sudo fail2ban-client status
# Status eines bestimmten Jails anzeigen
sudo fail2ban-client status sshd
# Gesperrte IPs auflisten
sudo fail2ban-client status sshd | grep "Banned IP"
# Log-Datei überwachen
sudo tail -f /var/log/fail2ban.log
# Letzte Sperrereignisse filtern
sudo grep "Ban" /var/log/fail2ban.log | tail -20
IPs sperren und entsperren
# IP manuell sperren
sudo fail2ban-client set sshd banip 1.2.3.4
# IP entsperren
sudo fail2ban-client set sshd unbanip 1.2.3.4
# Alle Sperren entfernen (mit Vorsicht!)
sudo fail2ban-client unban --all
E-Mail-Benachrichtigungen
[DEFAULT]
destemail = admin@example.com
sender = fail2ban@yourdomain.com
mta = sendmail
# Aktionsoptionen:
# action_ = nur sperren
# action_mw = sperren + E-Mail
# action_mwl = sperren + E-Mail + whois + Log-Zeilen
action = %(action_mwl)s
Sehr aggressive Einstellungen (niedriges maxretry, lange bantime) können auch legitime Benutzer sperren. Für SSH ist maxretry=3-5 und bantime=3600-86400 ein ausgewogener Ansatz.
Fazit
Fail2Ban ist ein unverzichtbarer Bestandteil der Serversicherheit. Bei richtiger Konfiguration für SSH, Nginx und Apache reduziert es Brute-Force-Angriffe erheblich. Überwachen Sie regelmäßig Log-Dateien und fügen Sie falsch-positive Sperren zur Whitelist hinzu.
Verwandte Artikel
Malware & Rootkit-Scan: rkhunter und ClamAV Anleitung
Schützen Sie Ihren Linux-Server vor Malware und Rootkits. rkhunter und ClamAV Installation, Scan-Konfiguration, Ergebnisinterpretation, geplante Scans und Incident-Response-Anleitung.
WireGuard VPN-Server einrichten: Schritt-für-Schritt-Anleitung
WireGuard VPN-Server einrichten: Schlüsselgenerierung, Server- und Client-Konfiguration, IP-Weiterleitung, Firewall-Regeln und Windows/Linux/Android-Client-Setup.
Zero Trust Netzwerksicherheit: Grundlegende Konfigurationsanleitung
Zero Trust Netzwerksicherheitsprinzipien und praktische Umsetzung: niemals vertrauen immer verifizieren, Mikro-Segmentierung, identitätsbasierter Zugriff und Implementierung mit vorhandenen Linux-Tools.