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

Nginx环境下ModSecurity未匹配任何规则时的默认动作如何配置

Nginx+ModSecurity 未匹配规则默认拦截配置方案

核心概念纠正

SecDefaultAction 不是「未匹配任何规则时的全局默认动作」,它的作用是为同阶段下没有显式声明动作的SecRule设置默认执行动作,你需要的「仅允许指定范围通行、其余全部拦截」的需求,需要通过「前序放行规则+末尾兜底拦截规则」的逻辑实现。

你当前配置的问题

  1. SecDefaultAction 位置错误,应该放在所有同阶段规则的最前方才能生效
  2. 缺少兜底拦截规则,未匹配到放行规则的请求不会被自动拦截
  3. 现有放行规则的日志描述错误,你当前规则逻辑是放行CN IP,但msg写的是Blocking Country IP Address

修正后完整配置

# 开启ModSecurity规则引擎(遗漏的话规则不会生效)
SecRuleEngine On
# 配置阶段1默认动作,放在所有规则最前
SecDefaultAction "phase:1,log,auditlog,drop,status:403,tag:'SLA 24/7'"
# 加载GeoIP数据库
SecGeoLookupDb /usr/local/geo/data/GeoLiteCity.dat

# 放行中国大陆IP规则:匹配到CN IP则跳过后续所有规则
SecRule REMOTE_ADDR "@geoLookup" "phase:1,chain,id:10,allow,log,msg:'Allow China IP Access'"
SecRule GEO:COUNTRY_CODE "@pm CN"

# 兜底拦截规则:所有未命中上方放行规则的请求全部拦截
SecRule REMOTE_ADDR "@rx .*" "phase:1,id:9999,deny,log,status:403,msg:'Block Non-Allowed IP'"

扩展场景:仅放行指定IP段

如果不需要按国家放行,只要指定IP段通行,将上方GeoIP相关规则替换为以下配置即可:

# 示例:放行192.168.1.0/24、10.0.0.0/8两个内网段
SecRule REMOTE_ADDR "@ipMatch 192.168.1.0/24,10.0.0.0/8" "phase:1,id:10,allow,log,msg:'Allow Internal IP Access'"

验证方法

配置完成后执行nginx -t确认语法正确,重载Nginx后用非允许范围的IP访问服务,确认返回403状态码,同时查看ModSecurity审计日志存在对应拦截记录即可。

内容的提问来源于stack exchange,提问作者leminhquan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:24:04