Fail2Ban Einrichten Anleitung
Fail2Ban einrichten: Schutz vor Brute-Force
Fail2Ban überwacht Log-Dateien und sperrt IP-Adressen automatisch nach zu vielen fehlgeschlagenen Anmeldeversuchen. Ein unverzichtbares Tool für jeden öffentlich erreichbaren Server.
Wie funktioniert Fail2Ban?
- Überwacht Log-Dateien (SSH, Apache, Nginx, etc.)
- Erkennt fehlgeschlagene Anmeldeversuche per Regex
- Zählt Fehlversuche pro IP-Adresse
- Sperrt IP nach Überschreitung des Limits
- Entsperrt automatisch nach Ablauf der Ban-Zeit
Installation
# Ubuntu/Debian
sudo apt update
sudo apt install fail2ban -y
# Status prüfen
sudo systemctl status fail2ban
# Autostart aktivieren
sudo systemctl enable fail2ban
Grundkonfiguration
💡 Wichtig: Bearbeiten Sie niejail.confdirekt! Erstellen Siejail.localfür eigene Einstellungen.
# Lokale Konfiguration erstellen
sudo nano /etc/fail2ban/jail.local
[DEFAULT]
# Ignorierte IPs (z.B. eigene IP)
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24
# Ban-Dauer in Sekunden (1 Stunde)
bantime = 3600
# Zeitfenster für Fehlversuche
findtime = 600
# Maximale Fehlversuche
maxretry = 5
# E-Mail-Benachrichtigung (optional)
destemail = admin@example.com
sender = fail2ban@example.com
action = %(action_mwl)s
# Ban-Aktion
banaction = iptables-multiport
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 86400
# Fail2Ban neu starten
sudo systemctl restart fail2ban
SSH-Schutz (Standard)
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 86400
findtime = 600
Bei geändertem SSH-Port
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
Nginx-Schutz
# In jail.local hinzufügen:
[nginx-http-auth]
enabled = true
filter = nginx-http-auth
port = http,https
logpath = /var/log/nginx/error.log
maxretry = 3
[nginx-limit-req]
enabled = true
filter = nginx-limit-req
port = http,https
logpath = /var/log/nginx/error.log
maxretry = 10
[nginx-botsearch]
enabled = true
filter = nginx-botsearch
port = http,https
logpath = /var/log/nginx/access.log
maxretry = 2
Apache-Schutz
[apache-auth]
enabled = true
port = http,https
logpath = /var/log/apache2/error.log
maxretry = 3
[apache-badbots]
enabled = true
port = http,https
logpath = /var/log/apache2/access.log
maxretry = 2
[apache-noscript]
enabled = true
port = http,https
logpath = /var/log/apache2/error.log
maxretry = 3
WordPress-Schutz
Filter erstellen
sudo nano /etc/fail2ban/filter.d/wordpress.conf
[Definition]
failregex = ^<HOST> .* "POST /wp-login.php
^<HOST> .* "POST /xmlrpc.php
ignoreregex =
Jail aktivieren
[wordpress]
enabled = true
filter = wordpress
port = http,https
logpath = /var/log/nginx/access.log
maxretry = 5
bantime = 3600
Wichtige Befehle
# Status aller Jails
sudo fail2ban-client status
# Status eines Jails
sudo fail2ban-client status sshd
# Gesperrte IPs anzeigen
sudo fail2ban-client status sshd | grep "Banned"
# IP manuell entsperren
sudo fail2ban-client set sshd unbanip 123.45.67.89
# IP manuell sperren
sudo fail2ban-client set sshd banip 123.45.67.89
# Fail2Ban neu laden
sudo fail2ban-client reload
# Jail neustarten
sudo fail2ban-client restart sshd
Logs prüfen
# Fail2Ban-Log
sudo tail -f /var/log/fail2ban.log
# Gebannte IPs suchen
sudo grep "Ban" /var/log/fail2ban.log
# Entbannte IPs suchen
sudo grep "Unban" /var/log/fail2ban.log
Persistente Bans
Standardmäßig gehen Bans bei Neustart verloren. Für persistente Bans:
[DEFAULT]
banaction = iptables-multiport
banaction_allports = iptables-allports
# Oder mit SQLite-Datenbank
dbfile = /var/lib/fail2ban/fail2ban.sqlite3
dbpurgeage = 86400
E-Mail-Benachrichtigung
[DEFAULT]
destemail = admin@example.com
sender = fail2ban@example.com
mta = sendmail
# Aktion mit E-Mail
action = %(action_mwl)s
Action-Typen
| Action | Beschreibung |
|---|---|
action_ |
Nur Ban (Standard) |
action_mw |
Ban + E-Mail mit Whois |
action_mwl |
Ban + E-Mail mit Whois + Logs |
Best Practices
- Eigene IP whitelisten: Vermeidet Selbst-Aussperrung
- Moderate Ban-Zeiten: Zu lange Bans behindern legitime Nutzer
- Logs überwachen: Regelmäßig auf Angriffsmuster prüfen
- Backup der Config: Vor Änderungen sichern
- Testen: Neue Regeln erst in niedriger Intensität
Troubleshooting
# Regex testen
sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf
# Debug-Modus
sudo fail2ban-client -d
# Alle Bans aufheben
sudo fail2ban-client unban --all
Weitere Hilfe
- 📖 Fail2Ban Wiki
- 📧 E-Mail: support@enjyn.de