You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置ModSecurity以真正拦截/拒绝恶意请求?

如何配置ModSecurity以真正拦截/拒绝恶意请求?

看起来你已经完成了ModSecurity的基础安装和规则筛选,但只记录日志却不拦截恶意请求的问题,通常和拦截动作的配置缺失或者CRS规则依赖的初始化项未加载有关,我帮你梳理几个关键排查点:

  • 检查modsecurity.conf中的默认动作设置
    默认情况下,ModSecurity的SecDefaultAction可能仅配置了日志动作(比如"phase:1,log,auditlog,pass"),你需要确保这条规则包含拒绝动作。打开/etc/modsecurity/modsecurity.conf,找到SecDefaultAction行,修改为类似以下配置:

    SecDefaultAction "phase:1,log,auditlog,deny,status:403"
    

    这里的deny会让ModSecurity直接返回403状态码拒绝请求,如果你需要更严格的拦截(直接断开连接),可以把deny换成drop。

  • 务必加载CRS的初始化规则文件
    你目前只启用了PHP攻击规则和拦截评估规则,但CRS的规则依赖REQUEST-901-INITIALIZATION.conf来初始化关键变量(比如tx.paranoia_level偏执级别、默认拦截标识等),缺少这个文件的话,REQUEST-949-BLOCKING-EVALUATION.conf里的拦截逻辑根本无法正常触发。建议把这个初始化配置文件也启用后再测试。

  • 验证启用规则的动作是否包含拦截指令
    打开你启用的REQUEST-933-APPLICATION-ATTACK-PHP.conf,查看几条核心规则,确认它们的动作中包含deny或block(CRS规则通常会结合ctl:ruleEngine=On和默认动作来实现拦截,或者直接指定deny动作)。如果规则本身只有log动作,自然不会触发拦截。

  • 修改配置后重启Apache并测试
    每次调整配置后,记得执行以下命令重启Apache使配置生效:

    sudo systemctl restart apache2
    

    你可以用简单的恶意请求测试,比如给你的PHP页面加参数?id=1' OR '1'='1,如果配置正确,应该会直接返回403页面,同时日志中也会记录该请求。

备注:内容来源于stack exchange,提问作者Rahul Thakkar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 09:34:36