Linux 如何设置仅对一个域/子域有效的mod_安全规则?

Linux 如何设置仅对一个域/子域有效的mod_安全规则?,linux,amazon-ec2,firewall,mod-security,mod-security2,Linux,Amazon Ec2,Firewall,Mod Security,Mod Security2,我正在建立mod_安全防火墙,代理网站数量。我只想将特定规则应用于一个域,这些规则将不适用于其他域 例如: 以上规则我只想适用于一个子域/域而不是其他域。我怎样才能做到呢?请通过以下几种方式提供帮助: 仅将上述规则添加到该子域的vhost 更改规则以检查主机名 对于选项2,新规则可能如下所示: SecRule REMOTE_ADDR "@geoLookup" "chain,id:20,drop,msg:'Block India IP address'" SecRule GEO:COUNTRY_C

我正在建立mod_安全防火墙,代理网站数量。我只想将特定规则应用于一个域,这些规则将不适用于其他域

例如:

以上规则我只想适用于一个子域/域而不是其他域。我怎样才能做到呢?请通过以下几种方式提供帮助:

  • 仅将上述规则添加到该子域的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"
    
    请注意,服务器名称将由传入请求设置,因此无法阻止攻击者伪造此名称(或根本不发送此名称),尽管猜测如果未正确设置此名称,则无论如何也无法正确路由通过代理

    您也可以在此处使用正则表达式,例如,将多个服务器名称添加到规则的最后一部分:

    SecRule SERVER_NAME "/subdomain[1-9].example.com/"
    


    注意:第一次尝试时没有检查这些regexpr错误,但希望能给您一个想法。

    thnx要获得帮助,请告诉我是否要在两个主机名上设置相同的规则。我试过用链子拴,但没用@巴扎德在我回答的最后补充了这一点。另一种方法是,如果您想避免regexpr,则只需再次复制整个规则,这可能会在一段时间后变得混乱。Thnx,学到了很多,我正在使用vhost方法,因为我将向FW添加更多主机。
    SecRule SERVER_NAME "/subdomain[1-9].example.com/"
    
    SecRule SERVER_NAME "/^(subdomain|subdomain2).example.com$/"