Fail2ban Handling: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 85: Zeile 85:
 
*sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
 
*sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
  
 +
=Action.local=
 +
{| class="wikitable"
 +
|- style="vertical-align:middle;"
 +
! colspan="3" | Übersicht der Optionen
 +
|- style="vertical-align:middle;"
 +
| Eintrag
 +
| Beschreibung
 +
| Beispiel
 +
|-
 +
| colspan="3" | [Definition]
 +
|-
 +
| style="vertical-align:middle;" | actionstart
 +
| style="vertical-align:middle;" | Befehle, die beim Starten von fail2ban ausgeführt werden.
 +
| actionstart = iptables -N fail2ban-<name><br />iptables -A fail2ban-<name> -j RETURN<br />iptables -I <chain> -p <protocol> -m multiport --dports <port> -j fail2ban-<name>
 +
|- style="vertical-align:middle;"
 +
| actionstop
 +
| Befehle, die beim Beenden von fail2ban ausgeführt werden.
 +
| actionstop = iptables -D <chain> -p <protocol> -m multiport --dports <port> -j fail2ban-<name><br />iptables -F fail2ban-<name>[[BR]]iptables -X fail2ban-<name>
 +
|- style="vertical-align:middle;"
 +
| actioncheck
 +
| Befehle, die vor jedem actionban ausgeführt werden. Diese dienen dazu die aktuelle Umgebung auf Funktionalität zu überprüfen.
 +
| actioncheck = iptables -n -L <chain> | grep -q 'fail2ban-<name>[ \t]'
 +
|- style="vertical-align:middle;"
 +
| actionban
 +
| Befehle, die beim Bannen einer IP ausgeführt werden. Die Bedingung lautet immer maxretry muss überschritten und findtime unterschritten sein.
 +
| actionban = iptables -I fail2ban-<name> 1 -s <ip> -j <blocktype>
 +
|- style="vertical-align:middle;"
 +
| actionunban
 +
| Befehle, die zum Entbannen benutzt werden sollen.
 +
| actionunban = iptables -D fail2ban-<name> -s <ip> -j <blocktype>
 +
|-
 +
| colspan="3" | [Init]
 +
|- style="vertical-align:middle;"
 +
| name
 +
| Standardname der Kette
 +
| name = default
 +
|- style="vertical-align:middle;"
 +
| port
 +
| Port
 +
| port = ssh
 +
|- style="vertical-align:middle;"
 +
| protocol
 +
| Wird intern vom config reader genutzt. Mögliche Werte: tcp, udp, icmp, all.
 +
| protocol = tcp
 +
|- style="vertical-align:middle;"
 +
| chain
 +
| Die iptables-Kette zu der die fail2ban-Regeln hinzugefügt werden sollen. Standard ist INPUT.
 +
| chain = INPUT
 +
|- style="vertical-align:middle;"
 +
| Action Tags
 +
| colspan="2" | Action Tags sind Platzhalter, welche in actionban, actionunban und actioncheck verwendet werden können.
 +
|- style="vertical-align:middle;"
 +
| ip
 +
| colspan="2" | Die zu bannende IPv4-Adresse.
 +
|- style="vertical-align:middle;"
 +
| failures
 +
| colspan="2" | Die Anzahl der gezählten Fehlversuche.
 +
|- style="vertical-align:middle;"
 +
| time
 +
| colspan="2" | Der Unix-Zeitstempel (Sekunden) des Banns.
 +
|- style="vertical-align:middle;"
 +
| matches
 +
| colspan="2" | Die verketteten Einträge aus den Zeilen des Logfiles, die zum Bann führen. Viele Shell-Zeichen werden escaped dargestellt.
 +
|}
 +
