So konfigurieren Sie fail2ban so, dass IP gesperrt wird, wenn auf falsche Dateien zugegriffen wird

7

Ich versuche, fail2ban auf meinem Testserver zu konfigurieren . Ich möchte nur vorübergehend alle Skript-Bots blockieren, die versuchen, meine Site zu testen. Also alles das hat cgi-bin, admin, setup.phpund so weiter. Ich habe zuvor alles, was 404-Fehler erzeugt, mit etwas wie grep "HTTP/1.1\" 404" access.log | awk '{print $7 } ' | sort | uniq -c | sort -nin meinem access.log überprüft.

Ich habe sichergestellt, dass keine meiner URLs einen dieser Teile enthält.

Also habe ich nach der Installation etwas erstellt jail.localund nichts damit gemacht jail.conf. Meine Datei sieht folgendermaßen aus (ich möchte die IP für 10 Minuten blockieren):

[DEFAULT]
ignoreip  = 127.0.0.1
bantime   = 600
destemail = myemail
banaction = iptables-multiport
action    = %(action_mwl)s


[apache-script-bots]
enabled  = true
port     = http,https
filter   = apache-script-bots
logpath  = /var/log/apache2/access.log
maxretry = 1

Ich habe auch apache-script-bots.confin einem filter.dOrdner erstellt, der nur Folgendes enthält:

[Definition]
failregex = (admin|setup.php|main.php|w00tw00t|web-console|.jsp|manager|cgi-bin)
ignoreregex =

Beim Neustart von fail2ban zeigt es mir, dass alles in Ordnung ist. Aber wenn ich versuche zu testen, ob mein Gefängnis funktioniert, indem ich versuche, es auszulösen mit: mydomain/main.phpIch sehe, dass ich nicht eingesperrt bin.

Wenn ich den Status von fail2ban überprüfe, wird mir mitgeteilt, dass mein Gefängnis funktioniert

fail2ban-client status
Status
|- Number of jail:  2
`- Jail list:       ssh, apache-script-bots

Ich gehe davon aus, dass das Problem im regulären Ausdruck liegt, kann aber nicht verstehen, warum.

Salvador Dali
quelle

Antworten:

6

Sie müssen fail2ban (über den regulären Ausdruck) mitteilen, wo im Protokolleintrag ein gefunden wird, <HOST>damit dieser Host dann gesperrt werden kann. Für ein normales Zugriffsprotokoll wäre das also am Anfang der Zeile

<HOST> -.*(w00tw00t|main.php|setup.php)

würde funktionieren, aber möglicherweise nicht genau das tun, was Sie wollen, da es mit den relevanten Auslösern an einer beliebigen Stelle im Protokolleintrag übereinstimmen würde.


Vielleicht möchten Sie so etwas versuchen

<HOST> -.*(/w00tw00t|/main.php |setup.php )

Dies sollte einige der Zeichenfolgen an spezifischere Stellen binden

user9517
quelle