Fail2Ban - Apache Proxy

JensP

New Member
Hallo Zusammen,

ich versuche aktuell Proxyanfragen auf den Apache mit fail2ban zu verhindern.

Original Howto: http://www.fail2ban.org/wiki/index.php/HOWTO_apache_proxy_filter
Anpassungen an neuste fail2ban Version: http://www.arch-ed.dk/wordpress/?p=106

Funktioniert auch von der Arbeit ganz gut, zu hause "banne" ich mich immer selber:

Hier mein Regexausdruck der im Apache Access Log angewendet wird:
Code:
^(?:(?![0-9\.]* -.*"[A-Z]* (/|.*HTTP/1\.[0-9]" (301|302)))<HOST>)

Der funktionierende Aufruf von der Arbeit (xxx-xxx-xxx-xxx = IP):
Code:
xxx-xxx-xxx-xxx.ip.mynet.de - - [17/Nov/2011:08:27:42 +0100] "GET /?page=simple HTTP/1.1" 200 12105 "http://domain.net/" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.1 (KHTML, like Gecko) Ubuntu/11.10 Chromium/14.0.835.202 Chrome/14.0.835.202 Safari/535.1"

von zu Hause:
Code:
p98b3bbab.dip.t-dialin.net - - [16/Nov/2011:23:26:01 +0100] "GET /?page=simple HTTP/1.1" 200 12105 "http://domain.net/" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.1 (KHTML, like Gecko) Ubuntu/11.10 Chromium/14.0.835.202 Chrome/14.0.835.202 Safari/535.1"

Hat jemand ne Idee, irgendwie hab ich Probleme mit der fail2ban failregex Syntax. Was muss denn wie matchen?
 
Und was funktioniert nicht genau? Du schreibst doch, dass es bei dir von der Arbeit und von zu Hause klappt, dass gebannt wird?
 
Ja das Problem ist, dass ich falscherweise geblockt werde (bei den gleich Zugriffen wie von der Arbeit, s. Logauszug, die GET Anfrage ist gleich).

Fazit, beide Aufrufe beginnen nicht mit http:// somit sollten diese auch nicht geblockt werden. Ich bin halt aktuell nicht sicher ob der Regex korrekt ist, da im Fail2ban Manual da nicht so ganz aussagekräftig ist.

Der Ausdruck tritt auf Regex zu -> kein ban?
Der Ausdruck tritt nicht auf Regex zu -> banned?
Oder?

Dann ist die Frage warum die o.g. Ausdrück unterschieldich sind? Oder bin ich einfach nur vom Loglesen blind?
 
failregex bedeutet, dass dann gebannt wird!
ignoreregex bedeutet ignoriere Zeile im Log.
 
Last edited by a moderator:
Ahh ok :-) danke schomal... dennoch verstehe ich immer noch nicht ganz warum ich zu Hause gebanned werde, aber nicht auf der Arbeit... ein Unterschied ist die feste IP, aber das kann wohl kaum das Problem sein, da eh der Hostnamen aufgelöst (s. Log)
 
Erkläre doch bitte mal, was du genau blockieren willst.
Nur GET/POST Requests mit http bzw. https am Anfang, oder?
 
Genau!

Hintergrund, durch eine nicht aktuelle Version des Apaches und eine Lücke im Proxy Mod war ein Tag lang mein Server als Reverse Proxy mißbrauchbar. Nachdem der Apache geupdated ist, die Lücke zwar geschlossen und mod_proxy ohnehin deaktiviert, kommen ständig Requests, weil wohl die Domain wohl irgendwo gelistet oder in einem Skript ist. Das legt den Server innerhalb weniger Minuten lahm (Load steigt in unermäßliche).

Fail2ban würde das Problem super lösen, wenn ich eben nicht das Problem hätte das trotz korrekter Anfrage (mit / am Anfang) manche Besucher auch gebannt werden.
 
Last edited by a moderator:
Code:
^(?:(?![0-9\.]* -.*"[A-Z]* (/|.*HTTP/1\.[0-9]" (301|302)))<HOST>)

Dein Regex ist sehr seltsam und konfus, sicher dass er das macht was du willst? ;)
Wie manifestiert sich ein solcher ungebetener Gast in deinen Logs, welche Merkmale weisen auf ihn hin? (Aufgerufenes Skript ,...)
 
Hi,

ja der Regexausdruck kommt aus dem Howto

This regex will match any lines in the access logs that DO NOT begin with a forward slash / For example, these lines here will NOT be matched because they begin with a forward slash / on "GET /"

Code:
192.168.1.1 - - "GET /
192.168.1.1 - - "GET /directory/

But this WILL be matched because it DOESN'T begin with a forward slash / on "GET http..."
Code:
192.168.1.1 - - "GET http://www.infodownload.info/proxyheader.php

Note: requests that end in 301/302 redirects are ignored due to some false positives otherwise

Wie gesagt der Ausdruck scheint generell zu funktionieren, nur sperrt der manchmal trotzdem legale Aufrufe mit beginnendem /

Mittlerweile hab ich das fail2ban-regex Tool gefunden, aber irgendwie komm ich mit der Fail2ban Syntax und dem <HOST> Alias noch nicht so klar.

Aktueller Versuch:
Code:
^(.* - - .*"(GET|POST) ((http|https):\/\/.* HTTP\/1.[0-9]" (301|302))).*<HOST>
 
Last edited by a moderator:
Wow ich glaub ich habs :-)

Code:
^<HOST> - - .*"(GET|POST|PUT|DELETE) ((http|https):\/\/.* HTTP\/1.[0-9]").*$

scheint genau meine Bedürnisse zu matchen! Oder überseh ich was?

Gruß
 
JensP said:
Mittlerweile hab ich das fail2ban-regex Tool gefunden, aber irgendwie komm ich mit der Fail2ban Syntax und dem <HOST> Alias noch nicht so klar.

Auch wenn ich hier nichts beitragen kann - würdest Du mir, bzw. uns verraten, welches Tool Dir dabei nützlich war?
Gerade Thema regex und fail2ban ist für viele nicht einfach.

Danke!
 
Schreibt er doch: fail2ban-regex
Damit kannst du deine Regex auf das Log loslassen und siehst, was für Zeilen er findet. So kannst du überprüfen, ob deine Regex das gewünschte Ergebnis bringt. fail2ban-regex führt halt keine Sperren durch, falls die Regex zu viele Logeinträge liefert, die nicht benötigt werden.
 
Sorry, hatte ein Brett vor dem Kopf.

Irgendwie habe ich aus dem Beitrag heraus gelesen, dass er nicht "das" sondern "ein" fail2ban-regex-Tool gefunden hat.

Hatte schon die Hoffnung, jemand hätte das ultimative Supertool gefunden, mit welchem die Analyse sowie das Aufsetzen einfacher geht.

Schande über mich - ich brauch dringend Schlaf :)
 
Back
Top