=Filter.local=
 +
{| class="wikitable"
 +
|- style="vertical-align:middle;"
 +
! colspan="3" | Übersicht der Optionen
 +
|- style="vertical-align:middle;"
 +
| Eintrag
 +
| Beschreibung
 +
| Beispiel
 +
|-
 +
| colspan="3" | [Definition]
 +
|- style="vertical-align:middle;"
 +
| failregex
 +
| Mit Hilfe dieses regulären Ausdrucks[6] werden die Logdateien nach Treffern durchsucht. Hier ist der Tag HOST verfügbar, welche als Teil der regex benutzt wird und den Hostnamen, bzw. die IP-Adresse enthält. Die Unterscheidung zwischen IP-Adresse und Hostname wird von fail2ban automatisch ermittelt.
 +
| failregex = ^%(__prefix_line)sFAIL: \S+ address from=<HOST>$<br />^%(__prefix_line)sFAIL: \S+ libwrap from=<HOST>$
 +
|- style="vertical-align:middle;"
 +
| ignoreregex
 +
| Hier können Ausnahmen definiert werden, selbst wenn sie für die obige failregex gültig wäre. ignoreregex unterstützt String_interpolation, so dass man eigene Variablen mittels %(variablenname)s verwenden kann.
 +
| ignoreregex =
 +
|-
 +
| colspan="3" | [INCLUDES]
 +
|- style="vertical-align:middle;"
 +
| before
 +
| Die Datei wird vor der Sektion [Definition] gelesen. Beispiel ist die common.conf
 +
| before = common.conf
 +
|- style="vertical-align:middle;"
 +
| after
 +
| Die Datei wird nach der Sektion [Definition] gelesen.
 +
| after = example_after.local
 +
|- style="vertical-align:middle;"
 +
| Beispiel
 +
| Nach Einbindung der common.conf steht _daemon zur Verfügung. Siehe /etc/fail2ban/filter.d/common.conf für mehr Details.
 +
| _daemon = xinetd
 +
|}
 
=Example ssh=
 
=Example ssh=
 
<pre>
 
<pre>

Version vom 16. Mai 2022, 12:34 Uhr

Install

  • sudo apt install fail2ban

Nach der Installation stehen folgende Programme zur Verfügung

  • fail2ban-server - der Server
  • fail2ban-client - Clientprogramm zur Konfiguration und Auswertung des Servers
  • fail2ban-regex - Programm zum Testen von Regular-Expressions[7]

Konfigurationsdatein

fail2ban.local

  • Hier werden grundlegende Dinge eingestellt. Im Normalfall reichen die Voreinstellungen aus.
[Definition]
loglevel	Mitteilungsfreude einstellen: DEBUG, INFO, NOTICE, WARNING, ERROR, CRITICAL.	loglevel = INFO
logtarget	logtarget kann eine selbst angegebene Datei sein oder eine der folgenden Werte: STDOUT, STDERR, SYSLOG	logtarget=STDERR
socket	Hier lässt sich die Socket-Datei aus /var/run/ umbenennen.	socket = /var/run/fail2ban/fail2ban.sock
pidfile	Hier lässt sich die Prozess-ID-Datei aus /var/run/ umbenennen.	pidfile = /var/run/fail2ban/fail2ban.pid

jail.local

  • In der Datei jail.local werden alle von der jail.conf abweichenden Einträge eingestellt.
  • Man kann diese auch kopieren und als Grundlage für eine eigene jail.local nutzen.
  • Jedoch müssen auch hier nur geänderte Werte eingetragen werden.
  • Ein Minimalbeispiel:
[sshd]
enabled = true

Übersicht der Optionen

Übersicht der Optionen
Eintrag Beschreibung Beispiel
[DEFAULT]
ignoreip Durch Leerzeichen separierte Liste von zu ignorierenden (im Sinne von: nicht zu bannenden) IPs oder Netzwerken. ignoreip = 127.0.0.1/8 192.168.1.33
bantime Bannzeit in Sekunden. Ein negativer Wert ist ein permanenter Bann. bantime = 86400
findtime Die Anzahl der Sekunden nach dem der Zähler für maxretry zurückgesetzt wird. findtime = 660
maxretry Die maximale Anzahl an Fehlversuchen, bevor fail2ban die IP bannt. maxretry = 2
backend Hier kann das backend, wie z.B. systemd eingestellt werden. Voreinstellung ist auto (empfohlen). backend = systemd
usedns Einstellung für das reverse-Lookup-Verhalten von fail2ban. Mögliche Werte sind yes, no und warn.
Letzteres bewirkt, dass Einträge mit Hostnamen eine Warnung ins Logfile geben, was u.U. zu sehr vielen Einträgen führt.
usedns = warn
[myJail] Hier kann der Name des jail vergeben werden. [ssh]
enabled (De-)Aktiviert das jail enabled = true
port Portdefinition, kann numerisch sein. Mehrere Werte werden durch Kommata getrennt. port = ssh
filter = sshd Name der Filterdatei /etc/fail2ban/filter.d/sshd.conf
logpath Die zu überwachende Logdatei, die auf den Filter geprüft wird. logpath = /var/log/auth.log
maxretry, bantime,... Abweichende Werte für die Default-Optionen können ebenfalls definiert werden. maxretry = 3

