fail2ban und Regular Expressions
lima-city → Forum → Programmiersprachen → Python
aufbau
befehl
code
date
datei
direkten test
filter
import
log
login
match
not
port
richtigen zeilen
strip
super danke
treffen
treffer
verzeichnis
zeile
-
Ich komme gerade nicht weiter...
Ich möchte fail2ban dazu bringen, die Log-Datei von zenphoto nach gescheiterten Loginversuchen zu überwachen.
Der Aufbau der Logdatei:
date IP type user ID user name outcome authority additional information
Hier ein paar Beispielzeilen:
2014-10-04 20:57:41 1.2.3.4 Admin login [userID] [userName] Success zp_admin 2014-10-04 20:58:41 1.2.3.5 Guest login [userID] [userName] Success zp_admin 2014-10-04 20:59:41 1.2.3.6 Admin login [userID] [userName] Failed zp_admin 2014-10-04 20:60:41 1.2.3.7 Guest login [userID] [userName] Failed zp_admin
Ich möchte nun, dass die Zeilen mit "Failed" im outcome-Teil gematched werden.
Gebe ich den Befehl:
fail2ban-regex /verzeichnis/zur/security.log "\[<HOST>\]\S*[Admin|Guest login]\S*\W*\S*[Failed]"
ein, bekomme ich Treffer angezeigt. Ich bin mir jetzt aber auch unsicher bezüglicher meiner regex, weil ich auch einfach mit "\[<HOST>\]" dieselbe Anzahl an Treffern bekomme und das sollten eigentlich mehr sein, als die "Failed"
Wie auch immer, ich habe entsprechend eine /etc/fail2ban/filter.d/zenphoto.conf angelegt mit dem Inhalt:
failregex = \[<HOST>\]\S*[Admin|Guest login]\S*\W*\S*[Failed]
und in meiner jail.local steht:
[zenphoto] enabled = true port = http,https filter = zenphoto logpath = /verzeichnis/zur/security.log bantime = 600 maxretry = 5
Was mich verwirrt ist, dass wenn ich:
fail2ban-regex /verzeichnis/zur/security.log /etc/fail2ban/filter.d/zenphoto.conf
eingebe, ich keine Treffer mehr bekomme... (??!)
Also ich komme mit den RegEx noch nicht so klar - vielleicht kann mir da jemand helfen und/oder hat Erfahrung mit fail2ban?
Vielen Dank im voraus!
Beitrag zuletzt geändert: 8.10.2014 12:00:09 von bastobuntu -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich kann zwar nichts zu fail2ban sagen, wohl aber über Regex. Und da sich das hier im Python-Forum befindet gibt es von mir Python-Beispielcode + Regex:
#!/bin/python fail2ban = """ 2014-10-04 20:57:41 1.2.3.4 Admin login [userID] [userName] Success zp_admin 2014-10-04 20:58:41 1.2.3.5 Guest login [userID] [userName] Success zp_admin 2014-10-04 20:59:41 1.2.3.6 Admin login [userID] [userName] Failed zp_admin 2014-10-04 20:60:41 1.2.3.7 Guest login [userID] [userName] Failed zp_admin """ regex = r'(<HOST>)\s+(Admin|Guest) login\s*\[\w+\]\s*\[\w+\]\s*Failed' import re lines = [ x.strip() for x in fail2ban.strip().split('\n') ] regex = "^.*%s.*$" % regex.replace('<HOST>', r'([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)') print("regex: '%s'" % regex) for line in lines: match = re.match(regex, line) print("'%s' %s" % (line, "matches" if match else "does not match"))
Das würde zumindest mal die richtigen Zeilen treffen und wie du sehen kannst ist das Regex deutlich anders als deines. -
Super, Danke! Ich konnte mir deinem Beispiel eine halb funktionierende Regex hinbekommen. Halb funktionierend, weil es mit dem direkten Test über den Befehl fail2ban-regex /log/datei.log "regex" funktioniert, nicht aber, wenn ich die Zeile in einer entsprechenden conf Datei hinterlege und mit der den Test durchführe. Mal schauen, auch dafür werden die Tiefen des Internets irgendwo eine Lösung parat halten ;)
Ich musste deine Regex auch etwas anpassen, die hatte nämlich Fehler produziert. Meine lautet nun:
(<HOST>)\s+(Admin|Guest) login\s+\w+\s+Failed
Damit bekomme ich genau die Zeilen, die ich suche.
Vielen Dank nochmal!
Beitrag zuletzt geändert: 10.10.2014 15:12:41 von bastobuntu -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage