尽管速率限制主要在 WAF 之外执行,但由于特定的客户要求,它也包含在 WAF 中。以下主题介绍了与 WAF 相关的速率限制。

WAF 速率限制用例

在 WAF 中执行速率限制时,解决的主要用例是将对 /login 操作的调用限制为每分钟每个 IP 10 个请求。

为满足此需求,@ratelimit 运算符将作为规则语言中的扩展进行实施。

运算符 @ratelimit 接受 3 个参数(不支持宏)。

  • 请求数 -(数字)

  • 时间单位 -(数字)+(时间单位(s、m、h))

  • 突发大小 -(可选数字)

速率限制器可由虚拟服务和规则 ID 唯一标识。因此,每个规则都具有其自身的速率限制器。速率限制器键为 match_element_namematch_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 请求。