本文介绍如何编写ModSecurity规则链,即需要同时判断多个条件时,如何编写规则。
规则链("chain")的作用与AND一致。仅当多条规则中的变量检查同时匹配成功时,才会触发链式规则的第一条规则中指定的阻断性操作。链式规则中如果有一条规则没有匹配成功,则表示整个规则链匹配失败,不会执行对应的阻断性动作。
编写ModSecurity规则链,需要使用"chain"指令,如下规则所示:
SecRule REQUEST_FILENAME "@beginsWith /admin" "chain,phase:1,deny,log,id:1000" SecRule REMOTE_ADDR "!@ipMatch 192.168.1.100" "t:none"
上述规则表示,当访问的URL是以"/admin"开头,同时客户端的IP地址不是"192.168.1.100"时,拦截此次访问,即只允许IP地址为"192.168.1.100"的远程主机访问后台地址。
如果需要判断的条件大于2个,除最后一条规则外,规则链的所有规则都需要配置"chain"指令,如下规则所示:
SecRule REQUEST_FILENAME "@beginsWith /admin" "chain,phase:1,deny,log,id:1000" SecRule REQUEST_FILENAME "@endsWith .php" "chain" SecRule REMOTE_ADDR "!@ipMatch 192.168.1.100" "t:none"
上述规则表示,当访问的URL是以"/admin"开头、访问的URL是以".php"结尾、客户端的IP地址不是"192.168.1.100",三个条件同时成立时,拦截此次访问。
注意:新添加规则,或规则变更后,需要将配置文件重新加载,如Apache为:apachectl graceful、Nginx为:nginx -s reload,规则才可生效。
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。