使用Symfony安装启用ModSecurity W / Cpanel&南国

时间:2015-12-27 06:01:15

标签: php symfony installation cpanel mod-security

这个问题是另一个问题的延伸(Symfony framework install 406 Not Acceptable Error w/CPanel & WHM),请在那里阅读我的答案,看看我是如何解决这个问题的。

我能够解决我遇到的406错误的问题,但需要付出代价......,我不得不在WHM中禁用mod安全性,这是一个巨大的安全漏洞,我确定。我的问题是如何启用mod安全性并仍然使用默认的Symfony安装,以便我不再收到406错误?

修改

ModSecurity日志

请求:GET /操作描述:使用代码406拒绝访问(阶段4)。理由:模式匹配" ^ 5 \ d {2} $"在RESPONSE_STATUS

1 个答案:

答案 0 :(得分:1)

<强>背景

ModSecurity是Web应用程序防火墙(或WAF)。您可以定义规则以尝试识别和阻止非法请求。虽然WAF并不完美,但通常使用的通用规则适用于大多数网站&#34;但有时会阻止合法请求(称为误报)。

首先要了解的是,除了您之外,没有人会知道您安装的ModSecurity规则。 ModSecurity根本没有任何规则,尽管有可供下载的规则,从免费的规则(如OWASP CRS)到付费的Atomic之类的规则,或者您可以编写自己的规则。因此,向您解释的第一件事是,没有人能够告诉您如何解决此问题,因为根据您的安装情况,它可能是特定于您的。说我们可以指导您找到自己的解决方案。

运行WAF确实提供了额外的保护,但确实需要大量维护。虽然我个人喜欢它并且可以看到它的优点,但是大多数网站都没有它是诚实的,而且如果你让你的软件保持最新状态,那么黑客无论如何也是罕见的(尽管不是闻所未闻)。 ; t安装高目标软件(例如WordPress)。根据您的网站需要的重要性和安全性来决定是否保留它,但是,如果想要使用它,那么您将需要了解它如何处理这样的问题。< / p>

您的问题。

我不熟悉Symfony,但是当我启用ModSecurity时,我可以理解,您的应用程序失败并且至少有一个ModSecurity规则触发。当ModSecurity关闭时,一切正常。

首先,您需要找出阻止您的应用程序运行的 ALL 规则。你已经给出了一条规则,但我怀疑这不是唯一一条规则。

正如我在原始问题的评论中所讨论的那样,该规则是大多数规则集中的一个相当标准的规则,旨在防止信息泄露。对于每个请求,所有Web服务器都以3位status code响应。最着名的是404或&#34;页面未找到&#34;。 500范围内的那些意味着服务器错误。所以这个规则说如果服务器响应(RESPONSE_STATUS)模式匹配&#34; ^ 5 \ d {2} $&#34; (即5XX是X是一个数字,所以0-9)然后出现了问题,并且ModSecurity介入以防止任何错误消息返回给用户,而是发送它自己的406错误消息。

ModSecurity有5个阶段:

  1. 扫描请求标头的规则(REQUEST_HEADERS)
  2. 扫描请求正文(REQUEST_BODY)
  3. 的规则
  4. 扫描响应标头的规则(RESPONSE_HEADERS)
  5. 扫描响应正文(RESPONSE_BODY)
  6. 的规则
  7. 影响记录的规则(LOGGING)
  8. 此规则在阶段4中触发 - 即将请求发送回客户端时。因此,在此阶段,您的应用程序返回5XX状态已经出错了。

    我怀疑之前触发的另一个ModSecurity规则(阶段1或阶段2规则)导致了错误,并且您只显示了最后触发的规则。

    在我能够帮助您解决问题之前,我需要知道:

    • 所有来自Apache错误日志的ModSecurity错误消息。
    • 此外,了解您正在运行的ModSecurity版本会很有帮助(这应该在启动时的Apache错误日志中)。
    • 了解您正在运行的规则集也很有帮助。它们是上面讨论的标准内容,还是专门为您的网站编写的内容?大多数规则都有一个规则ID(实际上这是从ModSecurity 2.7开始必须的),所以很惊讶这没有列在你之前提供的错误日志片段中。

    有了这个我或其他人,也许可以帮助你找到正确的方向。

    如何自我诊断此问题(以及未来的问题!)

    如果我是你,我会采取以下步骤来确定问题:

    1. 阅读所有Apache配置文件,找出ModSecurity配置和规则的定义位置。 ModSecurity规则只是使用添加到标准Apache配置的ModSecurity语言的文本配置 - 通常通过包含定义规则的外部文件。了解这些规则的作用和含义。
    2. 找到&#34; SecRuleEngine On&#34;在您的配置上行,并将其更改为&#34; SecRuleEngine DetectionOnly&#34;然后重启Apache。这将标记日志文件中的规则但不阻止尝试。然后做你想做的事情,而不是解雇的规则。
    3. 同时启用其他审核引擎以捕获阻止请求的完整详细信息(&#34; SecAuditEngine RelevantOnly&#34;)。
    4. 决定是否需要这些规则导致您出现问题,然后将其从配置中注释掉,或者有办法调整它们以停止阻止合法请求。
    5. 调整所有规则后,再次打开ModSecurity。
    6. ModSecurity Reference Manual是了解ModSecurity的非常有用的资源。

      我还可以推荐the ModSecurity handbook进一步阅读。它是由ModSecurity的原作者编写的,虽然从版本2.7开始它还没有更新,但它仍然是一个很好的介绍。

      希望有所帮助, 百里