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

如何合并Modsecurity规则:仅允许特定IP/主机及美国访问

ModSecurity规则合并实现方案

原规则说明

用户原本配置了三条独立的ModSecurity规则,功能如下:

规则1:仅允许美国(US)访问,阻止高风险国家

SecAction 
 "id:900600,
  phase:1,
  nolog,
  pass,
  t:none,
  setvar:'tx.high_risk_country_codes = AD AE AF AG AI AL AM AO AQ AR...'"

# Allow only the below countries
SecRule REMOTE_ADDR "@geoLookup" "chain,id:2000001,drop,msg:'Countries allowed'"
SecRule GEO:COUNTRY_CODE "!@pm US"

规则2:允许指定IP访问

SecRule REMOTE_ADDR "^XX\.XX\.XX\.XX$" "phase:1,id:2000002,nolog,allow,msg:'Allow access from IP XX.XX.XX.XX'"

规则3:允许指定远程主机访问

SecRule REMOTE_HOST "host\.name\.com$" "phase:1,id:2000003,nolog,allow,msg:'Allow access from host.name.com'"

合并后的规则实现

要实现「阻止非美国地区访问,但指定IP或指定主机除外」的逻辑,可通过**链式规则(chain)**组合条件,利用逻辑与(AND)筛选需要拦截的请求:

# 保留原高风险国家变量设置(若无其他规则依赖可移除)
SecAction 
 "id:900600,
  phase:1,
  nolog,
  pass,
  t:none,
  setvar:'tx.high_risk_country_codes = AD AE AF AG AI AL AM AO AQ AR...'"

# 核心规则:仅当请求既不是指定IP、也不是指定主机、且来自非美国地区时,拦截请求
SecRule REMOTE_ADDR "!@pm XX.XX.XX.XX" "chain,phase:1,id:2000004,drop,msg:'Block non-US access except allowed IP/host'"
SecRule REMOTE_HOST "!@pm host.name.com" "chain"
SecRule REMOTE_ADDR "@geoLookup" "chain"
SecRule GEO:COUNTRY_CODE "!@pm US"

规则逻辑解释

  1. 第一条规则:判断请求来源IP不是指定的XX.XX.XX.XX,触发链式检查
  2. 第二条规则:继续判断请求的远程主机不是指定的host.name.com,延续链式检查
  3. 第三条规则:对请求IP执行地理查询(@geoLookup)
  4. 第四条规则:判断查询到的国家代码不是US,此时触发drop动作拦截请求

该逻辑等价于:指定IP/主机直接放行,其余请求仅允许美国地区访问,不符合条件则拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 10:53:21