Config

  • sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Action.local

Übersicht der Optionen
Eintrag Beschreibung Beispiel
[Definition]
actionstart Befehle, die beim Starten von fail2ban ausgeführt werden. actionstart = iptables -N fail2ban-<name>
iptables -A fail2ban-<name> -j RETURN
iptables -I <chain> -p <protocol> -m multiport --dports <port> -j fail2ban-<name>
actionstop Befehle, die beim Beenden von fail2ban ausgeführt werden. actionstop = iptables -D <chain> -p <protocol> -m multiport --dports <port> -j fail2ban-<name>
iptables -F fail2ban-<name>BRiptables -X fail2ban-<name>
actioncheck Befehle, die vor jedem actionban ausgeführt werden. Diese dienen dazu die aktuelle Umgebung auf Funktionalität zu überprüfen. grep -q 'fail2ban-<name>[ \t]'
actionban Befehle, die beim Bannen einer IP ausgeführt werden. Die Bedingung lautet immer maxretry muss überschritten und findtime unterschritten sein. actionban = iptables -I fail2ban-<name> 1 -s <ip> -j <blocktype>
actionunban Befehle, die zum Entbannen benutzt werden sollen. actionunban = iptables -D fail2ban-<name> -s <ip> -j <blocktype>
[Init]
name Standardname der Kette name = default
port Port port = ssh
protocol Wird intern vom config reader genutzt. Mögliche Werte: tcp, udp, icmp, all. protocol = tcp
chain Die iptables-Kette zu der die fail2ban-Regeln hinzugefügt werden sollen. Standard ist INPUT. chain = INPUT
Action Tags Action Tags sind Platzhalter, welche in actionban, actionunban und actioncheck verwendet werden können.
ip Die zu bannende IPv4-Adresse.
failures Die Anzahl der gezählten Fehlversuche.
time Der Unix-Zeitstempel (Sekunden) des Banns.
matches Die verketteten Einträge aus den Zeilen des Logfiles, die zum Bann führen. Viele Shell-Zeichen werden escaped dargestellt.

Filter.local

Übersicht der Optionen
Eintrag Beschreibung Beispiel
[Definition]
failregex Mit Hilfe dieses regulären Ausdrucks[6] werden die Logdateien nach Treffern durchsucht. Hier ist der Tag HOST verfügbar, welche als Teil der regex benutzt wird und den Hostnamen, bzw. die IP-Adresse enthält. Die Unterscheidung zwischen IP-Adresse und Hostname wird von fail2ban automatisch ermittelt. failregex = ^%(__prefix_line)sFAIL: \S+ address from=<HOST>$
^%(__prefix_line)sFAIL: \S+ libwrap from=<HOST>$
ignoreregex Hier können Ausnahmen definiert werden, selbst wenn sie für die obige failregex gültig wäre. ignoreregex unterstützt String_interpolation, so dass man eigene Variablen mittels %(variablenname)s verwenden kann. ignoreregex =
[INCLUDES]
before Die Datei wird vor der Sektion [Definition] gelesen. Beispiel ist die common.conf before = common.conf
after Die Datei wird nach der Sektion [Definition] gelesen. after = example_after.local
Beispiel Nach Einbindung der common.conf steht _daemon zur Verfügung. Siehe /etc/fail2ban/filter.d/common.conf für mehr Details. _daemon = xinetd

Example ssh

[sshd]
enabled    = true
port    = ssh
filter    = sshd
logpath    = /var/log/auth.log
maxretry = 4

Links