如何设置 mod_security 规则只对一个 domain/sub-domain 有效?
How to setup mod_security rules only valid for one domain/sub-domain?
我正在构建 mod_security 防火墙,没有代理。的网站。我只想将特定规则应用于一个域,这些规则将不适用于其他域。
示例:
SecGeoLookupDb /home/ec2-user/cndata/GeoIP.dat
SecRule REMOTE_ADDR "@geoLookup" "chain,id:20,drop,msg:'Block India IP address'"
SecRule GEO:COUNTRY_CODE "@streq IN"
以上规则我只想应用到一个 sub-domain/domain 而不是其他域。我怎样才能实现它?请帮助
几种方式:
- 仅将上述规则添加到该子域的 vhost。
- 更改规则以检查主机名。
对于选项 2,新规则可能如下所示:
SecRule REMOTE_ADDR "@geoLookup" "chain,id:20,drop,msg:'Block India IP address'"
SecRule GEO:COUNTRY_CODE "@streq IN" "chain"
SecRule SERVER_NAME "subdomain.example.com"
请注意 SERVER_NAME 将由传入请求设置,因此没有什么可以阻止攻击者伪造它(或根本不发送它),尽管猜测如果它设置不正确则不会无论如何都正确地通过了代理。
您也可以在这里使用正则表达式,例如在规则的最后部分添加多个服务器名称:
SecRule SERVER_NAME "/subdomain[1-9].example.com/"
或者
SecRule SERVER_NAME "/^(subdomain|subdomain2).example.com$/"
注意:第一次尝试时没有检查这些正则表达式是否错误,但希望无论如何都能给您提供思路。
我正在构建 mod_security 防火墙,没有代理。的网站。我只想将特定规则应用于一个域,这些规则将不适用于其他域。
示例:
SecGeoLookupDb /home/ec2-user/cndata/GeoIP.dat SecRule REMOTE_ADDR "@geoLookup" "chain,id:20,drop,msg:'Block India IP address'" SecRule GEO:COUNTRY_CODE "@streq IN"
以上规则我只想应用到一个 sub-domain/domain 而不是其他域。我怎样才能实现它?请帮助
几种方式:
- 仅将上述规则添加到该子域的 vhost。
- 更改规则以检查主机名。
对于选项 2,新规则可能如下所示:
SecRule REMOTE_ADDR "@geoLookup" "chain,id:20,drop,msg:'Block India IP address'"
SecRule GEO:COUNTRY_CODE "@streq IN" "chain"
SecRule SERVER_NAME "subdomain.example.com"
请注意 SERVER_NAME 将由传入请求设置,因此没有什么可以阻止攻击者伪造它(或根本不发送它),尽管猜测如果它设置不正确则不会无论如何都正确地通过了代理。
您也可以在这里使用正则表达式,例如在规则的最后部分添加多个服务器名称:
SecRule SERVER_NAME "/subdomain[1-9].example.com/"
或者
SecRule SERVER_NAME "/^(subdomain|subdomain2).example.com$/"
注意:第一次尝试时没有检查这些正则表达式是否错误,但希望无论如何都能给您提供思路。