レート制限は主に WAF の外部で行われますが、特定のユーザー要件があるため、WAF の一部としても含まれています。次のトピックでは、WAF に関するレート制限について説明します。
WAF のレート制限の使用事例
WAF のレート制限の一部として対処される主な使用事例は、/login アクションへの呼び出しを IP アドレスごとに 1 分あたり 10 個の要求に制限することです。
このニーズに対応するため、ルール言語内の拡張機能として @ratelimit 演算子が実装されています。
演算子 @ratelimit は 3 つの引数を受け入れます(マクロはサポートされていません)。
要求 -(数値)
時間単位 -(数値)+(時間単位 (s、m、h))
バースト サイズ -(オプションの数値)
レート リミッタは、仮想サービスとルール ID によって一意に識別できます。したがって、すべてのルールに独自のレート リミッタが適用されます。レート リミッタ キーは、match_element_name と match_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
になります。