ModSecurity 阻止合法客户端请求

ModSecurity 阻止合法客户端请求

随机地,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

...在我看来,这是合法的请求。有人能告诉我如何解决这个问题吗?谢谢。

答案1

ModSecurity 在启用所有默认规则的情况下导致误报是正常的。这就是为什么你应该禁用引起问题的规则,最好只针对那些不禁用就无法工作的 URL。由于日志中的引用缺少规则 ID,因此很难给出确切的答案,但这里有流程示例

  1. 首先找到导致问题的规则。例如,如果合法客户端的 IP 地址是198.51.100.123,您可以:

    grep "198.51.100.123" /var/log/apache2/example.com-error.log
    

    将搜索限制在已知的良好 IP 上很重要;否则您最终会允许一些真正恶意的东西!

  2. 查看这些ModSecurity: Warning线条并集中精力于[id ""][uri ""]。假设您找到具有 和 的线条[uri "/s/p.json"],它们正在触发规则[id "941100"][id "941120"]

  3. 全局或基于虚拟主机配置 Apache 以禁用这些规则,例如

    <LocationMatch "/s/p.json">
        SecRuleRemoveById 941100 941120
    </LocationMatch>
    

一些关于 ModSecurity 和处理误报的文章:

答案2

我也有一个奇怪的问题

当我打开 modsec 时,我的 Google 新闻 RSS 源将无法工作,而且我无法使即时索引工作,因为源不会显示在我的发布者中心。

如果我关闭 modsec。它起作用了。RSS 源显示在我的发布者中心,我可以在 google 中立即获得索引

相关内容