我最近从 12.04 LTS 升级到了 14.04 LTS,正在尝试适应 modsecurity 中的变化。
一开始,modsecurity 似乎完全坏了(它被列为要使用 autoremove 删除的孤立包)。我使用 autoremove,删除了旧配置,然后安装了 libapache2-modsecurity。
这似乎有效,但是由于某种原因,它似乎忽略了我的虚拟主机文件中的命令。过去,我为不同类型的网站创建了特殊规则,并在虚拟主机文件中使用以下命令完全禁用了会引发大量误报的页面上的规则引擎(例如 phpmyadmin 或 wordpress 管理):
<Directory /xxx/phpmyadmin>
SecRuleEngine Off
</Directory>
但是,这不再起作用。如果我在 modsecurity.conf 中设置:
SecRuleEngine On
我根本无法访问该页面 - 它立即抛出 401 不允许。到目前为止,我发现的唯一解决方案是在 modsecurity.conf 中完全禁用引擎(即使 DetectionOnly 也会抛出错误):
SecRuleEngine Off
我的问题是,apache 2.4 中是否有某些更改会忽略这些特定于目录的设置?我尝试将其放在 IfModule security2_module 中,并将命令添加到目录中的 .htaccess 文件中,但没有结果。
谢谢!
答案1
所以我想我已经找到了答案,尽管我找不到任何关于 apache 或 modsecurity 的文档来解释为什么它不能像以前那样工作。无论如何,我会在这里发布我的解决方案,以防其他人遇到同样的问题。
在 modsecurity.conf 文件中设置 SecRuleEngine 标志现在会覆盖虚拟主机中的所有其他值,因此要么全部打开,要么全部关闭。在这里设置它似乎也会忽略虚拟主机中的 SecRuleRemoveById 标志,这很糟糕。
我已注释掉 modsecurity.conf 中的 SecRuleEngine 标志,并根据虚拟主机文件中的文件夹逐个设置它。例如:
<Directory ***>
<IfModule security2_module>
SecRuleRemoveById xxxxxx
SecRuleEngine On
</IfModule>
</Directory>
这对我来说似乎很有用。