在 ModSecurity 中(我实际上使用的是 Coraza,但它应该是相同的东西),我如何混合逻辑 OR 和 AND?例如,我想要一个规则,如果源 IP 与 CIDR 范围列表匹配并且与主机标头列表匹配,则拒绝请求。这相当于:
if (srcIp in ['3.4.5.0/24', '2.3.4.0/24']) AND (host in ['foo.com', 'bar.com'])
deny
我可以通过链接来实现AND。对于 IP 地址,这有效:
SecRule REQUEST_HEADERS:X-Forwarded-For "@ipMatch 3.4.5.0/24,2.3.4.0/24" "id:9,phase:1,chain"
但是如何在一条规则中匹配多个主机呢?
我试过了
SecRule REQUEST_HEADERS:Host "@pm bar.com baz.com" "id:10,phase:1,deny"
但这也与
abar.com
和 bar.coma
匹配
每个主机的多个链式规则被视为 AND。
@within
运算符与值列表匹配:
SecRule REQUEST_HEADERS:Host "@within bar.com,baz.com" "id:10,phase:1,deny"