間違ったファイルにアクセスしている場合に IP を禁止するように fail2ban を適切に設定する方法

間違ったファイルにアクセスしている場合に IP を禁止するように fail2ban を適切に設定する方法

設定しようとしています失敗2バンテスト サーバーで、サイトを調査しようとするスクリプト ボットを一時的にブロックしたいだけです。つまりcgi-bin、、、adminなどを含むすべてのものです。以前、 access.log でsetup.php404 エラーを生成するものをすべて確認しました。grep "HTTP/1.1\" 404" access.log | awk '{print $7 } ' | sort | uniq -c | sort -n

どの URL にもこれらの部分が含まれていないことを確認しました。

インストール後、 を作成しjail.local、何もしていませんjail.conf。ファイルは次のようになります (IP を 10 分間ブロックします)。

[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

apache-script-bots.confフォルダーも作成しましたがfilter.d、その中には次のものだけが含まれています:

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

fail2ban を再起動すると、すべて正常であると表示されます。しかし、次のようにトリガーして jail が機能するかどうかをテストしようとすると、mydomain/main.phpjail ではないことがわかります。

fail2banのステータスを確認すると、jailが動作していることがわかります

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

問題は正規表現にあると推測しますが、その理由がわかりません。

答え1

fail2banに(正規表現を使って)ログエントリのどこに<HOST>ホストを禁止するかを伝える必要があります。通常のアクセスログでは、それは行の先頭にあるので、

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

動作しますが、ログ エントリ内の任意の場所にある関連するトリガーと一致するため、希望どおりに動作しない可能性があります。


次のようなことを試してみるといいかもしれません

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

これにより、いくつかの文字列をより具体的な場所に結び付けることができる

関連情報