伙计们...我在 StackExchange 网站上问了这个问题,有人建议这里会更好...
我有一个 nginx 网站,该网站对不存在的文件“mydata.html”的点击次数很多。这些点击次数以 301(或 302)状态代码记录在网站的访问日志中。我想知道如何配置 Fail2ban jail,它将捕获这些点击次数,并在点击次数过多时禁止 IP。
以下是日志文件中的一个示例记录:
1.2.3.4 - - [02/Mar/2025:00:00:06 -0700] “GET /MyData.html HTTP/1.1” 301 185 “http://xxx.MySite.com/MyData.html” “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,如 Gecko) Chrome/125.0.0.0 Safari/537.36”
我尝试使用正则表达式来选择条目^.*MyData.*HTTP.* 301
。是否可以修改该正则表达式以获取 302 或其他代码?
有人能提供一些指导吗?我对正则表达式的了解还不如初学者。谢谢……RDK
您的示例正则表达式以 开头
^
,表示一行的开头,但您的日志行以请求者的 IP 开头1.2.3.4 - - ...
,因此它不会完全匹配该日志行。要使过滤器正常工作,您需要包含 IP/主机并将其与特殊序列 匹配<HOST>
,请参阅此处的 fail2ban 文档:开发过滤器 - 正则表达式为了匹配几种不同的状态代码,您可以将它们放在“或”结构中,
(301|302)
或者仅以30
匹配每个 30x 代码结束正则表达式。您的日志的完整过滤器可能如下所示: