我是ModSecurity 3 + Nginx的新手。今天我发现我的服务器死机了,因为ModSecurity创建了大量的日志文件,每个文件10 GB,服务器的磁盘空间用完了。审计日志被设置为“仅相关”以显示警告和错误。我发现有太多的警告显示出来。
经过调查,我看到99%的绝大多数警告都是一样的,如下所示:
---5jn0CgkO---H--
ModSecurity: Warning. Matched "Operator `Rx' with parameter `^(?i:(?:[a-z]{3,10}\s+(?:\w{3,7}?://[\w\-\./]*(?::\d+)?)?/[^?#]*(?:\?[^#\s]*)?(?:#[\S]*)?|connect (?:\d{1,3}\.){3}\d{1,3}\.?(?::\d+)?|options \*)\s+[\w\./]+|get /[^?#]*(?:\?[^#\s]*)?(?:#[\S]*)?)$' against variable `REQUEST_LINE' (Value: `GET /sale/kenwood-kac-6402-by-download-mauritron-221328-264064/ HTTP/2.0' ) [file "/etc/nginx/modsec/coreruleset-3.3.2/rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf"] [line "47"] [id "920100"] [rev ""] [msg "Invalid HTTP Request Line"] [data "GET /sale/kenwood-kac-6402-by-download-mauritron-221328-264064/ HTTP/2.0"] [severity "4"] [ver "OWASP_CRS/3.3.2"] [maturity "0"] [accuracy "0"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "attack-protocol"] [tag "paranoia-level/1"] [tag "OWASP_CRS"] [tag "capec/1000/210/272"] [hostname "***.***.***.***"] [uri "/sale/kenwood-kac-6402-by-download-mauritron-221328-264064/"] [unique_id "166725616876.036760"] [ref "v0,72"]
我有一个市场网站,人们在那里出售销售的东西,所以这里显示的每个URL都是相同的格式“/sale/something-for-sale-123456/"。
有人能解释一下网站到底出了什么问题,以及如何修复吗?我知道如何创建一个例外来“隐藏”警告,但我想解决根本原因。
谢谢
1条答案
按热度按时间vhmi4jdf1#
你没有提到你使用的是哪个CRS--我猜是3.x版本。
最新版本的CRS(4.0)对每个规则都有更好的描述,所以我建议你先阅读这里提到的规则的注解。
如您所见,有一行文字:* 要更新正则表达式,请运行以下shell脚本... *
在4.0中,每个使用
@rx
的规则都有一个数据文件,正则表达式就是从这个数据文件中生成的。对于这个规则,数据文件是this。我相信,阅读这些评论将有助于理解这一规则的机制。
根据正则表达式和您的日志条目,我可以确认,如果URL看起来像您显示的那样,则会触发此规则。详细的regex 101页面是here。
为了帮助CRS团队的工作,你应该在Github上打开一个new issue,给予详细信息(版本等),因为这是一个误报,我们想关心这些问题。
作为解决方法,您可以进行排除,如下所示:
编辑:
这是我的错误,因为规则否定了匹配的结果,因此它不应该触发。顺便说一句,我们仍然需要调查这种奇怪的行为。@peppy,感谢打开GH上的issue。