レート制限は主に WAF の外部で行われますが、特定のユーザー要件があるため、WAF の一部としても含まれています。次のトピックでは、WAF に関するレート制限について説明します。

WAF のレート制限の使用事例

WAF のレート制限の一部として対処される主な使用事例は、/login アクションへの呼び出しを IP アドレスごとに 1 分あたり 10 個の要求に制限することです。

このニーズに対応するため、ルール言語内の拡張機能として @ratelimit 演算子が実装されています。

演算子 @ratelimit は 3 つの引数を受け入れます(マクロはサポートされていません)。

  • 要求 -(数値)

  • 時間単位 -(数値)+(時間単位 (s、m、h))

  • バースト サイズ -(オプションの数値)

レート リミッタは、仮想サービスとルール ID によって一意に識別できます。したがって、すべてのルールに独自のレート リミッタが適用されます。レート リミッタ キーは、match_element_namematch_element_value です。

現在の使用事例では、/login への POST 要求の数を IP アドレスごとに 1 分あたり 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) について、要求の数を 1 分あたり 10 個に制限します。

      • この制限を超えた場合、要求は block になります。