джейл fail2ban не работает должным образом

джейл fail2ban не работает должным образом

Я пытаюсь заблокировать недоступные запросы скриптов к nginx с помощью fail2ban.

# Noscript filter /etc/fail2ban/filter.d/nginx-noscript.conf:
#
# Block IPs trying to execute scripts such as .php, .pl, .exe and other funny scripts.
#
# Matches e.g.
# 192.168.1.1 - - "GET /something.cgi
#
[Definition]
failregex = ^<HOST> -.*GET.*(\.asp|\.exe|\.pl|\.cgi|\scgi)
ignoreregex =

Но это также создает попадание, если реферер в журнале доступа содержит тег скрипта. Например, эта строка: (Я скрыл IP и реферер, и я обрезал несколько строк, в реальном журнале эти 4 строки находятся на одной строке.)

1.2.3.4 - - [16/Dec/2013:18:01:10 +0100] "GET / HTTP/1.1" 
301 178 "http://referrer.com/default.aspx" 
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.41 Safari/537.36"

Как изменить регулярное выражение, чтобы найти только .aspetc в GET /xxxxx HTTPразделе?

решение1

Ну, в регулярных выражениях есть очень интересная вещь: регулярные выражения — жадные.

Даже если они получат совпадение в начале предложения, они продолжат поиск и пойдут на последнее совпадение, доступное в предложении. В вашем случае это сопоставление этого "referrer.com/default.aspx", потому что у вас есть регулярное выражение для сопоставления .asp, и оно также будет соответствовать всему с .asp*.

Поэтому при работе с регулярными выражениями необходимо быть предельно конкретным.

Для этого вам следует попробовать следующее:

failregex = ^<HOST> -.*GET.*(\.asp|\.exe|\.pl|\.cgi|\scgi)\"\s\d*

Что-то вроде этого должно работать очень хорошо. Если в любом случае это не работает, теперь вы знаете, в чем проблема, и я уверен, что вы можете исправить это, немного покопавшись в регулярных выражениях.

Надеюсь, это помогло.

Связанный контент