如何设置mod_security规则仅对一个域/子域有效?

时间:2015-11-18 07:01:40

标签: linux amazon-ec2 firewall mod-security mod-security2

我正在使用代理构建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"

以上规则我想仅适用于一个子域/域而不是其他域。我怎么能实现它?请帮忙

1 个答案:

答案 0 :(得分:1)

有几种方法:

  1. 仅将上述规则添加到该子域的vhost。
  2. 更改规则以检查主机名。
  3. 对于选项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$/"
    

    注意:首次尝试时未检查这些正则表达式错误,但无论如何希望能给你这个想法。