• This forum has a zero tolerance policy regarding spam. If you register here to publish advertising, your user account will be deleted without further questions.

Fail2Ban: eigener Filter matcht nicht

Hallo liebes Forum,

nachdem ich lange Zeit hier nur gelesen habe, möchte ich jetzt eure Hilfe in Anspruch nehmen.

Kurz zum Umfeld/Aufgabe:
Es soll eine Owncloudinstallation mit Fail2Ban abgesichert werden. Es wurde ein eigenes Authentifizierungsplugin für Owncloud geschrieben, das auch Logs produziert. Das Standardlogformat sieht dabei etwa so aus

Code:
{"app":"user_mybackend","message":"Nov 15 10:47:14: 10.0.7.1: login failed for username","level":1,"time":1352976434}

Dafür habe ich nun einen Filter in Fail2Ban geschrieben

Code:
root@server:/etc/fail2ban/filter.d# cat owncloud.conf 
[Definition]
failregex =message\"\:\".*\:\ <HOST>\: login failed.*$

Dann habe ich das Ganze getestet

Code:
root@server:/etc/fail2ban/filter.d# fail2ban-regex /var/log/owncloud.log owncloud.conf 
...
Success, the total number of match is 90

Nach dem Einbinden in die jail.conf und restart von Fail2Ban wird der Filter auch gestartet. Im Log erhalte ich aber keinen Match:

Code:
2012-11-15 11:47:05,403 fail2ban.filter : DEBUG  /var/log/owncloud.log has been modified
2012-11-15 11:47:05,411 fail2ban.filter.datedetector: DEBUG  Sorting the template list
2012-11-15 11:47:15,421 fail2ban.filter : DEBUG  /var/log/owncloud.log has been modified
2012-11-15 11:47:15,422 fail2ban.filter.datedetector: DEBUG  Sorting the template list

Dagegen hat ein kurzer Test mit SSH auf Anhieb funktioniert und produziert auch entsprechende Logeinträge:
Code:
2012-11-15 11:29:20,962 fail2ban.filter : DEBUG  /var/log/auth.log has been modified
2012-11-15 11:29:20,962 fail2ban.filter : DEBUG  Found 10.0.7.1
2012-11-15 11:29:20,962 fail2ban.filter.datedetector: DEBUG  Sorting the template list
2012-11-15 11:29:23,966 fail2ban.filter : DEBUG  /var/log/auth.log has been modified
2012-11-15 11:29:23,966 fail2ban.filter.datedetector: DEBUG  Sorting the template list
2012-11-15 11:29:24,967 fail2ban.filter : DEBUG  /var/log/auth.log has been modified
2012-11-15 11:29:24,967 fail2ban.filter : DEBUG  Found 10.0.7.1
2012-11-15 11:29:24,967 fail2ban.filter.datedetector: DEBUG  Sorting the template list

Hat jemand einen Vorschlag, wie ich das weiter debuggen kann? Warum ist der Test mit fail2ban-regex erfolgreich aber der normale Fail2Ban server nicht?

Grüße
Terminatorthree
 
Versuche mal folgende Regexp und poste bitte den entsprechenden Teil deiner jail.conf:

Code:
[Definition]
failregex = message\"\:\".*\:\ <HOST>\: login failed for
 
Vielen Dank für deine Antwort. Das Ergebnis deiner Regex ist leider das Gleiche.
Code:
2012-11-15 12:19:42,114 fail2ban.filter : DEBUG  /var/log/owncloud.log has been modified
2012-11-15 12:19:42,122 fail2ban.filter.datedetector: DEBUG  Sorting the template list
2012-11-15 12:19:47,128 fail2ban.filter : DEBUG  /var/log/owncloud.log has been modified
2012-11-15 12:19:47,128 fail2ban.filter.datedetector: DEBUG  Sorting the template list
2012-11-15 12:19:52,134 fail2ban.filter : DEBUG  /var/log/owncloud.log has been modified
2012-11-15 12:19:52,134 fail2ban.filter.datedetector: DEBUG  Sorting the template list

Meine jail.conf in Ausschnitten

Code:
[DEFAULT]
ignoreip = 127.0.0.1
bantime  = 600
maxretry = 5

backend = polling

destemail = root@localhost

banaction = iptables

[owncloud]

enabled  = true
port     = 443
protocol = tcp
filter   = owncloud
logpath  = /var/log/owncloud.log
 
