Für alle, die fail2ban noch nicht kennen, es handelt sich um ein Tool, welches die Anzahl der (falschen) Zugriffe pro IP Adresse begrenzen kann.
Datum | Änderungen |
---|---|
05.02.2022 | Erstellung dieser Anleitung |
21.07.2023 | Kapitel 3.4 hinzugefügt |
0. Zusammenarbeit mit ufw Firewall
Ich bekam bei fail2ban immer die Fehlermeldung, dass unter Debian 11 iptables nicht installiert ist.
2022-02-05 11:51:54,941 fail2ban.utils [5875]: ERROR 7f7a361d5f50 -- stderr: '/bin/sh: 1: iptables: not found' 2022-02-05 11:51:54,941 fail2ban.utils [5875]: ERROR 7f7a361d5f50 -- stderr: '/bin/sh: 2: iptables: not found' 2022-02-05 11:51:54,941 fail2ban.utils [5875]: ERROR 7f7a361d5f50 -- stderr: '/bin/sh: 3: iptables: not found' 2022-02-05 11:51:54,941 fail2ban.utils [5875]: ERROR 7f7a361d5f50 -- returned 127
Daher konnten später keine IPs gebannt werden. Da ich auf meinem Server sowieso ufw als Firewall nutze, führe ich die Bans damit durch. Für alle, die noch nicht ufw installiert haben, habe ich hier eine Anleitung dazu geschrieben.
1. Server-Zugriffe anzeigen
Die Zugriffe lassen sich in folgender Datei auslesen:
nano /var/log/auth.log
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 Anpassungen an Debian 12
Damit es aktuell (unter Debian 12) funktioniert, müssen wir noch folgendes anpassen:
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
Servus.
Könntest du mal die anleitung überprüfen bekomme seit ein paar tagen.
einen ipv6 fehler in der fail2ban conf.
× fail2ban.service – Fail2Ban Service Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; preset: enabled) Active: failed (Result: exit-code) since Wed 2023-07-19 12:26:08 CEST; 13s ago Duration: 372ms Docs: man:fail2ban(1) Process: 11680 ExecStart=/usr/bin/fail2ban-server -xf start (code=exited, status=255/EXCEPTION) Main PID: 11680 (code=exited, status=255/EXCEPTION) CPU: 100ms Jul 19 12:26:07 eyez.org systemd[1]: Started fail2ban.service – Fail2Ban Service. Jul 19 12:26:08 *eyez.org fail2ban-server[11680]: 2023-07-19 12:26:08,041 fail2ban.configreader [11680]: WARNING ‘allowipv6’ not defin> Jul 19 12:26:08 eyez.org fail2ban-server[11680]: Server ready Jul 19 12:26:08 eyez.org systemd[1]: fail2ban.service: Main process exited, code=exited, status=255/EXCEPTION Jul 19 12:26:08 eyez.org systemd[1]: fail2ban.service: Failed with result ‘exit-code’.
und der Fehler lässt fail2ban gar nicht mehr Starten.
Ich hab es schon selber versucht. aber egal wie ich das mit dem ipv6 festleg.
Akzeptiert er nicht. Wie wenn fail2ban aktuell nen bug auf ipv6 hat mhmhm
Was ich mich frage, wenn ich sshd nur auf PasswordAuthentication no und PubkeyAuthentication yes eingestellt habe, kann dann Fail2ban von nutzen sein?