Fail2Ban einrichten: Der automatische Türsteher für Ihren Server

Zurück

Einleitung: Warum Sie Fail2Ban lieben lernen werden

Stellen Sie sich vor: Ein Einbrecher versucht ständig, Ihre Haustür aufzubrechen. Jedes Mal, wenn er es versucht, notieren Sie seine Gesichtszüge. Beim 3. Versuch ruft die Polizei und stellt ihn für eine Stunde an den Pranger.

Das ist Fail2Ban in Aktion – Ihr persönlicher, unermüdlicher Türsteher, der 24/7 aufpasst und Angreifer automatisch blockiert.

Was ist Fail2Ban? Einfach erklärt

Die Grundidee

text

Fail2Ban überwacht Log-Dateien
→ Findet fehlgeschlagene Login-Versuche
→ Zählt, wie oft eine IP das versucht
→ Blockt diese IP nach zu vielen Versuchen
→ Entblockt sie nach einer gewissen Zeit

Reales Beispiel aus meinem Server

text

14:30:01 - IP 45.67.89.123 - Failed SSH login
14:30:03 - IP 45.67.89.123 - Failed SSH login  
14:30:05 - IP 45.67.89.123 - Failed SSH login
14:30:06 - FAIL2BAN: IP 45.67.89.123 für 1 Stunde geblockt! ✅

Das Beste: Fail2Ban läuft automatisch, 24/7, kostenlos.

Warum JEDER Server-Betreiber Fail2Ban braucht

Die erschreckende Statistik

text

• Ein ungeschützter Server wird durchschnittlich 
  alle 39 Sekunden gescannt
  
• Pro Tag: ~2.200 automatische Angriffsversuche
  
• Ohne Schutz: Erfolg nach 5-10 Tagen garantiert
  
• Mit Fail2Ban: 99% der Angriffe werden blockiert

Was ohne Fail2Ban passiert

bash

# Was Hacker auf Ihrem Server sehen
$ nmap -p 22 123.123.123.123
PORT   STATE SERVICE
22/tcp open  ssh

# Sie probieren aus...
$ hydra -l root -P passlist.txt ssh://123.123.123.123
[22][ssh] host: 123.123.123.123   login: root   password: admin123
# ERFOLG! Server geknackt.

Mit Fail2Ban: Nach 3 Versuchen ist die IP geblockt. Game over für den Hacker.

Schritt-für-Schritt: Fail2Ban installieren (5 Minuten)

Für Ubuntu/Debian Server

bash

# 1. System updaten
sudo apt update
sudo apt upgrade -y

# 2. Fail2Ban installieren
sudo apt install fail2ban -y

# 3. Dienst starten und aktivieren
sudo systemctl start fail2ban
sudo systemctl enable fail2ban

# 4. Status prüfen
sudo systemctl status fail2ban

Für CentOS/RHEL/AlmaLinux

bash

# 1. EPEL Repository hinzufügen (falls nötig)
sudo yum install epel-release -y

# 2. Fail2Ban installieren
sudo yum install fail2ban -y

# 3. Dienst starten
sudo systemctl start fail2ban
sudo systemctl enable fail2ban

Die wichtigste Konfiguration: jail.local

Die Basis-Konfiguration erstellen

bash

# Original-Konfiguration kopieren
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

# Konfiguration bearbeiten
sudo nano /etc/fail2ban/jail.local

Minimal-Konfiguration für den Anfang

ini

[DEFAULT]
# Ignoriere unsere eigene IP (wichtig!)
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 123.123.123.123

# Wie lange blockieren? (in Sekunden)
bantime = 3600            # 1 Stunde
# Für hartnäckige Angreifer:
# bantime = 86400         # 24 Stunden

# Zeitfenster für Zählung (in Sekunden)
findtime = 600            # 10 Minuten

# Maximal erlaubte Versuche
maxretry = 3              # Nach 3 Fehlversuchen blockieren

# Mail-Benachrichtigungen (optional)
destemail = admin@ihredomain.de
sender = fail2ban@ihredomain.de
mta = sendmail
action = %(action_mwl)s   # Blockieren + Email senden

Die 5 wichtigsten Jail-Konfigurationen

1. SSH Schutz (absolut essentiell!)

ini

