fail2ban を使用して、nginx への利用できないスクリプト要求をブロックしようとしています。
# 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 行になっています。)
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"
.asp
セクション内の etcのみを検索するように正規表現を変更するにはどうすればよいでしょうかGET /xxxxx HTTP
?
答え1
さて、正規表現には非常に興味深い点があり、正規表現は貪欲であるということです。
文の先頭で一致が見つかった場合でも、検索は続行され、文で最後に一致するものを探します。あなたの場合、.asp に一致する正規表現があり、.asp* を含むものにも一致するため、この "referrer.com/default.aspx" に一致します。
したがって、正規表現を使用する場合は、非常に具体的にする必要があります。
この場合は、次のことを試してください。
failregex = ^<HOST> -.*GET.*(\.asp|\.exe|\.pl|\.cgi|\scgi)\"\s\d*
このようなものは非常にうまく機能するはずです。 万が一、うまく機能しない場合は、何が問題なのかがわかったので、正規表現を少し調べれば修正できるはずです。
これが役に立つことを願っています。