fail2ban apache2 filter

Alles rund um sicherheitsrelevante Fragen und Probleme.
Antworten
Benutzeravatar
whisper
Beiträge: 3155
Registriert: 23.09.2002 14:32:21
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

fail2ban apache2 filter

Beitrag von whisper » 28.11.2014 18:35:54

Guten Abend,
(habt Verständnis, dass ich mich hier mal selber zitiere:)
Fail2ban ist eine Wissenschaft. habe ich mal geschrieben (Artikel von 2010-02-21 19:00)
Naja, nicht wirklich. Aber die Regular Expression sind es. Einfache Dinge gehen mir mittlerweile gut von der Hand, aber die Lücken sind größer als die Wissensinseln. Wenn man sich allerdings den Wikipedia Artikel ansieht kann man schon zu den Schluss kommen, das es die Regex eine Wissenschaft sind. Für mich sind sie das auch. Anders ist es nicht zu erklären, das ich Stunden brauchte, bis ich den Ausdruck für den apache richtig erstellt hatte.

Doch wie testet man das eigentlich richtig? Dafür hat fail2ban das tool fail2ban-regex mitgeliefert

Der korrekte Aufruf erschließt sich nicht sofort. Der richtige Aufruf lautet:

fail2ban-regex logfile 'regexp'
......-------......
Soweit das Vorgeplänkel, nun zum Problem.
Ich raffe es nicht, eine effektive Regel zu kreieren , die funktioniert aber den echten User in Ruhe lässt.
Dieses habe ich momentan im Einsatz.

Code: Alles auswählen

fail2ban-regex brute.log '^.* <HOST>'
(ist natürlich aus der Not geboren und will verbessert werden)

Ein kleiner Ausschnitt aus brute.log, was wiederum ein Ausschnitt aus dem other_vhost_access.log ist
xxxxxxxxxx.de:80 108.168.219.163 - - [23/Nov/2014:05:48:26 +0100] "GET /?showfile=../../../../../../../../../../etc/passwd%00 HTTP/1.0" 200 359 "-" "-"
yyyyy.de:80 108.168.219.163 - - [23/Nov/2014:05:48:26 +0100] "GET /?skin=../../../../../../../../../../etc/passwd%00 HTTP/1.0" 200 6619 "-" "-"
zzzzzzzz.de:80 108.168.219.163 - - [23/Nov/2014:05:48:26 +0100] "GET /?ruta=../../../../../../../../../../etc/passwd%00 HTTP/1.0" 200 4526 "-" "-"
xxxxxxxxxxx.de:80 108.168.219.163 - - [23/Nov/2014:05:48:26 +0100] "GET /?side=../../../../../../../../../../etc/passwd%00 HTTP/1.0" 200 359 "-" "-"
yyyyyyyyyy.de:80 108.168.219.163 - - [23/Nov/2014:05:48:26 +0100] "GET /?safehtml=../../../../../../../../../../etc/passwd%00 HTTP/1.0" 200 4526 "-" "-"
xxxxxxxxxxx.de:80 108.168.219.163 - - [23/Nov/2014:05:48:26 +0100] "GET /?site_id=../../../../../../../../../../etc/passwd%00 HTTP/1.0" 200 359 "-" "-"
zzzzzzzz.de:80 108.168.219.163 - - [23/Nov/2014:05:48:26 +0100] "GET /?static=../../../../../../../../../../etc/passwd%00 HTTP/1.0" 200 6619 "-" "-"
Diese Regex ist natürlich falsch. Die Beispiele, die im Paket sind, passen nicht zum common Log Format vom Apache.
Endziel ist eine Regex, die nicht nur diese shellshock versuche stoppt (Ja, die tests sehen anders aus), sondern alles, was einfach Scriptmässig soviel Requests pro Sekunde macht.
Ich habe momentan findtime auf 5 und max. counts auf 46. Damit ist es besser geworden, es erwischt aber nicht nur die bösen Buben, sondern alle und manche gar nicht.

Was soll der Post?
Ich suche ein funktionierendes Beispiel dass bei mir auf wheezy mit Apache funktioniert.
Gibt es fail2ban apache2 filter Sammlung?

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: fail2ban apache2 filter

Beitrag von rendegast » 28.11.2014 20:12:58

Debianlibapache2-modsecurity / Debianlibapache2-mod-security ?

Obiges sind die GETs resp. access.log,
wo sind die Meldungen des apache, daß "File does not exist" o.ä.

Code: Alles auswählen

grep 108.168.219.163 /var/log/apache*/*error.log

Da dürften die mitgebrachten Filter doch schon mal anschlagen.
Gibt es fail2ban apache2 filter Sammlung?
/etc/fail2ban/filter.d/apache-* ?
Die müssen aber auch aktiviert werden -> jail.conf


fail2ban-regex brute.log '^.* <HOST>'
->

Code: Alles auswählen

fail2ban-regex brute.log '^[^ ]* <HOST>'

Code: Alles auswählen

fail2ban-regex brute.log '^[^ ]* <HOST> - - .* \"GET.*/etc/passwd'
In der Art, filter.d/TEST_dfde.conf:

Code: Alles auswählen

[Definition]

failregex = ^[^ ]* <HOST> - - .* \"GET.*/etc/passwd
            ^[^ ]* <HOST> - - .* \"GET.*/etc/shadow
            ^[^ ]* <HOST>  - -.* \"GET.*/etc/group
            ^[^ ]* <HOST> - - .* \"GET.*/etc/gshadow

#failregex = ^[^ ]* <HOST> - - .* \"GET.*/etc/(passwd|shadow|group|gshadow)
#   So fuehrt fail2ban-regex aber nicht mehr die jeweiligen Treffer getrennt auf

ignoreregex = 

[INCLUDES]

before = apache-common.conf
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Benutzeravatar
whisper
Beiträge: 3155
Registriert: 23.09.2002 14:32:21
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

Re: fail2ban apache2 filter

Beitrag von whisper » 29.11.2014 13:58:27

Danke für deine Antwort.
Die im Paket, also in filter.d/ vorhandenen Beispiele sind ja nicht direkt brauchbar, eins behandelt Login Versuche auf geschützte Seiten, das ist ja nicht mein Problem.
Ja, natürlich habe ich die Filter aktiviert:

Code: Alles auswählen

fail2ban-client status
Status
|- Number of jail:	11
`- Jail list:		apache-badbots, courierpop3, courierpop3s, pureftpd, courierimap, ssh, courierimaps, apache-overflows, sasl, apache, apache-hacker
das apache-hacker enthält meine oben aufgeführte regex.
EDIT
dein Beispiel funktionert, (hatte die Datei nicht korrekt angegeben).

Code: Alles auswählen

Success, the total number of match is 192

Whow,

Ich hatte einfache das Problem, das ich am Anfang der Logzeile nicht 100% richtig lag, jetzt wirds klarer

Antworten