[sshd]
enabled = true
port    = ssh
filter  = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime  = 86400  # 24 Stunden bei SSH-Angriffen

2. WordPress Login Schutz

ini

[wordpress]
enabled = true
port    = http,https
filter  = wordpress
logpath = /var/log/nginx/wordpress-access.log
         /var/log/apache2/wordpress-access.log
maxretry = 5
bantime  = 3600

3. FTP Schutz (ProFTPD/vsftpd)

ini

[proftpd]
enabled = true
port    = ftp,ftp-data,ftps,ftps-data
filter  = proftpd
logpath = /var/log/proftpd/proftpd.log
maxretry = 3

[vsftpd]
enabled = true
port    = ftp,ftp-data,ftps,ftps-data
filter  = vsftpd
logpath = /var/log/vsftpd.log

4. MySQL/MariaDB Schutz

ini

[mysqld-auth]
enabled = true
filter  = mysqld-auth
port    = 3306
logpath = /var/log/mysql/error.log
maxretry = 3

5. phpMyAdmin Schutz

ini

[phpmyadmin-syslog]
enabled = true
port    = http,https
filter  = phpmyadmin
logpath = /var/log/phpmyadmin/access.log
maxretry = 3

Filter erstellen: Fail2Ban sagen, wonach es suchen soll

Beispiel: WordPress Login Filter

bash

sudo nano /etc/fail2ban/filter.d/wordpress.conf

ini

[Definition]
failregex = ^<HOST>.*POST.*wp-login\.php.* 200
            ^<HOST>.*POST.*wp-login\.php.* 302
ignoreregex = 

Beispiel: Nginx/Apache Login Filter

bash

sudo nano /etc/fail2ban/filter.d/nginx-http-auth.conf

ini

[Definition]
failregex = ^<HOST>.*"POST /wp-login\.php HTTP/.*" 200
            ^<HOST>.*"GET /wp-admin/ HTTP/.*" 200
datepattern = %%d/%%b/%%Y:%%H:%%M:%%S %%z

Fail2Ban in Aktion: So sieht es aus

Die Logs von Fail2Ban

bash

# Fail2Ban Logs anzeigen
sudo tail -f /var/log/fail2ban.log

Typische Ausgabe:

text

2024-01-15 14:30:05 [sshd] Ban 45.67.89.123
2024-01-15 14:30:10 [wordpress] Ban 78.91.23.45
2024-01-15 14:45:22 [sshd] Unban 45.67.89.123

Aktuell geblockte IPs anzeigen

bash

# SSH geblockte IPs
sudo fail2ban-client status sshd

# Alle aktiven Jails
sudo fail2ban-client status

# Details zu einem Jail
sudo fail2ban-client get sshd banip

Praktische Tipps für den Alltag

1. IP manuell blockieren (wenn nötig)

bash

# IP sofort blockieren
sudo fail2ban-client set sshd banip 123.123.123.123

# IP entsperren
sudo fail2ban-client set sshd unbanip 123.123.123.123

2. Fail2Ban neu laden (nach Konfig-Änderungen)

bash

# Konfiguration neu laden
sudo fail2ban-client reload

# Oder Dienst neu starten
sudo systemctl restart fail2ban

3. Logging überprüfen

bash

# Letzte 50 Zeilen der Fail2Ban Logs
sudo tail -50 /var/log/fail2ban.log

# Nach bestimmten IPs suchen
sudo grep "45.67.89.123" /var/log/fail2ban.log

Fortgeschrittene Konfiguration

Whitelist für vertrauenswürdige IPs

ini

# In jail.local unter [DEFAULT]
ignoreip = 127.0.0.1/8 ::1
           192.168.1.0/24           # Lokales Netzwerk
           123.123.123.123          # Ihre eigene IP
           89.163.123.45            # Büro-IP
           1.2.3.4                  # Kollege

Unterschiedliche Bantimes für verschiedene Dienste

ini

[sshd]
bantime = 86400    # 24h - SSH ist kritisch

[wordpress]  
bantime = 3600     # 1h - Web-Login weniger kritisch

[proftpd]
bantime = 7200     # 2h - Mittel

Email-Benachrichtigungen einrichten

ini

