我对 ModSecurity 还比较陌生,正在寻求一些建议。

我在 ConfigServer 规则集下有一个默认的 ModSecurity 安装。

最近,我看到 id 为“2000064”的大量阻止,这是 REQUEST_HEADERS:User-Agent 的模式匹配“Mozilla/(4|5)\\\\.0$”。

我怀疑这些都是真正的访问者,但我们的托管服务提供商警告我们不要删除此规则,因为它会阻止旧版本的浏览器和机器人。

我的问题是,这种模式匹配是什么意思:Mozilla/(4|5)\.0

这是否意味着任何带有 Mozilla 4 和 Mozilla 5 的用户代理都会被阻止?

这很奇怪,因为许多合法浏览器的用户代理都是 Mozilla/5.0。甚至我当前的 Firefox 浏览器的用户代理也是 Mozilla/5.0 (Windows NT 10.0; Win64…)

我的托管服务提供商是否正确,或者这条规则是否太过激进?

===================================== 以下是日志示例

Pattern match "Mozilla/(4|5)\\.0$" at REQUEST_HEADERS:User-Agent. [file "/etc/apache2/conf.d/modsec2.liquidweb.conf"] [line "104"] [id "2000064"]

[28/Jun/2024:03:54:21 --0400] Zn5sLRJ-7YQPbpofPVCiQwAAAgk 140.248.34.33 57238 69.16.199.39 443
--74de6d2a-B--
GET /mailmx/campaigns/bf371nqza781f/track-opening/vt017x0r0p698 HTTP/1.1
Host: *****(removed for privacy).com
Accept: image/webp,image/png,image/svg+xml,image/*;q=0.8,video/*;q=0.8,*/*;q=0.5
Accept-Language: cs-CZ,cs;q=0.9
Connection: keep-alive
Accept-Encoding: gzip, deflate, br
User-Agent: Mozilla/5.0

--74de6d2a-F--
HTTP/1.1 406 Not Acceptable
Content-Length: 373
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=iso-8859-1

--74de6d2a-H--
Message: Access denied with code 406 (phase 2). Pattern match "Mozilla/(4|5)\\.0$" at REQUEST_HEADERS:User-Agent. [file "/etc/apache2/conf.d/modsec2.liquidweb.conf"] [line "104"] [id "2000064"]
Apache-Error: [file "apache2_util.c"] [line 271] [level 3] [client 140.248.34.33] ModSecurity: Access denied with code 406 (phase 2). Pattern match "Mozilla/(4|5)\\\\\\\\.0$" at REQUEST_HEADERS:User-Agent. [file "/etc/apache2/conf.d/modsec2.liquidweb.conf"] [line "104"] [id "2000064"] [hostname "Host: *****(removed for privacy).com"] [uri "/mailmx/campaigns/bf371nqza781f/track-opening/vt017x0r0p698"] [unique_id "Zn5sLRJ-7YQPbpofPVCiQwAAAgk"]
Action: Intercepted (phase 2)
Stopwatch: 1719561261282883 1915 (- - -)
Stopwatch2: 1719561261282883 1915; combined=241, p1=88, p2=151, p3=0, p4=0, p5=2, sr=55, sw=0, l=0, gc=0
Producer: ModSecurity for Apache/2.9.3 (http://www.modsecurity.org/).
Server: Apache
Engine-Mode: "ENABLED"


最佳答案
1

这是最新版 Firefox正常 字符串:

Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion

正则表达式Mozilla/(4|5)\.0$不会匹配这个,因为$表示字符串的结尾。它会匹配“Mozilla/5.0”,因为零后面没有任何内容,但不会匹配“Mozilla/5.0 blah blah”。

也就是说,任何只阻止某些用户代理的过滤器都是彻头彻尾的垃圾,因为用户代理是由远程(由 Web 客户端)自由设置的,并且这种阻止不仅容易规避,而且这是能力最差的攻击者会做的第一件事。用户代理字符串可以用作复杂检测的一部分,以建立远程指纹,但单独使用时,它只能有限地用于统计。

目前尚不清楚这些是否是攻击者。您不能仅通过查看用户代理来判断。但是,我不明白为什么仅仅因为它是旧的 Web 客户端就阻止任何人。旧的,那又怎样?

2

  • 谢谢 Nikita。我们的主机说,如果用户代理只是“Mozilla/4”或“Mozilla/5”,则很可能是机器人。这是真的吗?有合法的浏览器使用 Mozilla/5.0 吗?


    – 

  • 我不知道。对于“最有可能”,我希望有一些统计数据。我怀疑机器人不会愚蠢到不从任何最近的浏览器中复制 UA 字符串。此外,“机器人”并不意味着“坏”,或者你介意爬虫为你建立索引吗?


    –