Fail2ban ist ein Sicherheitsprogramm, das entwickelt wurde, um potenziell schädliche Aktivitäten auf deinen Servern zu erkennen und zu blockieren. Es arbeitet mit Protokollen wie SSH, FTP und anderen, um fehlgeschlagene Anmeldeversuche zu überwachen und auf wiederholte Versuche zu reagieren, die auf einen möglichen Angriff hinweisen.
Die Funktionsweise von Fail2ban ist relativ einfach, aber äußerst effektiv. Das Programm überwacht deine Logdateien auf wiederholte Anmeldeversuche und IP-Adressen, von denen diese Versuche ausgehen. Sobald eine vordefinierte Anzahl von fehlgeschlagenen Anmeldeversuchen erkannt wird, sperrt Fail2ban die betreffende IP-Adresse vorübergehend, um weitere Zugriffsversuche zu verhindern.
Datum | Änderungen |
---|---|
23.10.2023 | Erstellung dieser Anleitung |
0. Voraussetzungen
- Debian 12
- UFW Firewall installieren
1. Server-Zugriffe anzeigen
Die Zugriffe lassen sich in folgender Datei auslesen:
journalctl -u ssh
2. Fail2Ban installieren
Fail2Ban lässt sich unter Debian sehr einfach installieren.
apt-get install fail2ban
3. Fail2Ban konfigurieren
3.1 Konfigurationsdatei erstellen
Der Pfad der Konfigurationsdatei lautet: “/etc/fail2ban/jail.conf”. Alle Änderungen in dieser Datei werden jedoch bei einem Update von Fail2Ban überschrieben. Um dies zu verhindern erstellen wir uns eine Kopie dieser Datei, die wir dann bearbeiten. Diese Änderungen bleiben auch nach einem Update erhalten.
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
3.2 Konfigurations-Grundlagen
Nun öffnen wir die neue Datei:
nano /etc/fail2ban/jail.local
Wenn ihr ein paar Zeilen nach unten scrollt, dann seht ihr folgende Einstellungen:
# "bantime" is the number of seconds that a host is banned. bantime = 10m # A host is banned if it has generated "maxretry" during the last "findtime" # seconds. findtime = 10m # "maxretry" is the number of failures before a host get banned. maxretry = 5
Diese Einstellungen legen fest, nach wievielen falschen Versuchen eine IP gesperrt wird und wie lange diese Sperre gilt.
Wenn ihr noch etwas weiter scrollt, könnt ihr noch eure E-Mail Adresse angeben.
# Destination email address used solely for the interpolations in # jail.{conf,local,d/*} configuration files. destemail = eure@email.de
Nun bekommt ihr die verschiedenen Methoden angezeigt, die fail2ban beherrscht zum Bannen.
# The simplest action to take: ban only action_ = %(banaction)... # ban & send an e-mail with whois report to the destemail. action_mw = %(banaction).... # ban & send an e-mail with whois report and relevant log lines # to the destemail. action_mwl = %(banaction).... # See the IMPORTANT note in action.d/xarf-login-attack for when to use this action # # ban & send a xarf e-mail to abuse contact of IP address and include relevant log lines # to the destemail. action_xarf = %(banaction).... # ban IP on CloudFlare & send an e-mail with whois report and relevant log lines # to the destemail. action_cf_mwl = cloudflare...
Etwas weiter unten könnt ihr nun auswählen, was ihr tun möchtet. Ich habe mich für die erste Methode entschieden (action_)
# Choose default action. To change, just override value of 'action' with the # interpolation to the chosen action shortcut (e.g. action_mw, action_mwl, etc) in jail.local # globally (section [DEFAULT]) or per specific section action = %(action_)s
3.3 Gefängnisse / Jails aktivieren
Standardmäßig sind weiter unten alle Jails / Filter deaktiviert. Um einen einzelnes Jail zu aktivieren fügt ihr folgende Zeile hinzu:
enabled = true
Dies sieht zum Beispiel so aus:
[sshd] enabled = true port = ssh logpath = %(sshd_log)s backend = %(sshd_backend)s
Wenn ihr euren SSH Port geändert habt, dann müsst ihr euren geänderten Port hier eingeben, in der Zeile “port =euer-SSH-port”.
Zudem wähle ich noch ufw als Bannmethode aus. Dazu füge ich noch folgendes hinzu:
banaction = ufw
Insgesamt sieht es dann so aus bei mir:
[sshd] enabled = true port = ssh logpath = %(sshd_log)s backend = %(sshd_backend)s banaction = ufw
3.4 Backend Anpassung
Nachdem ihr eure Jails eingerichtet habt, müssen wir noch eine Zeile ändern:
backend = auto zu backend = systemd
4. fail2ban neu starten
Nun müsst ihr fail2ban nur noch neustarten, damit die Einstellungen übernommen werden.
/etc/init.d/fail2ban restart
Danach solltet ihr euch die Logs / Status anschauen, ob alles funktioniert.
5. Logs ansehen
Hier solltet ihr kontrollieren, ob alles richtig funktioniert.
Dazu öffnet ihr folgende Datei
cat /var/log/fail2ban.log
6. fail2ban Status ansehen
Mit folgendem Befehl lässt sich der aktuelle Status von fail2ban anzeigen
service fail2ban status
7. Liste der Bans anzeigen
Um euch eine Liste aller bisherigen Bans anzeigen zu lassen, gebt ihr folgenden Befehl ein:
zgrep 'Ban' /var/log/fail2ban.log*
8. IP “entbannen” / entsperren
Ihr habt auch die Möglichkeit einzelne IP Adressen wieder freizugeben. Im vorherigen Schritt konntet ihr euch alle gebannten Adressen anschauen. Diese müsst ihr nun entsperren.
fail2ban-client set dienst unbanip ip Beispiel beim Dienst sshd fail2ban-client set sshd unbanip 42.32.xxx.xxx