fail2ban 恶意机器人 apache 访问日志 正则表达式

fail2ban 恶意机器人 apache 访问日志 正则表达式

尝试使用 fail2ban 读取 Apache 访问日志来阻止一些恶意机器人,但无法设置正确的正则表达式。我想在访问日志中匹配的行是:

5.10.83.65 - - [18/Mar/2014:09:06:38 +0400] "GET /catalog/product_compare/
,,/form_key/QLZ6ZkIwX3FWqme3/ HTTP/1.1" 302 522 "-" "
Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)"

我正在尝试使用的简化正则表达式:

failregex = ^<HOST>*(AhrefsBot)

但无论我怎么尝试,它都不起作用。我发现这篇文章就是我想要实现的坏机器人


这是我最终采取的措施,无需制作庞大的列表即可阻止所有机器人,使用时请自担风险,因为如果单词匹配,它可能会阻止合法访问者。我使用 ignoreregex 来允许好的机器人,并阻止其他机器人,只要它们称自己为机器人:

failregex = ^<HOST> -.*compatible;.*(Bot|bot)
ignoreregex = (Google|Yandex|Mail|bing)

现在这远非理想,但是可以阻止 99% 不需要的扫描机器人,从而释放服务器,快速而又肮脏。

答案1

您几乎已经完成了,但它*并没有按照您的想法执行,因为它匹配了 0 个或更多的前一个字符,请尝试

^<HOST> -.*(AhrefsBot)

例如

fail2ban-regex '5.10.83.65 - - [18/Mar/2014:09:06:38 +0400] "GET /catalog/product_compare/,,/form_key/QLZ6ZkIwX3FWqme3/ HTTP/1.1" 302 522 "-" "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)"' '^<HOST> -.*(AhrefsBot)'
Running tests
=============

Use   failregex line : ^<HOST> -.*(AhrefsBot)
Use      single line : 5.10.83.65 - - [18/Mar/2014:09:06:38 +0400] "GET /...


Results
=======

Failregex: 1 total
|-  #) [# of hits] regular expression
|   1) [1] ^<HOST> -.*(AhrefsBot)
`-

Ignoreregex: 0 total

Date template hits:
|- [# of hits] date format
|  [1] Day/MONTH/Year:Hour:Minute:Second
`-

Lines: 1 lines, 0 ignored, 1 matched, 0 missed

相关内容