Eigene Regeln für fail2ban erstellen |
Veröffentlicht von Administrator am Jan 10 2020 |
Wie erstellt man eine eigene Regel für Fail2ban?
Fail2ban liefert von Hause aus schon vorgefertigte Filter für die meisten und wichtigsten Dienste
wie ssh apache mail und ftp. Es werden aber eben nicht alle Dienste abgedeckt, sodass man für
bestimmte Konstellationen eigene Filter erstellen muss.
Wir werden nun einen eigenen Filter erstellen anhand eines aktuellen Beispiels.
Seit ein paar Tagen füllt sich mein syslog mit folgenden Meldungen:
/var/log/syslog:Dec 26 19:00:32 ServerXXXX kernel: [21854.757530] TCP: drop open request from xx.xx.xx.x/7232
/var/log/syslog:Dec 26 19:00:33 ServerXXXX kernel: [21856.052063] TCP: drop open request from xx.x.xx.xx/15792
/var/log/syslog:Dec 26 19:00:34 ServerXXXX kernel: [21856.474268] TCP: drop open request from xx.x.xx.xx/50260
/var/log/syslog:Dec 26 19:00:36 ServerXXXX kernel: [21859.322258] TCP: drop open request from xx.xx.xx.xx/37327
/var/log/syslog:Dec 26 19:00:37 ServerXXXX kernel: [21860.231697] TCP: drop open request from xx.xx.xx.xx/8175
/var/log/syslog:Dec 26 19:00:38 ServerXXXX kernel: [21860.553607] TCP: drop open request from xx.xx.xx.xx/26571
/var/log/syslog:Dec 26 19:00:39 ServerXXXX kernel: [21861.363653] TCP: drop open request from xx.xx.xx.xx/27648
Hier versucht also jemand mir jede Menge TCP Pakete zu schicken um den Server auszulasten und in die Knie zu zwingen.
Nun es gibt sicher mehrere Möglichkeiten dies zu unterbinden, wir wollen das nun mal mit fail2ban machen.
Wir editieren nun die /etc/fail2ban/jail.local mit dem Editor unseres Vertrauens. Ich nutze am Liebsten nano, Andere bevorzugen vim.
Am Ende der Datei fügen wir folgenden Code ein.
[tcp-packet]
enabled = true
port = http,https
filter = tcp_packet
logpath = /var/log/syslog
maxretry = 30
Was bedeuten nun diese 6 Zeilen?
Name des Filters
aktiv ja oder nein?
welcher Port wird überwacht?
Wie filtern wir?
Welche Datei überwachen wir?
Ab wann sperrt der Filter die IP?
Wir erstellen nun den eigentlichen Filter. In unserem Beispiel in Zeile 4 angegeben.
filter = tcp_packet
Was muss nun dieser Filter machen?
er soll die Logdatei /var/log/syslog durchsuchen und und wenn er mehr als 30
der o.g Einträge findet , die IP raussuchen und sperren mit Hilfe von IPTABLES.
wir erstellen die folgende Datei mit dem Editor unserer Wahl.
nano /etc/fail2ban/filter.d/tcp_packet.conf
und fügen folgenden Inhalt ein:
# Fail2Ban configuration file
#
#
[Definition]
# Option: failregex
# Notes.: regex to match the massive "TCP: Drop open request from IP" messages in /var/log/syslog.
# Log-Line: Dec 29 00:15:37 ServerXXXXX kernel: [213560.152138] TCP: drop open request from XX.XX.XX.XX/3009
# Values: TEXT
#
failregex = TCP: drop open request from <HOST>/*
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =
So was passiert hier?
Ein paar Kommentare und eigentlich nur 2 wichtige Zeilen
failregex =
Wir erinnern uns , fail2ban braucht die Zeit und die IP.
Die Zeit findet fail2ban selbst, wir müssen also nurnoch sagen , wo
in der Zeile die IP steht. Sehen wir uns nochmal die Meldung im syslog an.
ich hab sie extra hier nochmal als Kommentar mit reingesetzt.
Dec 29 00:15:37 ServerXXXXX kernel: [213560.152138] TCP: drop open request from XX.XX.XX.XX/3009
Wir geben die IP mit der Zeichenfolge "<HOST>" innerhalb der Meldung an.
Unser regulärer Ausdruck sagt also:
Die IP kommt nach "TCP: drop open request from " und alles nach der IP
"/*" kannst du vernachlässigen, das brauchen wir nicht.
Die zweite wichtige Zeile wäre dann nochmal
ignoreregex=
Hier könnten wir Ausnahmen deffinieren, wie zum Beispiel unsere private IP
Wenn etwasin diesem Ausdruck zutrifft, wird die Meldung nicht beachtet.
In diesem Fall brauche wir das nicht , deshalb ist die Zeile leer.
Die Datei speichern und dann war das auch schon alles, nun noch
fail2ban neu starten und unser neuer Filter wird hoffentlich geladen.
Wir können unsere selbsterstellten Filter auch vorher testen. Fail2ban liefert uns dafür
ein tool namens fail2ban-regex .
Wir geben dem Tool die Datei mit , die durchsucht werden soll und welchen Filter es benutzen soll.
In unserem Beispiel würde das so aussehen:
fail2ban-regex /var/log/syslog /etc/fail2ban/filter.d/tcp_packet.conf
Wir bekommen dann als Ausgabe:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
XX.XX.XX.XX (Mon Dec 26 19:00:37 2014)
Date template hits:
6660 hit(s): MONTH Day Hour:Minute:Second
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6600 Treffer - Es funktioniert.
Viel Spass damit und beim Erstellen eigener Regeln,
ich hoffe ich konnte euch damit helfen.
Zuletzt geändert am: Jan 10 2020 um 12:46 AM
Zurück zur Übersicht