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

ale*_*bal 5 fail2ban

我经常不得不向 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|info@domaincrawler.com|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}
Run Code Online (Sandbox Code Playgroud)

昨天我添加了“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
Run Code Online (Sandbox Code Playgroud)

怎么了?它在工作吗?有没有办法判断是否有错误以及错误是什么?


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

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

  • 例如,如果我写“netEstate NE Crawler”或只写“​​netEstate”有区别吗?
  • 为什么这个字符串“ atSpider/1\.0”有所有这些斜线?
  • 一切 ”。” 必须以斜线开头?( China Local Browse 2\.6|DataCha0s/2\.0|DBrowse 1\.4b)
  • 电子邮件可以用作字符串吗?(例如:info@domaincrawler.com)
  • 带有像“ Go 1.1 package http”这样的空格的字符串是正确的还是会产生错误?
  • 可以使用“-”字符吗?(例如:python-requests、Python-urllib)
  • 可以使用“_”字符吗?(例如:archive.org_bot)

n3k*_*3ko 1

你有robots.txt吗?这是为了告诉机器人在哪里以及如何爬行。这里的问题不止一个,我们一一来看。

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

这些配置行是正则表达式,这是其他一些问题的简短答案,例如:

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

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

  • 谢谢,我做了一些更改,现在应该可以正常工作了。不幸的是,许多机器人不关心robots.txt 我尝试使用htaccess,但我在这台服务器上有很多网站,没有一个是wordpress,fail2ban允许我一次解决所有网站上的问题...如果我能得到它正常工作... (2认同)