尽管速率限制主要在 WAF 之外执行,但由于特定的客户要求,它也包含在 WAF 中。以下主题介绍了与 WAF 相关的速率限制。
WAF 速率限制用例
在 WAF 中执行速率限制时,解决的主要用例是将对 /login 操作的调用限制为每分钟每个 IP 10 个请求。
为满足此需求,@ratelimit 运算符将作为规则语言中的扩展进行实施。
运算符 @ratelimit 接受 3 个参数(不支持宏)。
请求数 -(数字)
时间单位 -(数字)+(时间单位(s、m、h))
突发大小 -(可选数字)
速率限制器可由虚拟服务和规则 ID 唯一标识。因此,每个规则都具有其自身的速率限制器。速率限制器键为 match_element_name 和 match_element_value。
当前用例是将对 /login 的 POST 请求数限制为每分钟每个 IP 10 个请求。规则示例如下所示。
SecRule REQUEST_METHOD "^POST$" "id:42,phase:1,t:none,block,chain" SecRule REQUEST_URI "@contains /login" "t:none,chain" SecRule REMOTE_ADDR "@rateLimit 10 1m"
以下是对该规则的说明。
如果请求是一个 POST 请求
并且 URI 包含
/login
对于每个 IP (REMOTE_ADDR),将请求数限制为每 1m(1 分钟)10 个。
如果超过此限制,则会
block
请求。