NetScaler Gatewayのレート制限
NetScaler Gateway のレート制限機能を使用すると、NetScaler Gateway アプライアンス上の特定のネットワークエンティティまたは仮想エンティティの最大負荷を定義できます。NetScaler Gateway アプライアンスはすべての非認証トラフィックを消費するため、アプライアンスは多くの場合、高いレートでプロセス要求にさらされます。レート制限機能を使用すると、エンティティに関連付けられたトラフィックのレートを監視し、トラフィックレートに基づいてリアルタイムで予防措置を実行するようにNetScaler Gatewayアプライアンスを設定できます。NetScalerアプライアンスでのレート制限の仕組みの詳細については、「 レート制限」を参照してください。
NetScalerには、予期しない速度でバックエンドサーバーを保護するレート制限機能があります。NetScalerの機能はNetScaler Gateway が処理する認証されていないトラフィックを処理しなかったため、NetScaler Gateway には独自のレート制限機能が必要でした。これは、NetScaler Gateway アプライアンスが公開されているさまざまなソースからの予期しない要求率をチェックするために必要です。たとえば、認証されていない/ログイン/制御要求や、エンドユーザーまたはデバイスの検証のために公開される特定の API。
レート制限の一般的なユースケース
-
URL からの 1 秒あたりのリクエスト数を制限します。
-
リクエストがレート制限を超えた場合、特定のホストからのリクエストで受信した Cookie に基づいて接続をドロップします。
-
同じホスト(特定のサブネットマスク)から到着し、同じ宛先 IP アドレスを持つ HTTP 要求の数を制限します。
NetScaler Gateway のレート制限を構成する
前提条件
設定済みの認証仮想サーバー。
注意事項
-
設定手順では、サンプルの制限 ID が設定されます。ストリームセレクタ、モードなどのサポートされているすべてのパラメータで同じように設定することができます。レート制限機能の完全な説明については、 レート制限を参照してください。
-
このポリシーは、次のように VPN 仮想サーバーにバインドすることもできます。次のコマンドを使用してポリシーをバインドするには、設定された VPN 仮想サーバーが必要です。
bind vpn vserver -policy denylogin –pri 1 –type aaa_request <!--NeedCopy-->
-
AAA_REQUEST は、レスポンダーポリシー用に新しく導入されたバインドポイントです。このバインドポイントで構成されたポリシーは、指定された仮想サーバーのすべての着信要求に適用されます。ポリシーは、他の処理の前に最初に非認証/制御トラフィックに対して処理されます。
-
ポリシーをNetScaler Gateway 仮想サーバーにバインドすると、認証されていない要求を含む、NetScaler Gateway によって消費されるすべてのトラフィックのAAA_REQUESTバインドポイントでレート制限が有効になります。
-
ポリシーを認証仮想サーバレートにバインドすると、認証仮想サーバにヒットする非認証/制御要求が制限されます。
コマンドラインインターフェイスを使用してレート制限を構成するには、コマンドプロンプトで次のコマンドを入力します。
add limitIdentifier <limitIdentifier name> -threshold <positive_integer> -timeslice <positive_integer> -mode <mode type>
<!--NeedCopy-->
例:
add limitIdentifier limit_one_login -threshold 10 -timeslice 4294967290 -mode REQUEST_RATE
<!--NeedCopy-->
add responderaction denylogin respondwith ‘“HTTP/1.1 200 OK\r\n\r\n” + “Request is denied due to unusual rate”’
<!--NeedCopy-->
add responder policy denylogin 'sys.check_limit("limit_one_login")' denylogin
<!--NeedCopy-->
bind authentication vserver <vserver name> -policy denylogin –pri 1 –type aaa_request
<!--NeedCopy-->
例:
bind authentication vserver authvserver -policy denylogin –pri 1 –type aaa_request
<!--NeedCopy-->
パラメータの説明
-
limitIdentifier: レート制限識別子の名前。ASCII 文字またはアンダースコア (_) 文字で始まり、ASCII 英数字またはアンダースコア文字のみで構成する必要があります。予約語は使用できません。これは必須の議論です。最大長:31
-
threshold- 要求 (モードが REQUEST_RATE として設定されている) がタイムスライスごとに追跡される場合に、指定されたタイムスライスで許可される要求の最大数。接続 (モードが CONNECTION として設定されている) が追跡される場合、通過する接続の合計数になります。デフォルト値:1 最小値:1 最大値:4294967295
-
timeSlice- 10 の倍数で指定された時間間隔(ミリ秒単位)。この間は、要求がしきい値を超えるかどうかをチェックするために追跡されます。引数は、モードが REQUEST_RATE に設定されている場合にのみ必要です。デフォルト値:1000 最小値:10 最大値:4294967295
-
mode- 追跡するトラフィックのタイプを定義します。
- REQUEST_RATE-リクエスト/タイムスライスを追跡します。
- CONNECTION-アクティブなトランザクションを追跡します。
NetScaler GUIを使用してレート制限を構成するには:
-
「 AppExpert」>「レート制限」>「制限識別子」の順に選択し、「 追加 」をクリックして、CLIセクションで指定されている関連の詳細を指定します。
。
-
[AppExpert] > [レスポンダー] > [ポリシー]に移動します。[ レスポンダーポリシー ] ページで、[ 追加] をクリックします。
-
[レスポンダーポリシーの作成 ] ページで、制限識別子を持つレスポンダーアクションを含むレスポンダーポリシーを作成します。
-
レスポンダーアクションを作成するには、[アクション] の横にある [ **追加 ] をクリックし、レスポンダーアクションの名前を入力します。**
-
ドロップダウンメニューからタイプとして応答を選択し 、次の式”HTTP/1.1 200 OK\ r\ n\ r\ n” +「要求は異常なレートのために拒否されました」を指定して、「 作成」をクリックします。
-
レスポンダーポリシーを作成するには、[ レスポンダーポリシーの作成 ] ページで、レスポンダーポリシーの名前を入力し、次の式「sys.check_limit (「limit_one_login」)」を指定して、[ 作成] をクリックします。
-
レスポンダーポリシーを認証仮想サーバーにバインドします。
- [ セキュリティ] > [AAA アプリケーショントラフィック] > [仮想サーバー] に移動します。
- 仮想サーバを選択します。
- ポリシーを追加します。
- サーバーにバインドするレスポンダーポリシーを選択し、優先度を設定します。
- タイプとして AAA-REQUEST を選択し、[ 続行] をクリックします。
注:
VPN 仮想サーバーの AAA_REQUEST バインドポイントでレート制限を有効にすることもできます。
NetScaler Gateway にレート制限を適用するための一般的なユースケースの構成
次に、一般的なユースケースを設定するコマンドの例を示します。
-
URL からの 1 秒あたりのリクエスト数を制限します。
add stream selector ipStreamSelector http.req.url “client.ip.src” add ns limitIdentifier ipLimitIdentifier –threshold 4 –timeslice 1000 –mode request_rate –limitType smooth –selectorName ip StreamSelector add responder policy ipLimitResponderPolicy “http.req.url.contains(\”myasp.asp\”) && sys.check_limit(\”ipLimitIdentifier\”)” myWebSiteRedirectAction bind authentication virtual server authvserver -policy denylogin –pri 1 –type aaa_request <!--NeedCopy-->
-
リクエストがレート制限を超えた場合、
www.yourcompany.com
からのリクエストで受信した Cookie に基づいて接続をドロップします。add stream selector cacheStreamSelector “http.req.cookie.value(\”mycookie\”)” “client.ip.src.subnet(24)” add ns limitIdentifier myLimitIdentifier –Threshold 2 –timeSlice 3000 –selectorName reqCookieStreamSelector add responder action sendRedirectURL redirect `"http://www.mycompany.com"` + http.req.url' –bypassSafetyCheck Yes add responder policy rateLimitCookiePolicy “http.req.url.contains(\www.yourcompany.com) && sys.check_limit(\”myLimitIdentifier\”)” sendRedirectUrl <!--NeedCopy-->
-
同じホスト(サブネットマスクが 32)から着信し、同じ宛先 IP アドレスを持つ HTTP 要求の数を制限します。
add stream selector ipv6_sel “CLIENT.IPv6.src.subnet(32)”CLIENT.IPv6.dst add ns limitIdentifier ipv6_id –imeSlice 20000 –selectorName ipv6_sel add lb vserver ipv6_vip HTTP 3ffe:: 209 80 –persistenceType NONE –cltTime add responder action redirect_page redirect “\”`http://redirectpage.com/\”"` add responder policy ipv6_resp_pol “SYS.CHECK_LIMIT(\”ipv6_id\”)” redirect_page bind responder global ipv6_resp_pol 5 END –type DEFAULT <!--NeedCopy-->