[DEFAULT]
destemail = admin@ihredomain.de
sender = fail2ban@ihredomain.de
mta = sendmail
action = %(action_mwl)s  # mwl = mail with loglines

Fail2Ban mit Cloudflare kombinieren

Cloudflare-Integration für zusätzlichen Schutz

bash

# Cloudflare Filter installieren
sudo apt install python3-pip
sudo pip3 install cfail2ban

# Konfiguration erstellen
sudo nano /etc/fail2ban/action.d/cloudflare.conf

ini

[Definition]
actionstart = 
actionstop = 
actioncheck = 
actionban = curl -s -X POST "https://api.cloudflare.com/client/v4/zones/<ZONE_ID>/firewall/access_rules/rules" \
             -H "X-Auth-Email: <EMAIL>" \
             -H "X-Auth-Key: <API_KEY>" \
             -H "Content-Type: application/json" \
             --data '{"mode":"block","configuration":{"target":"ip","value":"<ip>"},"notes":"Banned by Fail2Ban"}'
actionunban = curl -s -X DELETE "https://api.cloudflare.com/client/v4/zones/<ZONE_ID>/firewall/access_rules/rules/<RULE_ID>" \
               -H "X-Auth-Email: <EMAIL>" \
               -H "X-Auth-Key: <API_KEY>"

Monitoring: Fail2Ban im Blick behalten

Einfaches Monitoring-Script

bash

#!/bin/bash
# /usr/local/bin/check-fail2ban.sh

JAILS=$(sudo fail2ban-client status | grep "Jail list" | sed 's/.*Jail list://' | tr ',' '\n')

echo "=== Fail2Ban Status am $(date) ==="
echo ""

for jail in $JAILS; do
    jail=$(echo $jail | xargs)
    STATUS=$(sudo fail2ban-client status $jail | grep "Currently banned")
    echo "$jail: $STATUS"
done

echo ""
echo "=== Letzte 10 Blocks ==="
sudo tail -10 /var/log/fail2ban.log | grep "Ban"

Als Cronjob (stündlich):

bash

0 * * * * /usr/local/bin/check-fail2ban.sh >> /var/log/fail2ban-status.log

Problembehandlung: Wenn's mal nicht klappt

Häufige Probleme und Lösungen

1. Fail2Ban blockiert mich selbst

bash

# Soforthilfe: IP entsperren
sudo fail2ban-client set sshd unbanip IHRE_IP

# Dauerhaft: Zur Whitelist hinzufügen
# In jail.local: ignoreip = ... IHRE_IP

2. Fail2Ban startet nicht

bash

# Fehler anzeigen
sudo systemctl status fail2ban -l

# Konfiguration testen
sudo fail2ban-client -t

# Logs prüfen
sudo journalctl -u fail2ban -f

3. Zu viele false positives

ini

# In jail.local:
maxretry = 6     # Höher setzen
bantime = 600    # Kürzer setzen (10 Minuten)

Fail2Ban vs. Andere Lösungen

Vergleichstabelle

Lösung Kosten Einrichtung Wirksamkeit Für wen?
Fail2Ban Kostenlos Mittel Sehr hoch Server-Betreiber
Cloudflare WAF Ab $20/Monat Einfach Hoch Alle Websites
Wordfence Premium $99/Jahr Sehr einfach Hoch WordPress
CSF Firewall Kostenlos Komplex Sehr hoch Experten

Fail2Bans Vorteile: Kostenlos, flexibel, leichtgewichtig, bewährt.

Sicherheitsbest Practices

Was Sie zusätzlich tun sollten

1. SSH Port ändern

bash

# /etc/ssh/sshd_config
Port 22222  # statt 22

2. Root-Login deaktivieren

bash

# /etc/ssh/sshd_config
PermitRootLogin no

3. SSH Keys statt Passwörter

bash

# Auf Client:
ssh-keygen -t ed25519

# Auf Server:
ssh-copy-id benutzer@server

4. Regelmäßige Updates

bash

# Fail2Ban updaten
sudo apt update && sudo apt upgrade fail2ban

# Regelmäßig Logs prüfen
sudo fail2ban-client status

Fail2Ban Statistiken auswerten

Nützliche Befehle für Insights

bash

