apache - 启用 mod_security 后 Apache 上的 SSL 不起作用

标签 apache ssl mod-security

我在我的 Apache 服务器上设置了一个新的 SSL 证书,现在当我尝试从 HTTPS 访问我的网站时,我收到错误消息“403 Forbidden”。 从我得到的 apache 日志文件中:

[Fri Jul 31 20:54:51.069453 2015] [:error] [pid 12132] [client **.24.36.***] ModSecurity: Rule 7fdb76085a90 [id "981172"][file "/usr/share/modsecurity-crs/activated_rules/modsecurity_crs_41_sql_injection_attacks.conf"][line "157"] - Execution error - PCRE limits exceeded (-8): (null). [hostname "example.com"] [uri "/test"] [unique_id "Vbggm6wfDPoAAC9k-CQBAAAB"]

这是上述文件的第 157 行:

SecRule REQUEST_COOKIES|!REQUEST_COOKIES:/__utm/|!REQUEST_COOKIES:/__utm/|REQUEST_COOKIES_NAMES "([\~\!\@\#\$\%\^\&\*\(\)\-\+\=\{\}\[\]\|\:\;\"\'\´\’\‘\`\<\>].*?){8,}" "phase:2,t:none,t:urlDecodeUni,block,id:'981172',rev:'2',ver:'OWASP_CRS/2.2.8',maturity:'9',accuracy:'8',msg:'Restricted SQL Character Anomaly Detection Alert - Total # of special characters exceeded',capture,logdata:'Matched Data: %{TX.1} found within %{MATCHED_VAR_NAME}: %{MATCHED_VAR}',tag:'OWASP_CRS/WEB_ATTACK/SQL_INJECTION',setvar:tx.anomaly_score=+%{tx.warning_anomaly_score},setvar:tx.sql_injection_score=+1,setvar:'tx.msg=%{rule.msg}',setvar:tx.%{rule.id}-OWASP_CRS/WEB_ATTACK/RESTRICTED_SQLI_CHARS-%{matched_var_name}=%{tx.0}"

所以我尝试禁用 mod_security 并且确实在它工作正常之后。

因为我需要保持 mod_security 启用,我该如何解决这个问题?

更新

我编辑文件 /usr/share/modsecurity-crs/activated_rules/modsecurity_crs_41_sql_injection_attacks.conf 并删除第 157 行,现在它可以工作了,但风险如何?

最佳答案

以前没见过这个问题,但是这个链接: https://github.com/SpiderLabs/owasp-modsecurity-crs/issues/155 似乎表明升级到最新的 OWASP CRS 可以解决问题。

最新的规则集在这里:https://www.owasp.org/index.php/Category:OWASP_ModSecurity_Core_Rule_Set_Project

我能看到您正在运行的 2.2.8 版本与最新的 2.2.9 版本之间的唯一区别是它还在该规则中排除了 _pk_ref cookie。在谷歌上快速搜索表明 piwik.org 使用了它——一种分析跟踪工具,大概类似于谷歌分析。如果您正在使用该软件,那么这可能会解释这一点。否则我看不出为什么升级到最新的规则集可以解决问题。再一次,我不知道你为什么要运行旧版本的 OWASP 规则,所以不妨升级一下,看看是否有帮助。

禁用规则

如果这不能解决问题,那么您也可以禁用该规则。为此,您不应编辑原始文件,而应在定义规则后将以下内容添加到您的配置中,也许在您自己的 modsec_customisations.conf 文件中:

SecRuleRemoveById 981172

这比编辑实际文件更好,因为当您升级规则时(例如,按照我的建议,从版本 2.2.8 升级到 2.2.9),您就不会丢失自定义设置。

禁用规则的风险

至于禁用规则的风险,这个规则可以防止带有多个特殊字符的 cookie。在 cookie 中发送特殊字符本身很少有安全风险,但可能会试图规避其他规则(例如,您可以通过转义或双重转义字符来隐藏 cookie 中的 sql 注入(inject)尝试,因此其他规则无法识别 sql 注入(inject),但由于转义字符可能会被您的服务器程序解析,因此它们仍然会导致问题)。

重要的是要认识到,无论是 ModSecurity 还是您可以用来配置它的 OWASP CRS 都不会 100% 保护您的网站。它们旨在使用可以根据规则检查的已知签名来降低风险。 OWASP CRS 中有很多规则,并非所有规则都适合您的网站。显然,您关闭的这些规则越多,您受到的保护就越少,但这并不意味着您不应该在适当的时候关闭规则。安装 ModSecurity 的一部分是调整和调整规则集:包括关闭规则是适当的。只要您了解要调整的规则,就需要判断这是否合适。

关于apache - 启用 mod_security 后 Apache 上的 SSL 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31756344/

相关文章:

c# - 如何在solrNet中查询

php - Web 服务器是否可以响应具有延长时间的输出流的 HTTP 请求?

java - JRE 8u192 - javax.security.auth.login.FailedLoginException : Cannot bind to LDAP server

ruby-on-rails - Rails/Mongrel 是否可以接受带有文本字段的 POST 表单,其值为 URL

php - 检测 Mod_Security 是否随 PHP 安装?

Python + CGI脚本无法访问环境变量

apache、localhost 在 Windows 7 中不工作

java - 从 1.3.x 升级到 1.4.0 后,Spring boot ssl 配置损坏

apache - httpd.conf 文件中的 LDAPS 身份验证失败

php - 网站断断续续出现 'No data received' 错误代码 : ERR_EMPTY_RESPONSE