Fail2ban Handling: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(21 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 
=Install=
 
=Install=
*sudo apt install fail2ban
+
*sudo apt install fail2ban iptables
 +
 
 
=Nach der Installation stehen folgende Programme zur Verfügung=
 
=Nach der Installation stehen folgende Programme zur Verfügung=
 
*fail2ban-server - der Server
 
*fail2ban-server - der Server
 
*fail2ban-client - Clientprogramm zur Konfiguration und Auswertung des Servers
 
*fail2ban-client - Clientprogramm zur Konfiguration und Auswertung des Servers
*fail2ban-regex - Programm zum Testen von Regular-Expressions[7]
+
*fail2ban-regex - Programm zum Testen von Regular-Expressions
 +
 
 
=Konfigurationsdatein=
 
=Konfigurationsdatein=
==fail2ban.local==
+
*[[Fail2ban Konfigurationsdatein]]
*Hier werden grundlegende Dinge eingestellt. Im Normalfall reichen die Voreinstellungen aus.
+
 
<pre>
+
=Example ssh=
[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
 
</pre>
 
=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]
 
  [sshd]
 
  enabled = true
 
  enabled = true
=Übersicht der Optionen=
+
port = ssh
{| class="wikitable"
+
filter = sshd
|- style="vertical-align:middle;"
+
logpath = /var/log/auth.log
! colspan="3" | Übersicht der Optionen
+
maxretry = 4
|- style="vertical-align:middle;"
 
| Eintrag
 
| Beschreibung
 
| Beispiel
 
|-
 
| colspan="3" | [DEFAULT]
 
|- style="vertical-align:middle;"
 
| 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
 
|- style="vertical-align:middle;"
 
| bantime
 
| Bannzeit in Sekunden. Ein negativer Wert ist ein permanenter Bann.
 
| bantime = 86400
 
|- style="vertical-align:middle;"
 
| findtime
 
| Die Anzahl der Sekunden nach dem der Zähler für maxretry zurückgesetzt wird.
 
| findtime = 660
 
|- style="vertical-align:middle;"
 
| maxretry
 
| Die maximale Anzahl an Fehlversuchen, bevor fail2ban die IP bannt.
 
| maxretry = 2
 
|- style="vertical-align:middle;"
 
| backend
 
| Hier kann das backend, wie z.B. systemd eingestellt werden. Voreinstellung ist auto (empfohlen).
 
| backend = systemd
 
|- style="vertical-align:middle;"
 
| usedns
 
| Einstellung für das reverse-Lookup-Verhalten von fail2ban. Mögliche Werte sind yes, no und warn.<br />Letzteres bewirkt, dass Einträge mit Hostnamen eine Warnung ins Logfile geben, was u.U. zu sehr vielen Einträgen führt.
 
| usedns = warn
 
|- style="vertical-align:middle;"
 
| [myJail]
 
| Hier kann der Name des jail vergeben werden.
 
| [ssh]
 
|- style="vertical-align:middle;"
 
| enabled
 
| (De-)Aktiviert das jail
 
| enabled = true
 
|- style="vertical-align:middle;"
 
| port
 
| Portdefinition, kann numerisch sein. Mehrere Werte werden durch Kommata getrennt.
 
| port = ssh
 
|- style="vertical-align:middle;"
 
| filter   = sshd
 
| Name der Filterdatei
 
| /etc/fail2ban/filter.d/sshd.conf
 
|- style="vertical-align:middle;"
 
| logpath
 
| Die zu überwachende Logdatei, die auf den Filter geprüft wird.
 
| logpath = /var/log/auth.log
 
|- style="vertical-align:middle;"
 
| maxretry, bantime,...
 
| Abweichende Werte für die Default-Optionen können ebenfalls definiert werden.
 
| maxretry = 3
 
|}
 
  
=Config=
+
=Example wordpress=
*sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
+
[[Fail2ban_Handling_Wordpress|Wordpress]]
  
=Action.local=
+
=Example dovecot=
 
+
<pre>
 
+
[dovecot]
{| class="wikitable"
+
enabled = true
|- style="vertical-align:middle;"
+
port = pop3,pop3s,imap,imaps
! colspan="3" | Übersicht der Optionen
+
filter = dovecot
|- style="vertical-align:middle;"
+
logpath = /var/log/mail.log
| Eintrag
+
maxretry = 3
| Beschreibung
+
</pre>
| 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=
 
*Die Dateien im Verzeichnis /etc/fail2ban/filter.d/ enthalten die regulären Ausdrücke zur Analyse der Logdateien und zum Extrahieren der IP-Adresse
 
*zwei Sektionen: [Definition] und [Includes]
 
  
 +
=Example apache2=
 +
<pre>
 +
[apache]
 +
enabled  = true
 +
port    = http,https
 +
filter  = apache-auth
 +
logpath  = /var/log/apache*/*error.log
 +
maxretry = 6
 +
</pre>
  
{| class="wikitable"
+
=Example vsftp=
|- style="vertical-align:middle;"
+
[[Fail2ban_Handling_Vsftp|vsftp]]
! 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=
 
<pre>
 
[sshd]
 
enabled    = true
 
port    = ssh
 
filter    = sshd
 
logpath    = /var/log/auth.log
 
maxretry = 4
 
</pre>
 
 
=Links=
 
=Links=
 
*https://www.thomas-krenn.com/de/wiki/SSH_Login_unter_Debian_mit_fail2ban_absichern
 
*https://www.thomas-krenn.com/de/wiki/SSH_Login_unter_Debian_mit_fail2ban_absichern

Aktuelle Version vom 3. September 2023, 20:06 Uhr

Install

  • sudo apt install fail2ban iptables

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

Konfigurationsdatein

Example ssh

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

Example wordpress

Wordpress

Example dovecot

[dovecot]
enabled = true
port = pop3,pop3s,imap,imaps
filter = dovecot
logpath = /var/log/mail.log
maxretry = 3

Example apache2

[apache]
enabled  = true
port     = http,https
filter   = apache-auth
logpath  = /var/log/apache*/*error.log
maxretry = 6

Example vsftp

vsftp

Links