# Meist geblockte IPs
sudo grep "Ban" /var/log/fail2ban.log | awk '{print $7}' | sort | uniq -c | sort -rn | head -20

# Erfolgreichste Jails
sudo grep "Ban" /var/log/fail2ban.log | awk '{print $5}' | tr -d '[]' | sort | uniq -c | sort -rn

# Zeitliche Verteilung
sudo grep "Ban" /var/log/fail2ban.log | awk '{print $2}' | cut -d: -f1 | sort | uniq -c

Automatische Reports per Email

Täglicher Report-Script

bash

#!/bin/bash
# /etc/cron.daily/fail2ban-report

REPORT="/tmp/fail2ban-report.txt"
EMAIL="admin@ihredomain.de"

echo "=== Täglicher Fail2Ban Report für $(hostname) ===" > $REPORT
echo "Generiert am: $(date)" >> $REPORT
echo "" >> $REPORT

# Status aller Jails
sudo fail2ban-client status >> $REPORT 2>&1

# Letzte 24h Blocks
echo "" >> $REPORT
echo "=== Blocks in den letzten 24h ===" >> $REPORT
sudo grep "$(date -d '24 hours ago' '+%Y-%m-%d')" /var/log/fail2ban.log | grep "Ban" >> $REPORT

# Email senden
mail -s "Fail2Ban Report $(date +%Y-%m-%d)" $EMAIL < $REPORT

# Aufräumen
rm $REPORT

Checkliste: Ihr Fail2Ban-Setup

✅ Installation (5 Minuten)

  • Fail2Ban installiert

  • Dienst gestartet und aktiviert

  • jail.local erstellt

  • Standard-Konfiguration getestet

✅ Konfiguration (15 Minuten)

  • SSH Jail aktiviert

  • Eigene IP whitelisted

  • WordPress/Web-Jail konfiguriert (falls nötig)

  • Bantime und maxretry angepasst

✅ Testing (10 Minuten)

  • Fail2Ban neu geladen

  • Test-Login mit falschem Passwort

  • IP-Block verifiziert

  • Unban Funktion getestet

✅ Monitoring (5 Minuten)

  • Logs konfiguriert

  • Email-Benachrichtigung eingerichtet (optional)

  • Monitoring-Script installiert

Fazit: Ihr digitaler Wachhund

Fail2Ban ist nicht nur ein Tool – es ist Ihre persönliche Security-Gewohnheit. Wie das Abschließen der Haustür, wenn Sie das Haus verlassen.

Die drei größten Vorteile:

  1. Automatisch: Läuft 24/7 im Hintergrund

  2. Effektiv: Blockt 99% der automatisierten Angriffe

  3. Kostenlos: Keine laufenden Kosten, nur einmalige Einrichtung

Die Wahrheit: Ein Server ohne Fail2Ban ist wie ein Haus mit offener Tür in einer belebten Straße. Es ist keine Frage ob, sondern wann jemand hereinkommt.

Noch einfacher: Bei vielen Hosting-Anbietern (inklusive NexoraHost Managed Server) ist Fail2Ban bereits vorinstalliert und konfiguriert. Fragen Sie einfach nach!


Brauchen Sie Hilfe? Unser Team richtet Fail2Ban gerne für Sie ein und konfiguriert es optimal für Ihre Anforderungen. Oft in weniger als 30 Minuten. Einfach eine Support-Anfrage stellen!

Weitere Blogartikel

  Du suchst nach einem neuen Server oder Webhosting und wirst von günstigen Lockangeboten überschüttet? Vorsicht – was auf den ersten Blick wie ein Schnäppchen aussieht, kann langfristig zu einer teuren Überraschung werden. Wir zeigen d...

Was ist eigentlich... Webspace? Einfach erklärt (nicht nur für Oma!) Hast du schon mal von Webspace gehört und gedacht: "Was soll das sein?" Keine Sorge, du bist nicht allein. Viele Leute wissen nicht, was das ist - dabei nutzen sie es jeden Tag....

Du hast bereits erste Erfahrungen mit Minecraft Servern gesammelt und möchtest jetzt deinen eigenen, professionellen Server aufsetzen? Egal ob du mit Mods, Plugins oder im klassischen Vanilla-Stil spielen willst – dieser Guide führt dich durch die wichtigsten...