使用 Symfony 安装保持 ModSecurity 启用 W/Cpanel & WHM
Keep ModSecurity Enabled With Symfony installation W/Cpanel & WHM
这个问题是这里另一个问题的延伸(),请阅读我在那里的回答,看看我是如何解决这个问题的。
我能够解决我遇到的 406 错误问题,但代价是……我不得不禁用 WHM 中的 mod 安全性,我敢肯定这是一个巨大的安全漏洞。我的问题是如何保持 mod 安全启用并仍然使用默认的 Symfony 安装,这样我就不会再收到 406 错误?
编辑
Mod 安全日志
请求:GET/操作描述:访问被拒绝,代码为 406(第 4 阶段)。理由:模式匹配“^5\d{2}$”在RESPONSE_STATUS
背景
ModSecurity 是一个 Web 应用程序防火墙(或 WAF)。您可以定义规则来尝试识别和阻止非法请求。虽然 WAF 并不完美,并且通常使用适用于 "most sites" 的通用规则,但有时会阻止合法请求(称为误报)。
首先要了解的是,除了您之外,没有人会知道您安装了哪些 ModSecurity 规则。 ModSecurity 根本不附带任何规则,但可以从免费规则(如 OWASP CRS) to paid for ones from the likes of Atomic)下载规则,或者您可以编写自己的规则。因此,首先要向您解释的是,没有人能够告诉您如何解决此问题,因为它可能因您的安装而异。说我们可以指导您找到自己的解决方案。
运行 WAF 确实提供了额外的保护,但确实需要大量维护。虽然我个人喜欢它并且可以看到它的优点,但说实话,大多数网站都没有它,而且如果你保持软件最新并且不安装软件,黑客很少(虽然不是闻所未闻)无论如何都会这样做高目标(例如 WordPress)。是否保留它取决于您的网站的重要性和安全意识,但如果确实要使用它,那么您将需要了解它是如何处理此类问题的。
你的问题。
我不熟悉 Symfony,但据我所知,当 ModSecurity 打开时,您的应用程序失败并且至少触发了一个 ModSecurity 规则。当 ModSecurity 关闭时,一切正常。
因此,首先您需要找出 ALL 阻止您的应用程序运行的规则。您给出了一条规则,但我怀疑这不是唯一的一条规则。
正如我在对您的原始问题的评论中所讨论的那样,该规则是大多数规则集中的一个相当标准的规则,旨在防止信息泄露。对于每个请求,所有 Web 服务器都以 3 位数字 status code 响应。最著名的是 404 或 "page not found"。 500 范围内的表示服务器错误。所以这条规则说,如果服务器响应 (RESPONSE_STATUS) 模式匹配“^5\d{2}$”(即 5XX,X 是数字,所以 0-9)那么出现问题,并且 ModSecurity 介入以防止任何错误消息返回给用户,而是发送它自己的 406 错误消息。
ModSecurity 有 5 个阶段:
- 扫描请求的规则headers (REQUEST_HEADERS)
- 扫描请求的规则body (REQUEST_BODY)
- 扫描响应的规则headers (RESPONSE_HEADERS)
- 扫描响应的规则body (RESPONSE_BODY)
- 影响日志记录 (LOGGING) 的规则
此规则在第 4 阶段触发 - 即请求被发送回客户端时。因此,在这个阶段,您的应用程序返回 5XX 状态已经出了问题。
我怀疑之前触发的另一个 ModSecurity 规则(第 1 阶段或第 2 阶段规则)导致了错误,而您只显示了最后触发的规则。
在我进一步帮助您解决问题之前,我需要知道:
- ALL 来自 Apache 错误日志的 ModSecurity 错误消息。
- 此外,了解您的 ModSecurity 版本会很有帮助运行(这应该在启动时的 Apache 错误日志中)。
- 了解您的规则集也会很有帮助 运行。它们是上面讨论的一些标准的,还是专门为您的站点编写的?大多数规则都有一个规则 ID(事实上,从 ModSecurity 2.7 开始这是强制性的)很惊讶这没有列在您之前提供的错误日志片段中。
有了这些,我或其他人也许可以帮助您指明正确的方向。
你怎么能self-diagnose这个问题(以及以后的问题!)
如果我是你,我会采取以下步骤来确定问题:
- 阅读您所有的 Apache 配置文件并找出 ModSecurity 配置和规则的定义位置。 ModSecurity 规则只是使用添加到标准 Apache 配置的 ModSecurity 语言的文本配置——通常通过包含外部文件来定义规则。了解这些规则的作用和含义。
- 在您的配置中找到 "SecRuleEngine On" 行并将其更改为 "SecRuleEngine DetectionOnly" 然后重新启动 Apache。这将在日志文件中标记规则,但不会阻止尝试。然后做你想做的事,不要接受触发的规则。
- 同时打开额外的审核引擎以捕获阻止 ("SecAuditEngine RelevantOnly") 的请求的完整详细信息。
- 确定您是否需要那些导致问题的规则,然后将它们从您的配置中注释掉,或者有一些方法可以调整它们以停止阻止合法请求。
- 一旦所有规则生效调整,然后再次打开 ModSecurity。
ModSecurity Reference Manual 是了解 ModSecurity 非常有用的资源。
我还可以推荐 the ModSecurity handbook 进一步阅读。它是由 ModSecurity 的原作者编写的,虽然自 2.7 版以来没有更新,但它仍然是一个很好的介绍。
希望对您有所帮助,
巴里
这个问题是这里另一个问题的延伸(
我能够解决我遇到的 406 错误问题,但代价是……我不得不禁用 WHM 中的 mod 安全性,我敢肯定这是一个巨大的安全漏洞。我的问题是如何保持 mod 安全启用并仍然使用默认的 Symfony 安装,这样我就不会再收到 406 错误?
编辑
Mod 安全日志
请求:GET/操作描述:访问被拒绝,代码为 406(第 4 阶段)。理由:模式匹配“^5\d{2}$”在RESPONSE_STATUS
背景
ModSecurity 是一个 Web 应用程序防火墙(或 WAF)。您可以定义规则来尝试识别和阻止非法请求。虽然 WAF 并不完美,并且通常使用适用于 "most sites" 的通用规则,但有时会阻止合法请求(称为误报)。
首先要了解的是,除了您之外,没有人会知道您安装了哪些 ModSecurity 规则。 ModSecurity 根本不附带任何规则,但可以从免费规则(如 OWASP CRS) to paid for ones from the likes of Atomic)下载规则,或者您可以编写自己的规则。因此,首先要向您解释的是,没有人能够告诉您如何解决此问题,因为它可能因您的安装而异。说我们可以指导您找到自己的解决方案。
运行 WAF 确实提供了额外的保护,但确实需要大量维护。虽然我个人喜欢它并且可以看到它的优点,但说实话,大多数网站都没有它,而且如果你保持软件最新并且不安装软件,黑客很少(虽然不是闻所未闻)无论如何都会这样做高目标(例如 WordPress)。是否保留它取决于您的网站的重要性和安全意识,但如果确实要使用它,那么您将需要了解它是如何处理此类问题的。
你的问题。
我不熟悉 Symfony,但据我所知,当 ModSecurity 打开时,您的应用程序失败并且至少触发了一个 ModSecurity 规则。当 ModSecurity 关闭时,一切正常。
因此,首先您需要找出 ALL 阻止您的应用程序运行的规则。您给出了一条规则,但我怀疑这不是唯一的一条规则。
正如我在对您的原始问题的评论中所讨论的那样,该规则是大多数规则集中的一个相当标准的规则,旨在防止信息泄露。对于每个请求,所有 Web 服务器都以 3 位数字 status code 响应。最著名的是 404 或 "page not found"。 500 范围内的表示服务器错误。所以这条规则说,如果服务器响应 (RESPONSE_STATUS) 模式匹配“^5\d{2}$”(即 5XX,X 是数字,所以 0-9)那么出现问题,并且 ModSecurity 介入以防止任何错误消息返回给用户,而是发送它自己的 406 错误消息。
ModSecurity 有 5 个阶段:
- 扫描请求的规则headers (REQUEST_HEADERS)
- 扫描请求的规则body (REQUEST_BODY)
- 扫描响应的规则headers (RESPONSE_HEADERS)
- 扫描响应的规则body (RESPONSE_BODY)
- 影响日志记录 (LOGGING) 的规则
此规则在第 4 阶段触发 - 即请求被发送回客户端时。因此,在这个阶段,您的应用程序返回 5XX 状态已经出了问题。
我怀疑之前触发的另一个 ModSecurity 规则(第 1 阶段或第 2 阶段规则)导致了错误,而您只显示了最后触发的规则。
在我进一步帮助您解决问题之前,我需要知道:
- ALL 来自 Apache 错误日志的 ModSecurity 错误消息。
- 此外,了解您的 ModSecurity 版本会很有帮助运行(这应该在启动时的 Apache 错误日志中)。
- 了解您的规则集也会很有帮助 运行。它们是上面讨论的一些标准的,还是专门为您的站点编写的?大多数规则都有一个规则 ID(事实上,从 ModSecurity 2.7 开始这是强制性的)很惊讶这没有列在您之前提供的错误日志片段中。
有了这些,我或其他人也许可以帮助您指明正确的方向。
你怎么能self-diagnose这个问题(以及以后的问题!)
如果我是你,我会采取以下步骤来确定问题:
- 阅读您所有的 Apache 配置文件并找出 ModSecurity 配置和规则的定义位置。 ModSecurity 规则只是使用添加到标准 Apache 配置的 ModSecurity 语言的文本配置——通常通过包含外部文件来定义规则。了解这些规则的作用和含义。
- 在您的配置中找到 "SecRuleEngine On" 行并将其更改为 "SecRuleEngine DetectionOnly" 然后重新启动 Apache。这将在日志文件中标记规则,但不会阻止尝试。然后做你想做的事,不要接受触发的规则。
- 同时打开额外的审核引擎以捕获阻止 ("SecAuditEngine RelevantOnly") 的请求的完整详细信息。
- 确定您是否需要那些导致问题的规则,然后将它们从您的配置中注释掉,或者有一些方法可以调整它们以停止阻止合法请求。
- 一旦所有规则生效调整,然后再次打开 ModSecurity。
ModSecurity Reference Manual 是了解 ModSecurity 非常有用的资源。
我还可以推荐 the ModSecurity handbook 进一步阅读。它是由 ModSecurity 的原作者编写的,虽然自 2.7 版以来没有更新,但它仍然是一个很好的介绍。
希望对您有所帮助, 巴里