我应该如何编写 fail2ban -> apache-badbots.conf 规则?

我应该如何编写 fail2ban -> apache-badbots.conf 规则?

我经常需要向 apache-badbots.conf 文件中添加新规则,但每次我都怀疑它不再起作用……

例如,这是我当前的 apache-badbots.conf 文件:

    [Definition]

badbotscustom = MQQBrowser|LieBaoFast|Mb2345Browser|zh-CN|python-requests|LinkpadBot|MegaIndex|Buck|SemrushBot|SeznamBot|JobboerseBot|AhrefsBot|AhrefsBot/6.1|MJ12bot|[email protected]|SemrushBot/6~bl|cortex|Cliqzbot|Baiduspider|serpstatbot|Go 1.1 package http|Python-urllib|StormCrawler|archive.org_bot|CCBot|BLEXBot|ltx71|DotBot|EmailCollector|WebEMailExtrac|Track$
badbots = Atomic_Email_Hunter/4\.0|atSpider/1\.0|autoemailspider|bwh3_user_agent|China Local Browse 2\.6|ContactBot/0\.2|ContentSmartz|DataCha0s/2\.0|DBrowse 1\.4b|DBrow$

#failregex = ^<HOST> -.*"(GET|POST|HEAD).*HTTP.*"(?:%(badbots)s|%(badbotscustom)s)"$
failregex = ^<HOST> -.*"(GET|POST).*HTTP.*".*(?:%(badbots)s|%(badbotscustom)s).*"$

ignoreregex =

datepattern = ^[^\[]*\[({DATE})
              {^LN-BEG}

昨天我添加了“MQQBrowser | LieBaoFast | Mb2345Browser | zh-CN”,今天我在我的访问日志中看到很多 MQQBrowser 和 LieBaoFast。

sudo cat /var/log/apache2/access.log | awk -F\" '{print $6}' | sort | uniq -c | sort -n
    ...
3408 Mozilla/5.0(Linux;U;Android 5.1.1;zh-CN;OPPO A33 Build/LMY47V) AppleWebKit/537.36(KHTML,like Gecko) Version/4.0 Chrome/40.0.2214.89 UCBrowser/11.7.0.953 Mobile Safari/537.36
3418 Mozilla/5.0(Linux;Android 5.1.1;OPPO A33 Build/LMY47V;wv) AppleWebKit/537.36(KHTML,link Gecko) Version/4.0 Chrome/42.0.2311.138 Mobile Safari/537.36 Mb2345Browser/9.0
3444 Mozilla/5.0 (Linux; Android 7.0; FRD-AL00 Build/HUAWEIFRD-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043602 Safari/537.36 MicroMessenger/6.5.16.1120 NetType/WIFI Language/zh_CN
3473 Mozilla/5.0(Linux;Android 5.1.1;OPPO A33 Build/LMY47V;wv) AppleWebKit/537.36(KHTML,link Gecko) Version/4.0 Chrome/43.0.2357.121 Mobile Safari/537.36 LieBaoFast/4.51.3

出了什么问题?它还能正常工作吗?有没有办法判断是否存在错误以及错误是什么?


我更新是因为它仍然不明白某些事情,例如今天我在我的日志中发现了其他应该被禁止的机器人。

只是为了理解,这个过滤器在服务器的访问 .log 中查找我在 apache-badbots.conf 中添加的字符串,如果找到,它会向 fail2ban 添加一条规则,对吗?

  • 举例来说,如果我写“netEstate NE Crawler”或只写“​​netEstate”,有什么区别吗?
  • 为什么这个字符串“ atSpider/1\.0”上有这么多斜线?
  • 所有的“.”前面都要加斜线吗? ( China Local Browse 2\.6|DataCha0s/2\.0|DBrowse 1\.4b)
  • 电子邮件可以用作字符串吗?(例如:[电子邮件保护]
  • 带有空格(如“ ”)的字符串Go 1.1 package http是否正确或产生错误?
  • 可以使用“-”字符吗?(例如:python-requests、Python-urllib)
  • 可以使用“_”字符吗?(例如:archive.org_bot)

答案1

您有 robots.txt 吗?这是用来告诉机器人在哪里以及如何抓取的。这里有多个问题,让我们一一查看。

如果您想检查它是否正常工作,只需转到 fail2ban 日志。要了解其工作原理,请转到 /usr/share/doc/fail2ban/README 或其他文档。简而言之:fail2ban 通过定义的过滤器读取您的日志文件,并为有问题的日志行中发现的问题 IP 地址创建防火墙规则。如果定义的机器人有一个 IP 地址,它将在几次尝试后被禁止。在这个特定情况下,MQQBrowser 和 LieBaoFast 有来自许多不同 IP 的数千个请求。因此,除非他们有一些未被阻止的 IP,否则会有新的日志条目。

这些配置行是常用表达,这是对其他一些问题的简短回答,例如:

  • 如果我写“netEstate NE Crawler”或只是“netEstate”,会有什么区别吗?是的,第一个更具体,可能没有必要。
  • 有 \. 而不是 . 因为普通点匹配任何字符
  • 空格、破折号和下划线 (-,_) 都可以,但是括号不行。

如果您确实想根据用户代理字符串选择客户,您应该使用.htaccess、BBQ 或其他插件。

相关内容