如何解决Apache2 ModSecurity2
我在我的 apache2 生产服务器上托管了一个 nextcloud 应用程序,在该服务器上我使用 modsecurity 进行加固。
由于 modsecurity 会将 Nextcloud 生成的许多请求检测为误报,我想通过“tx.crs_exclusions_nextcloud=1”启用特殊的 modsecurity nextcloud 排除项。 由于我在此服务器上托管多个虚拟主机/子域,而 nextcloud 有自己的一个(并且它不是为每个子域全局执行此类排除的选项),因此我想通过 Apache VirtualHost 配置目录启用此排除:>
<VirtualHost _default_:443>
ServerName nextcloud.mydomain.tld
...
SecAction "id:x,pass,log,setvar:tx.crs_exclusions_nextcloud=1" #also tried ALL possible combinations of variables (id,nolog,...) etc,please don't assume the issue being here as long as you don't are 100% sure.
...
</VirtualHost>
这不起作用。我完全不知道为什么。文档说此命令可用于 VirtualHost 部分并且我检查了包含的配置文件的顺序。
订单:
- Mod 本身正在加载
- /etc/apache2/mods-enabled/security2.conf
- /etc/modsecurity/000_modsecurity.conf
- /etc/modsecurity/001_crs-setup.conf
- /etc/modsecurity/rules/*.conf | OWASP ModSecurity CRS v3.3.0
- /etc/modsecurity/002_crs-exclusions.conf
- 站点配置
由于 VirtualHost 中的 SecAction
不起作用并且 modsecurity 仍将许多 nextcloud 请求检测为误报,因此我目前使用最后一个文件 002_crs-exclusions.conf 来激活 nextcloud 排除:
SecRule REQUEST_HEADERS:Host ^nextcloud.mydomain.tld$ "id:900130,phase:1,t:none,setvar:tx.crs_exclusions_nextcloud=1"
哪个有效。
我对这个解决方案不满意 - 我想通过 VirtualHost 指令使用它,因为这 应该 工作。
第二期
如果用户尝试更新日历条目,Modsecurity 会阻止请求 URI /remote.php/dav/calendars/<user>/personal/<uuid>.ics
。这是因为此请求具有标头 Content-Type: application/xml
但没有真正的 xml 内容,这导致 modsecurity 出现 libxml2 解析错误。因此,我想通过 Content-Type: application/xml
的 URI /remote.php/dav/calendars/.*
的规则# 200000(此规则定义标头 SecRuleRemoveById
-requests 应该通过 modsecurity 的 xml-parser):
<Location ~ "/remote.php/dav/calendars/.*">
Header set LocDebug "works" #to check if <Location> is applied correctly
SecRuleRemoveById 200000
</Location>
结果:
去往这些 URI 之一的每个请求(日历的加载等)都包含 LocDebug 标头,表明
我也试过全局设置 SecRuleRemoveById
,但这个完全不起作用。
我尝试了所有的东西,几乎所有的东西,并且如上面所记录的那样,订单应该没问题。
有没有人知道我可能做错了什么或问题可能出在哪里?我一无所知。
技术信息:
- 操作系统:Debian 10 Buster - 所有软件包均为最新版本。
- Apache:apache2.4.38-3+deb10u4
- ModSecurity:libapache2-mod-security2 v2.9.3-1
解决方法
第一期
您的 SecAction
没有 phase
操作。在这种情况下,mod_security2
将规则/操作置于第二阶段,恕我直言,为时已晚。
关于第二期
我不明白原因,为什么 SecRuleRemoveId
不起作用,它应该起作用。但是您也可以在此处添加 SecAction
,并带有 ctl:ruleRemoveById=200000
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。