随机地,modsecurity 会阻止合法客户端请求,给出错误 403。这是 modsec_audit.log 的段落:
---d6e99f36-A--
[21/Jun/2020:07:14:45 +0100] Xu761X8AAAEAADI1YrAAAABQ xxx.xxx.xxx.xxx 60036 xxx.xxx.xxx.xxx 443
--d6e99f36-B--
GET /s/p.json?eyJ0IjoyLjksImYiOnsiZmxpX3BsIjoiYXNwZXJzb3IiLCJmbGlfZyI6LTEsImZsaV9jIjotMSwiZmxpX20iOjAsImZsaV9hIjoyMDE1fSwiY3NyZiI6ImE5MDMwMDkxLTBlZjg$
Host: fneon.eu
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:77.0) Gecko/20100101 Firefox/77.0
Accept: */*
Accept-Language: pt-PT,pt;q=0.8,en;q=0.5,en-US;q=0.3
Accept-Encoding: gzip, deflate, br
Referer: https://example.com/
Content-Type: application/json,charset=UTF-8
DNT: 1
Connection: keep-alive
Cookie: jwt=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIyYzMwOGQwYTc5NGEyZWU2MjMxYzI2M2EyYWMzNjkwMCIsImV4cCI6MTU5MzY0NDQwMCwiaWF0IjoxNTkyNzE5ODg1$
Pragma: no-cache
Cache-Control: no-cache
--d6e99f36-F--
HTTP/1.1 403 Forbidden
X-FRAME-OPTIONS: DENY
X-Content-Type-Options: nosniff
Content-Length: 199
Keep-Alive: timeout=5, max=89
Connection: Keep-Alive
Content-Type: text/html; charset=iso-8859-1
--d6e99f36-E--
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access this resource.</p>
</body></html>
--d6e99f36-H--
Apache-Error: [file "mod_evasive20.c"] [line 259] [level 3] client denied by server configuration: %s
Apache-Handler: proxy-server
Stopwatch: 1592720085355364 815 (- - -)
Stopwatch2: 1592720085355364 815; combined=42, p1=35, p2=0, p3=1, p4=0, p5=5, sr=0, sw=1, l=0, gc=0
Response-Body-Transformed: Dechunked
Producer: ModSecurity for Apache/2.9.0 (http://www.modsecurity.org/).
Server: Apache
Engine-Mode: "ENABLED"
--d6e99f36-Z--
这是我的配置(仅更改):
/etc/modsecurity/modsecurity.conf
SecRuleEngine On
SecResponseBodyAccess Off
SecRequestBodyLimit 5242880 (15Mb)
/etc/apache2/mods-enabled/evasive.conf
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 10
DOSSiteCount 75
DOSPageInterval 5
DOSSiteInterval 1
DOSBlockingPeriod 3000
DOSWhitelist 127.0.0.1
DOSWhitelist xxx.xxx.xxx.xxx
DOSWhitelist xxx.xxx.xxx.xxx
DOSWhitelist xxx.xxx.xxx.xxx
DOSLogDir "/var/log/mod_evasive"
</IfModule>
/etc/apache2/conf-enabled/security.conf
ServerTokens Prod
重现问题的一种方法是当客户端发出此类请求时:
https://example.com/s/p.json?eyJ0IjoyLjksImYiOnsiZmxpX3BsIjoiYXNwZXJzb3IiLCJmbGlfZyI6LTEsImZsaV9jIjotMSwiZmxpX20iOjAsImZsaV9hIjoyMDExfSwiY3NyZiI6ImE5MDMwMDkxLTBlZjgtNDcyOC05YjQ1LTU1MWY3M2U5YjQ5MCJ9
...在我的情况下这是一个合法的请求。谁能告诉我如何解决这个问题?谢谢你。
在启用所有默认规则的情况下,ModSecurity 导致误报是正常的。这就是为什么您应该禁用导致问题的规则,最好只针对那些不禁用它们就无法工作的 URL。由于您从日志中引用的内容缺少规则 ID,因此很难给出准确的答案,但这里有一个过程示例:
首先找到导致问题的规则。例如,如果合法客户端的 IP 地址是
198.51.100.123
,您可以:将搜索限制在已知的良好 IP 上很重要;否则你最终会允许一些真正恶意的东西!
查看
ModSecurity: Warning
线条并专注于[id ""]
和[uri ""]
。假设您找到了具有[uri "/s/p.json"]
并且它们是触发规则的行,[id "941100"]
并且[id "941120"]
.配置您的 Apache 全局或基于虚拟主机以禁用这些规则,例如
关于 ModSecurity 和处理误报的一些文章:
我对此也有一个奇怪的问题
当我打开 modsec 时。我的 Google 新闻 RSS 提要不起作用,而且我无法让即时索引工作,因为提要不会显示在我的发布者中心。
如果我关闭 modsec。有用。RSS 提要显示在我的发布者中心,我可以在 google 中获得即时索引