So konfigurieren Sie fail2ban richtig, um IP zu sperren, wenn auf falsche Dateien zugegriffen wird

So konfigurieren Sie fail2ban richtig, um IP zu sperren, wenn auf falsche Dateien zugegriffen wird

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

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

Nach der Installation habe ich also jail.localnichts damit gemacht jail.conf. Meine Datei sieht so 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 außerdem apache-script-bots.confeinen 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 wird mir angezeigt, dass alles in Ordnung ist. Aber wenn ich versuche zu testen, ob mein Jail funktioniert, indem ich versuche, es mit folgendem auszulösen: mydomain/main.phpsehe ich, dass ich nicht gejailt bin.

Wenn ich den Status von fail2ban überprüfe, wird mir angezeigt, dass mein Jail funktioniert

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

Ich nehme an, dass das Problem bei regulären Ausdrücken liegt, kann aber nicht verstehen, warum.

Antwort1

Sie müssen fail2ban (über den regulären Ausdruck) mitteilen, wo im Protokolleintrag es ein finden soll, <HOST>damit es diesen Host dann sperren kann. Bei einem normalen Zugriffsprotokoll wäre das am Anfang der Zeile, also

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

würde funktionieren, aber möglicherweise nicht genau das gewünschte Ergebnis erzielen, da es mit den entsprechenden Auslösern an beliebiger Stelle im Protokolleintrag übereinstimmen würde.


Vielleicht möchten Sie etwas versuchen wie

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

wodurch einige der Fäden an spezifischere Orte gebunden werden sollten

verwandte Informationen