Dann wird es an der Regex wohl kaum liegen, haben bei mir auch beide funktioniert mit fail2ban-regex.

Versuche mal Folgendes:

Code:
[owncloud]

enabled  = true
port     = 443
protocol = tcp
filter   = owncloud
action = iptables-multiport[name=owncloud, port="https", protocol=tcp]
logpath  = /var/log/owncloud.log
findtime = 60
bantime = 600
maxretry = 5
Desweiteren würde ich pyinotify oder gamin als Backend verwenden statt polling.

Bist du dir sicher, dass /var/log/owncloud.log von fail2ban (bzw. dem Backend) lesbar ist?
 
Last edited by a moderator:
Die Berechtigungen für das File passen, hab ich gerade nochmals kontrolliert. Ich habe auch deine komplette Config eingefügt aber auch damit bekomme ich kein Match im Log. Laut den Kommentaren in der jail.conf, kann es mit gamin zu Problemen. pyinotify ist da gar nicht erwähnt. Ich habe es trotzdem mal getestet und auch hier stellt sich keine Änderung ein.
 
Lass mal das "port = 443" in deiner jail.conf weg. Wenn das auch nicht hilft, habe ich auf die Schnelle leider keine Idee mehr. Die Regexp ist korrekt und in der jail.conf sieht ebenfalls alles richtig aus. Wenn du hier keine Lösung mehr zu deinem Problem findest, könntest du noch in die fail2ban-Mailingliste schreiben.

PS: pyinotify ist nur in der aktuellen fail2ban Version verfügbar, also wenn du es von den Quellen kompilierst. An dem Backend wird's aber eh nicht liegen, da das Ganze mit SSH ja auch funktioniert.
 
Last edited by a moderator:
Hi,

Also an dem Port liegt es deifinitiv nicht, das habe ich jetzt auch probiert. Auch an dem Backend kann es eigentlich nicht liegen, da ja eindeutig erkannt wird, dass sich die Datei geändert hat. Nur die Regel scheint dann nicht zu matchen. Hier nochmal der direkte Logvergleich:

SSH Default Filter:
Code:
2012-11-15 11:29:20,962 fail2ban.filter : DEBUG  /var/log/auth.log has been modified
2012-11-15 11:29:20,962 fail2ban.filter : DEBUG  Found 10.0.7.1
2012-11-15 11:29:20,962 fail2ban.filter.datedetector: DEBUG  Sorting the template list

Eigener Filter:
Code:
2012-11-15 12:19:42,114 fail2ban.filter : DEBUG  /var/log/owncloud.log has been modified
2012-11-15 12:19:42,122 fail2ban.filter.datedetector: DEBUG  Sorting the template list

Falls noch jemand eine Idee hat, warum fail2ban-regex die Config anders interpretiert (denn hier funktioniert die Regel ja) als der fail2ban-server, wäre ich für Erleuchtung sehr dankbar.

Grüße
Terminatorthree
 
Code:
[Definition]
failregex = message\"\:\".*\: <HOST>\: login failed for
So könnte man's auch noch mal versuchen, also ohne den einen Whitespace zu escapen und die anderen nicht. Denkst du auch an das Leerzeichen nach "failregex =", also "failregex = "? In deinem Beispiel im ersten Beitrag fehlt das. Wer weiß, vielleicht liegt das ja daran.
 
Hi,

das ist mir jetzt schon etwas peinlich aber ich hab den Fehler gefunden. PHP hat wohl eine falsche Zeitzone genommen, sodass alle Timestamps eine Stunde in der Vergangenheit liegen. Damit wurden die natürlich nicht von Fail2Ban gefunden und auch nicht geloggt.

Nochmals vielen Dank für deine Hilfe, das Thema ist für mich damit erledigt.

Grüße
Terminatorthree
 
Freut mich, dass du das Problem gelöst hast. Hatte bzgl. fail2ban selbst auch wirklich keine Idee mehr, da alle Configs korrekt waren.

Kein Problem! :)
 
Das würde mich auch interessieren. Der Fehler scheint hier aber bei Owncloud zu liegen. Eine kurz erstellte PHP Datei gibt das Datum korrekt aus. Letztendlich habe ich das Logging in der Owncloud angepasst, indem die Zeitzone nochmals mittels date_default_timezone_set gesetzt wird.
 
Back
Top