書き換え
警告:
従来のポリシーを使用したフィルター機能は廃止され、代替として、高度なポリシーインフラストラクチャで書き換え機能とレスポンダー機能を使用することをお勧めします。
書き換えとは、NetScaler ADCアプライアンスが処理する要求または応答の情報を書き換えることです。書き換えは、ウェブサイトの実際の設定に関する不必要な詳細を公開することなく、要求されたコンテンツへのアクセスを提供するのに役立ちます。書き換え機能が便利な状況は、次のとおりです。
-
セキュリティを向上させるために、Citrix ADCはすべての
http://links
をレスポンス本文のhttps://
に書き換えることができます。 -
SSL オフロード展開では、応答内のセキュアでないリンクをセキュアリンクに変換する必要があります。書き換えオプションを使用すると、NetScaler ADCからクライアントへの送信応答にセキュリティで保護されたリンクがあることを確認するために、すべての
http://links
をhttps://
に書き換えることができます。 -
Web サイトにエラーページを表示する必要がある場合は、デフォルトの 404 エラーページの代わりにカスタムエラーページを表示できます。例えば、エラーページの代わりに Web サイトのホームページまたはサイトマップを表示すると、訪問者は Web サイトから離れるのではなく、サイトにとどまります。
-
新しい Web サイトを立ち上げるが、古い URL を使用する場合は、[書き換え] オプションを使用できます。
-
サイト内のトピックに複雑な URL がある場合、シンプルで覚えやすいURL(「クール URL」とも呼ばれます)で書き直すことができます。
-
デフォルトのページ名を Web サイトの URL に追加できます。たとえば、企業のWebサイトのデフォルトページが
http://www.abc.com/index.php
の場合、ユーザーがブラウザのアドレスバーに「abc.com」と入力すると、URLを「abc.com/index.php」に書き換えることができます。
書き換え機能を有効にすると、NetScaler ADCはHTTP要求と応答のヘッダーと本文を変更できます。
HTTPリクエストとレスポンスを書き換えるには、構成する書き換えポリシーでプロトコル対応のNetScaler ADCポリシー式を使用できます。HTTP 要求および応答を管理する仮想サーバーは、 HTTP または SSL のタイプである必要があります。HTTP トラフィックでは、次のアクションを実行できます。
- リクエストの URL を変更する
- ヘッダーの追加、変更、削除
- 本文またはヘッダー内の特定の文字列を追加、置換、または削除します。
TCP ペイロードを書き換えるには、ペイロードをバイトの生のストリームと見なします。TCP 接続を管理する各仮想サーバーは、TCP または SSL_TCP のタイプである必要があります。TCP リライトという用語は、HTTP データではない TCP ペイロードの書き換えを指すために使用されます。TCP トラフィックでは、TCP ペイロードの任意の部分を追加、変更、または削除できます。
書き換え機能の使用例については、 書き換えアクションとポリシーの例を参照してください。
[書き換え] オプションと [レスポンダー] オプションの比較
書き換え機能とレスポンダ機能の主な違いは次のとおりです。
Responder は、レスポンスまたはサーバーベースの式には使用できません。Responder は、クライアントパラメータに応じて、次のシナリオでのみ使用できます。
- 新しい Web サイトまたはウェブページへの HTTP リクエストのリダイレクト
- カスタムレスポンスで応答する
- 要求レベルで接続をドロップまたはリセットする
レスポンダーポリシーがある場合、NetScaler ADCはクライアントからの要求を調べ、該当するポリシーに従ってアクションを実行し、クライアントに応答を送信し、クライアントとの接続を閉じます。
書き換えポリシーがある場合、NetScaler ADCはクライアントからの要求またはサーバーからの応答を調べ、該当するポリシーに従ってアクションを実行し、トラフィックをクライアントまたはサーバーに転送します。
一般に、NetScaler ADCでクライアントまたは要求ベースのパラメータに基づいて接続をリセットまたはドロップする場合は、レスポンダーを使用することをお勧めします。レスポンダーを使用してトラフィックをリダイレクトするか、カスタムメッセージで応答します。HTTP リクエストとレスポンスのデータを操作するには、書き換えを使用します。
書き換えの仕組み
書き換えポリシーは、規則とアクションで構成されます。このルールは、書き換えが適用されるトラフィックを決定し、アクションによってが実行するアクションを決定します。複数の書き換えポリシーを定義できます。ポリシーごとに、バインドポイントと優先度を指定します。
バインドポイントとは、NetScaler ADCがトラフィックを検査して、書き換えポリシーを適用できるかどうかを検証するトラフィックフロー内のポイントを指します。ポリシーを特定の負荷分散またはコンテンツスイッチング仮想サーバーにバインドするか、NetScaler ADCによって処理されるトラフィック全体にポリシーを適用する場合は、ポリシーをグローバルにすることができます。これらのポリシーは、グローバルポリシーと呼ばれます。
ユーザー定義のポリシーに加えて、NetScaler ADCにはいくつかのデフォルトポリシーがあります。デフォルトポリシーを変更または削除することはできません。
ポリシーを評価するために、NetScaler ADCは次の順序に従います。
- グローバルポリシー
- 特定の仮想サーバにバインドされたポリシー
- 既定のポリシー
注:
NetScaler ADCは、ポイントにバインドされている場合にのみ書き換えポリシーを適用できます。
NetScaler ADCは、次の手順で書き換え機能を実装します。
-
NetScaler ADCアプライアンスは、グローバルポリシーをチェックし、個々のバインドポイントでポリシーをチェックします。
-
複数のポリシーがバインドポイントにバインドされている場合、NetScaler ADCは優先順位の順序でポリシーを評価します。プライオリティが最も高いポリシーが最初に評価されます。各ポリシーを評価した後、ポリシーが TRUE と評価されると、関連付けられたアクションが実行されるポリシーに関連付けられたアクションが追加されます。一致は、ポリシールールで指定された特性が評価されるリクエストまたはレスポンスの特性と一致する場合に発生します。
-
どのポリシーでも、アクションに加えて、現在のポリシーが評価された後に評価される必要があるポリシーを指定できます。このポリシーは「式に移動」と呼ばれます。どのポリシーでも、式に移動(gotoPriorityExpr)が指定されている場合、NetScaler ADCは式に移動ポリシーを評価します。次に高い優先度を持つポリシーは無視されます。
ポリシーの優先順位を指定して、[式に移動(Go to Expression)] ポリシーを示すことができます。ポリシーの名前は使用できません。特定のポリシーを評価した後にNetScaler ADCが他のポリシーの評価を停止する場合は、[式に移動] を [終了] に設定できます。
-
すべてのポリシーが評価された後、またはポリシーの「式に移動」が「終了」に設定されている場合、NetScaler ADCはアクションのリストに従ってアクションの実行を開始します。
書き換えポリシーの構成の詳細については、 書き換えポリシーの構成および書き換えポリシーのバインドについては 、「 書き換えポリシーのバインド」を参照してください。
次の図は、書き換え機能を使用した場合に、NetScaler ADCが要求または応答をどのように処理するかを示しています。
図1:書き換えプロセス
ポリシー評価
プライオリティが最も高いポリシーが最初に評価されます。NetScaler ADCは、一致が見つかったときに書き換えポリシーの評価を停止しません。NetScaler ADCで構成されているすべての書き換えポリシーを評価します。
- ポリシーがTRUEと評価された場合、NetScaler ADCは以下の手順に従います。
- ポリシーの [式に移動] が [終了] に設定されている場合、NetScaler ADCは他のすべてのポリシーの評価を停止し、書き換えの実行を開始します。
-
gotoPriorityExpression は、’NEXT’、’END’、いくつかの整数、または ‘INVOCATION_LIST’ に設定できます。この値によって、次のプライオリティを持つポリシーが決まります。次の表は、式の各値に対してNetScaler ADCが実行するアクションを示しています。
式の値 アクション NEXT 次のプライオリティを持つポリシーが評価されます。 END ポリシーの評価は停止します。 <an integer>
指定された優先度を持つポリシーが評価されます。 INVOCATION_LIST Goto NEXT または END は、呼び出しリストの結果に基づいて適用されます。
- ポリシーがFALSEと評価された場合、NetScaler ADCは優先順位の順に評価を続行します。
- ポリシーがUNDEFINEDと評価された場合(エラーのために受信トラフィックで評価できない)、NetScaler ADCはUNDEFINED条件(undeFactionと呼ばれる)に割り当てられたアクションを実行し、ポリシーのさらなる評価を停止します。
NetScaler ADCは、評価が完了した後にのみ、実際の書き換えを開始します。これは、TRUE と評価されるポリシーによって識別されるアクションのリストを参照し、書き換えを開始します。リスト内のすべてのアクションを実装すると、NetScaler ADCは必要に応じてトラフィックを転送します。
注:
HTTP ヘッダーまたは本文、または TCP ペイロードの同じ部分で、競合または重複するアクションがポリシーで指定されていないことを確認します。このような競合が発生すると、NetScaler ADCは未定義の状況に遭遇し、書き換えを中止します。
書き換えアクション
NetScaler ADCアプライアンスで、本文内のテキストの追加、置換、削除、ヘッダーの追加、変更、削除、または書き換えアクションとしてのTCPペイロードの変更など、実行するアクションを指定します。書き換えアクションの詳細については、「 書き換えアクションの設定」を参照してください。
次の表では、ポリシーがTRUEと評価されたときにNetScaler ADCが実行できる手順について説明します。
アクション | 結果 |
---|---|
Insert | ポリシーに指定された書き換えアクションが実行されます。 |
NOREWRITE | リクエストまたはレスポンスは書き換えられません。NetScaler ADCは、メッセージの一部を書き換えずにトラフィックを転送します。 |
RESET | 接続は TCP レベルで中止されます。 |
DROP | メッセージはドロップされます。 |
注記:
どのポリシーでも、アンダーアクション(ポリシーが UNDEFINED と評価されたときに実行されるアクション)を NOREWRITE、RESET、または DROP として設定できます。
書き換え機能を使用するには、次の手順を実行します。
- NetScaler ADCでこの機能を有効にします。
- 書き換えアクションを定義します。
- 書き換えポリシーを定義します。
- ポリシーをバインドポイントにバインドして、ポリシーを有効にします。
書き換えを有効にする
HTTPまたはTCP要求または応答を書き換える場合は、NetScaler ADCアプライアンスの書き換え機能を有効にします。この機能が有効になっている場合、NetScaler ADCは指定されたポリシーに従って書き換えアクションを実行します。詳細については、「 書き換えの仕組み」を参照してください。
コマンドラインインターフェイスを使用して書き換え機能を有効にするには
コマンドプロンプトで次のコマンドを入力して、書き換え機能を有効にし、構成を確認します。
- enable ns feature REWRITE
- show ns feature
例:
> enable ns feature REWRITE
Done
> show ns feature
Feature Acronym Status
------- ------- ------
1) Web Logging WL OFF
2) Surge Protection SP ON
.
.
.
1) Rewrite REWRITE ON
.
.
1) NetScaler Push push OFF
Done
<!--NeedCopy-->
GUI を使用して書き換え機能を有効にするには
- ナビゲーションペインで、[ システム] をクリックし、[ 設定] をクリックします。
- 詳細ウィンドウの [モードと機能] で、[ 基本機能の構成] をクリックします。
- [ 基本機能の構成 ] ダイアログボックスで、[書き換え] チェックボックスをオンにし、[ OK] をクリックします。
- [ 機能の有効化/無効化] ダイアログボックスで、[ はい] をクリックします。ステータスバーに、選択した機能が有効になったことを示すメッセージが表示されます。
書き換えアクションの構成
警告
書き換えアクションのパターン機能は、NetScaler 12.0ビルド56.20以降では廃止され、代替として、[検索書き換えアクション]パラメータを使用することをお勧めします。
書き換えアクションは、サーバーまたはクライアントに送信する前に要求または応答に加えられた変更を示します。
式は、次のことを定義しています。
-
アクションタイプを書き換えます。
-
書き換えアクションの場所です。
-
アクションの設定タイプを書き換えます。
たとえば、DELETE アクションはターゲット式のみを使用します。REPLACE アクションは、ターゲット式と式を使用して置換テキストを設定します。
書き換え機能を有効にした後は、組み込みの書き換えアクションで十分でない限り、1 つ以上のアクションを設定する必要があります。すべての組み込みアクションの名前は、文字列 ns_cvpn で始まり、その後に文字列とアンダースコア文字が続きます。組み込みアクションは、クライアントレス VPN 要求または応答の一部のデコード、JavaScript または XML データの変更など、便利で複雑なタスクを実行します。組み込みアクションは、表示、有効化、および無効化できますが、変更または削除することはできません。
注:
HTTP 書き換えにのみ使用できるアクションタイプは、[書き換え アクションタイプ] 列で識別されます。
詳細については、「 Type パラメータ」を参照してください。
コマンドラインインターフェイスを使用して書き換えアクションを作成する
コマンドプロンプトで次のコマンドを入力して、書き換えアクションを作成し、構成を確認します。
add rewrite action <name> <type> <target> [<stringBuilderExpr>] [-search <expression>] [refineSearch <expression>] [-comment<string>]
show rewrite action <name>
詳細については、 書き換えアクションタイプとその引数テーブルを参照してください 。
書き換え機能には、次の組み込みアクションがあります。
-
noreWrite-リクエストまたはレスポンスを書き換えずにユーザーに送信します。
-
RESET-ユーザーがリクエストを再送信できるように、接続をリセットしてユーザーのブラウザに通知します。
-
DROP-ユーザーに応答を送信せずに接続をドロップします。
次のフロータイプの 1 つがすべてのアクションに暗黙的に関連付けられます。
-
Request-アクションはリクエストに適用されます。
-
Response-アクションは応答に適用されます。
-
ニュートラル-アクションはリクエストとレスポンスの両方に適用されます。
名前
ユーザー定義の書き換えアクションの名前。文字、数字、またはアンダースコア文字 (_) で始まり、ハイフン (-)、ピリオド (.) ハッシュ (#)、スペース ()、アットマーク (@)、等号 (=)、コロン (:)、およびアンダースコア文字のみを含める必要があります。書き換えポリシーの追加後に変更できます。
型パラメータ
Type パラメータには、ユーザー定義の書き換えアクションのタイプが表示されます。
Type パラメータの値は次のとおりです。
-
REPLACE <target> <string_builder_expr>
。ターゲット文字列を文字列ビルダーの式に置き換えます。
例:
> add rewrite action replace_http_act replace http.res.body(100) '"new_replaced_data"'
Done
> sh rewrite action replace_http_act
Name: replace_http_act
Operation: replace
Target:http.res.body(100)
Value:"new_replaced_data"
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done
<!--NeedCopy-->
-
REPLACE_ALL <target> <string_builder_expr1> -(search) <s>
-<target>
で指定されたリクエストまたはレスポンスで、で定義されている文字列のすべての出現箇所を、<pattern_to_search>
で定義されている文字列を<string_builder_expr>
に置き換えます。 検索オプションを使用して、置換する文字列を検索できます。
例:
> add policy patset pat_list_2
Done
> bind policy patset pat_list_2 "www.abc.com"
Done
> bind policy patset pat_list_2 "www.def.com"
Done
> add rewrite action refineSearch_act_31 replace_all "HTTP.RES.BODY(100000)" ""https://""-search "patset("pat_list_2")" -refineSearch "EXTEND(7,0).REGEX_SELECT(re#http://#)"
Done
> sh rewrite action refineSearch_act_31
Name: refineSearch_act_31
Operation: replace_all
Target:HTTP.RES.BODY(100000)
Refine Search:EXTEND(7,0).REGEX_SELECT(re#http://#)
Value:"https://"
Search: patset("pat_list_2")
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done
<!--NeedCopy-->
-
REPLACE_HTTP_RES <string_builder_expr>
。完全な HTTP レスポンスを文字列ビルダー式で定義された文字列に置き換えます。
例:
> add rewrite action replace_http_res_act replace_http_res '"HTTP/1.1 200 OK\r\n\r\nSending from ADC"'
Done
> sh rewrite action replace_http_res_act
Name: replace_http_res_act
Operation: replace_http_res
Target:"HTTP/1.1 200 OK
Sending from ADC"
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done
<!--NeedCopy-->
-
REPLACE_SIP_RES <target>
。SIP 応答全体を、<target>
で指定された文字列に置き換えます。
例:
> add rewrite action replace_sip_res_act replace_sip_res '"HTTP/1.1 200 OK\r\n\r\nSending from ADC"'
Done
> sh rewrite action replace_sip_res_act
Name: replace_sip_res_act
Operation: replace_sip_res
Target:"HTTP/1.1 200 OK
Sending from ADC"
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done
<!--NeedCopy-->
-
INSERT_HTTP_HEADER <header_string> <contents_string_builder_expr>
。header_string
で指定された HTTP ヘッダーと、contents_string_builder_expr
で指定されたヘッダーコンテンツを挿入します。
例:
> add rewrite action ins_cip_header insert_http_header "CIP" "CLIENT.IP.SRC"
Done
> sh rewrite action ins_cip_header
Name: ins_cip_header
Operation: insert_http_header
Target:CIP
Value:CLIENT.IP.SRC
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done
<!--NeedCopy-->
-
DELETE_HTTP_HEADER <target>
。<target>
で指定された HTTP ヘッダーを削除します。
例:
> add rewrite action del_true_client_ip_header delete_http_header "True-Client-IP"
Done
> sh rewrite action del_true_client_ip_header
Name: del_true_client_ip_header
Operation: delete_http_header
Target:True-Client-IP
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done
<!--NeedCopy-->
-
CORRUPT_HTTP_HEADER <target>
。<target>
で指定したすべての出現する HTTP ヘッダーのヘッダー名を破損した名前に置き換え、レシーバによって認識されないようにします。例:MY_HEADER は MHEY_ADERに変更されます。
例:
> add rewrite action corrupt_content_length_hdr corrupt_http_header "Content-Length"
Done
> sh rewrite action corrupt_content_length_hdr
Name: corrupt_content_length_hdr
Operation: corrupt_http_header
Target:Content-Length
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done
<!--NeedCopy-->
-
INSERT_BEFORE <string_builder_expr1> <string_builder_expr1>
。<string_builder_expr1>
で指定された文字列を検索し、その前の<string_builder_expr2>
に文字列を挿入します。
> add rewrite action insert_before_ex_act insert_before http.res.body(100) '"Add this string in the starting"'
Done
> sh rewrite action insert_before_ex_act
Name: insert_before_ex_act
Operation: insert_before
Target:http.res.body(100)
Value:"Add this string in the starting"
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done
<!--NeedCopy-->
-
INSERT_BEFORE_ALL <target> <string_builder_expr1> -(search) <string_builder_expr2>
。<target>
で指定されたリクエストまたはレスポンスで、で指定された文字列のすべての出現箇所を検索します。で指定された文字列を挿入します その前に。検索オプションを使用して文字列を検索できます。
例:
> add policy patset pat
Done
> bind policy patset pat abcd
Done
> add rewrite action refineSearch_act_1 insert_before_all http.res.body(10) 'target.prefix(10) + "refineSearch_testing"' -search patset("pat") -refineSearch extend(10,10)
Done
> sh rewrite action refineSearch_act_1
Name: refineSearch_act_1
Operation: insert_before_all
Target:http.res.body(10)
Refine Search:extend(10,10)
Value:target.prefix(10) + "refineSearch_testing"
Search: patset("pat")
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done
<!--NeedCopy-->
-
INSERT_AFTER <string_builder_expr1> <string_builder_expr2>
。string_builder_expr1
文字列の後に、string_builder_expr2
で指定された文字列を挿入します。
例:
> add rewrite action insert_after_act insert_after http.req.body(100) '"add this string after 100 bytes"'
Done
> sh rewrite action insert_after_act
Name: insert_after_act
Operation: insert_after
Target:http.req.body(100)
Value:"add this string after 100 bytes"
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done
<!--NeedCopy-->
-
INSERT_AFTER_ALL <target> <string_builder_expr1> -(search) <string_builder_expr2>
。<target>
で指定されたリクエストまたはレスポンスで、<string_builder_expr2>
で指定された文字列のすべての出現箇所を検索し、その後に<string_builder_expr1>
で指定された文字列を挿入します。 検索機能を使用して文字列を検索できます。
例:
> add rewrite action refineSearch_act_2 insert_after_all http.res.body(100) '"refineSearch_testing"' -search text("abc") -refineSearch extend(0, 10)
Done
> sh rewrite action refineSearch_act_2
Name: refineSearch_act_2
Operation: insert_after_all
Target:http.res.body(100)
Refine Search:extend(0, 10)
Value:"refineSearch_testing"
Search: text("abc")
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done
<!--NeedCopy-->
-
DELETE <target>
。target で指定された文字列を削除します。
例:
> add rewrite action delete_ex_act delete http.req.header("HDR")
Done
> sh rewrite action delete_ex_act
Name: delete_ex_act
Operation: delete
Target:http.req.header("HDR")
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done
<!--NeedCopy-->
-
DELETE_ALL <target> -(search) <string_builder_expr>
。<target>
で指定されたリクエストまたはレスポンスで、<string_builder_expr>
で指定された文字列のすべてのオカレンスを検索して削除します。検索機能を使用して文字列を検索できます。
例:
>add rewrite action refineSearch_act_4 delete_all "HTTP.RES.BODY(50000)" -search text("Windows Desktops") -refineSearch "EXTEND(40,40).REGEX_SELECT(re#\s`\*`<AppData>.`\*`\s`\*`<\\/AppData>#)"
Done
> show REWRITE action refineSearch_act_4
Name: refineSearch_act_4
Operation: delete_all
Target:HTTP.RES.BODY(50000)
Refine Search:EXTEND(40,40).REGEX_SELECT(re#\s`\*`<AppData>.`\*`\s`\*`</AppData>#)
Search: text("Windows Desktops")
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done
<!--NeedCopy-->
-
REPLACE_DIAMETER_HEADER_FIELD <target> <field value>
。リクエストまたはレスポンスで、<target>
で指定されたヘッダーフィールドを変更します。Diameter.req.flags.SET(<flag>)
またはstringbuilderexpression
としてのDiameter.req.flags.UNSET<flag>
を使用して、フラグを設定または解除します。
例:
> add rewrite action replace_diameter_field_ex_act replace_diameter_header_field diameter.req.flags diameter.req.flags.set(PROXIABLE)
Done
> sh rewrite action replace_diameter_field_ex_act
Name: replace_diameter_field_ex_act
Operation: replace_diameter_header_field
Target:diameter.req.flags
Value:diameter.req.flags.set(PROXIABLE)
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done
<!--NeedCopy-->
-
REPLACE_DNS_HEADER_FIELD <target>
。リクエストまたはレスポンスで、<target>
で指定されたヘッダーフィールドを変更します。
例:
> add rewrite action replace_dns_hdr_act replace_dns_header_field dns.req.header.flags.set(AA)
Done
> sh rewrite action replace_dns_hdr_act
Name: replace_dns_hdr_act
Operation: replace_dns_header_field
Target:dns.req.header.flags.set(AA)
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done
<!--NeedCopy-->
-
REPLACE_DNS_ANSWER_SECTION <target>
。応答の DNS 応答セクションを置き換えます。これは、A レコードと AAAA レコードにのみ適用されます。DNS.NEW_RRSET_A
およびNS.NEW_RRSET_AAAA
式を使用して、新しい回答セクションを構成します。
例:
> add rewrite action replace_dns_ans_act replace_dns_answer_section DNS.NEW_RRSET_A("1.1.1.1", 10)
Done
> sh rewrite action replace_dns_ans_act
Name: replace_dns_ans_act
Operation: replace_dns_answer_section
Target:DNS.NEW_RRSET_A("1.1.1.1", 10)
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done
<!--NeedCopy-->
-
CLIENTLESS_VPN_DECODE<target>
。ターゲットによって指定されたパターンをクライアントレス VPN 形式でデコードします。
例:
> add rewrite action cvpn_decode_act_1 clientless_vpn_decode http.req.body(100)
Done
> sh rewrite action cvpn_decode_act_1
Name: cvpn_decode_act_1
Operation: clientless_vpn_decode
Target:http.req.body(100)
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done
<!--NeedCopy-->
-
CLIENTLESS_VPN_DECODE_ALL<target>-search<expression>
。検索パラメータで指定されたすべてのパターンをクライアントレス VPN 形式でデコードします。
例:
> add rewrite action act1 clientless_vpn_decode_all http.req.body(100) -search text("abcd")
Done
> sh rewrite action act1
Name: act1
Operation: clientless_vpn_decode_all
Target:http.req.body(100)
Search: text("abcd")
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done
<!--NeedCopy-->
-
CLIENTLESS_VPN_ENCODE<target>
。ターゲットで指定されたパターンをクライアントレス VPN 形式でエンコードします。
例:
> add rewrite action cvpn_encode_act_1 clientless_vpn_encode http.req.body(100)
Done
> sh rewrite action cvpn_encode_act_1
Name: cvpn_encode_act_1
Operation: clientless_vpn_encode
Target:http.req.body(100)
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done
<!--NeedCopy-->
-
CLIENTLESS_VPN_ENCODE_ALL<target>-search<expression>
。指定されたすべてのパターンをクライアントレス VPN 形式でエンコードします。
例:
> add rewrite action act2 clientless_vpn_encode_all http.req.body(100) -search text("abcd")
Done
> sh rewrite action act2
Name: act1
Operation: clientless_vpn_encode_all
Target:http.req.body(100)
Search: text("abcd")
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done
<!--NeedCopy-->
-
CORRUPT_SIP_HEADER<target>
。<target>
で指定したすべての SIP ヘッダーのヘッダー名を破損した名前に置き換え、受信者がそれを認識しないようにします。
例:
> add rewrite action corrupt_sip_hdr_act corrupt_sip_header SIP_HDR
Done
> sh rewrite action corrupt_sip_hdr_act
Name: corrupt_sip_hdr_act
Operation: corrupt_sip_header
Target:SIP_HDR
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done
<!--NeedCopy-->
-
INSERT_SIP_HEADER <header_string_builder_expr> <contents_string_builder_expr>
。<header_string_builder_expr>
で指定されたSIPヘッダーと、<contents_string_builder_expr>
で指定されたヘッダーコンテンツを挿入します。
例:
> add rewrite action insert_sip_hdr_act insert_sip_header SIP_HDR '"inserting_sip_header"'
Done
>sh rewrite action insert_sip_hdr_act
Name: insert_sip_hdr_act
Operation: insert_sip_header
Target:SIP_HDR
Value:"inserting_sip_header"
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done
<!--NeedCopy-->
-
DELETE_SIP_HEADER<target>
。<target>
で指定された SIP ヘッダーを削除します。
例:
> add rewrite action delete_sip_hdr delete_sip_header SIP_HDR
Done
> sh rewrite action delete_sip_hdr
Name: delete_sip_hdr
Operation: delete_sip_header
Target:SIP_HDR
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done
<!--NeedCopy-->
ターゲットパラメータ
Target パラメータリクエストまたはレスポンスのどの部分を書き換えるかを指定する式を指定します。
StringBuilderExpr
StringBuilderExpr 指定された場所のリクエストまたは応答に挿入されるコンテンツを指定する式を指定します。この式は、指定された文字列を置き換えます。
例 1. クライアント IP を使用した HTTP ヘッダーの挿入:
> add rewrite action insertact INSERT_HTTP_HEADER "client-IP" CLIENT.IP.SRC
Done
> show rewrite action insertact
Name: insertact
Operation: insert_http_header
Target:Client-IP
Value:CLIENT.IP.SRC
BypassSafetyCheck : NO
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done
<!--NeedCopy-->
例 2. TCP ペイロード内の文字列の置換(TCP 書き換え):
> add rewrite action client_tcp_payload_replace_all REPLACE_ALL
'client.tcp.payload(1000)' '"new-string"' -search text("old-string")
Done
> show rewrite action client_tcp_payload_replace_all
Name: client_tcp_payload_replace_all
Operation: replace_all
Target:client.tcp.payload(1000)
Value:"new-string"
Search: text("old-string")
BypassSafetyCheck : NO
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done
>
<!--NeedCopy-->
リクエストまたはレスポンスの一部を検索して書き換え
検索機能は、リクエストまたはレスポンスで必要なパターンのすべてのインスタンスを検索するのに役立ちます。
検索機能は、次のアクションタイプで使用する必要があります。
- INSERT_BEFORE_ALL
- INSERT_AFTER_ALL
- REPLACE_ALL
- DELETE_ALL
- CLIENTLESS_VPN_ENCODE_ALL
- CLIENTLESS_VPN_DECODE_ALL
検索機能は、次のアクションタイプでは使用できません。
- INSERT_HTTP_HEADER
- INSERT_BEFORE
- INSERT_AFTER
- REPLACE
- 削除
- DELETE_HTTP_HEADER
- CORRUPT_HTTP_HEADER
- REPLACE_HTTP_RES
- CLIENTLESS_VPN_ENCODE
- CLIENTLESS_VPN_DECODE
- INSERT_SIP_HEADER
- DELETE_SIP_HEADER
- CORRUPT_SIP_HEADER
- REPLACE_DIAMETER_HEADER_FIELD
- REPLACE_DNS_ANSWER_SECTION
- REPLACE_DNS_HEADER_FIELD
- REPLACE_SIP_RES
次の検索タイプがサポートされています。
- テキスト- リテラル文字列例 ፦検索テキスト (「hello」)
-
正規表現-リクエストまたはレスポンスの複数の文字列を照合するために使用されるパターン例 ፦検索正規表現 (re~^hello*~)
- XPATH-XML を検索する XPATH 式。 例 ፦-search xpath(xp%/a/b%)
- JSON-JSON を検索するための XPATH 式。 例 ፦検索xpath_json (xp%/a/b%) HTML-HTML を検索する XPATH 式例 ፦検索 xpath_html (xp%/html/body%) パッチセット-これはパッチセットエンティティにバインドされたすべてのパターンを検索します。 例:-search patset(“patset1”)
- Datset-データセットエンティティにバインドされたすべてのパターンを検索します。 例 ፦-search dataset(“dataset1”)
- AVP- 直径/Radiusメッセージの例 ፦検索 avp (999) で複数の AVP を照合するために使用される AVP 番号
検索結果を絞り込む
検索の絞り込み機能を使用して、検索結果を絞り込むための追加条件を指定できます。検索の絞り込み機能は、検索機能が使用されている場合にのみ使用できます。 検索の絞り込みパラメータは、常に「extend (m, n)」操作で始まります。ここで、’m’ は検索結果の左側に数バイトを指定し、’n’ は検索結果の右側に数バイトを指定して、選択範囲を拡張します。
設定されている書き換えアクションが次の場合:
> add rewrite action test_refine_search replace_all http.res.body(10) '”testing_refine_search”' -search text("abc") -refineSearch extend(1,1)
And the HTTP response body is abcxxxx456.
<!--NeedCopy-->
次に、検索パラメータはパターン「abc」を検出し、refineSearch パラメータは一致したパターンの左側に余分な 1 バイト、右側に余分な 1 バイトをチェックするように設定されているためです。結果として置換されるテキストは abcx です。したがって、このアクションの出力はtesting_refine_searchxxx456
です。
例1: INSERT_BEFORE_ALL アクションタイプで [絞り込み] 検索機能を使用する。
> add policy patset pat
Done
> bind policy patset pat abcd
Done
> add rewrite action refineSearch_act_1 insert_before_all http.res.body(10) 'target.prefix(10) + "refineSearch_testing"' -search patset("pat") -refineSearch extend(10,10)
Done
> sh rewrite action refineSearch_act_1
Name: refineSearch_act_1
Operation: insert_before_all
Target:http.res.body(10)
Refine Search:extend(10,10)
Value:target.prefix(10) + "refineSearch_testing"
Search: patset("pat")
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done
<!--NeedCopy-->
例 2: INSERT_AFTER_ALL アクションタイプで「絞り込み」サーチ機能を使用する。
> add rewrite action refineSearch_act_2 insert_after_all http.res.body(100) '"refineSearch_testing"' -search text("abc") -refineSearch extend(0, 10)
Done
> sh rewrite action refineSearch_act_2
Name: refineSearch_act_2
Operation: insert_after_all
Target:http.res.body(100)
Refine Search:extend(0, 10)
Value:"refineSearch_testing"
Search: text("abc")
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done
<!--NeedCopy-->
例 3: REPLACE_ALL アクションタイプで [絞り込み] 検索機能を使用する。
> add policy patset pat_list_2
Done
> bind policy patset pat_list_2 "www.abc.com"
Done
> bind policy patset pat_list_2 "www.def.com"
Done
> add rewrite action refineSearch_act_31 replace_all "HTTP.RES.BODY(100000)" ""https://"" -search "patset("pat_list_2")" -refineSearch "EXTEND(7,0).REGEX_SELECT(re#http://#)"
Done
> sh rewrite action refineSearch_act_31
Name: refineSearch_act_31
Operation: replace_all
Target:HTTP.RES.BODY(100000)
Refine Search:EXTEND(7,0).REGEX_SELECT(re#http://#)
Value:"https://"
Search: patset("pat_list_2")
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done
<!--NeedCopy-->
例 4: DELETE_ALL アクションタイプで [検索の絞り込み] 機能を使用する。
>add rewrite action refineSearch_act_4 delete_all "HTTP.RES.BODY(50000)" -search text("Windows Desktops") -refineSearch "EXTEND(40,40).REGEX_SELECT(re#\s*<AppData>.\*\s\*<\\/AppData>#)"
> show REWRITE action refineSearch_act_4
Name: refineSearch_act_4
Operation: delete_all
Target:HTTP.RES.BODY(50000)
Refine Search:EXTEND(40,40).REGEX_SELECT(re#\s*<AppData>.\*\s\*</AppData>#)
Search: text("Windows Desktops")
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done
>
<!--NeedCopy-->
例 5: CLIENTLESS_VPN_ENCODE_ALL アクションタイプで「検索の絞り込み」機能を使用する。
’’’
add rewrite action act2 clientless_vpn_encode_all http.req.body(100) -search text(“abcd”) Done sh rewrite action act2 Name: act1 Operation: clientless_vpn_encode_all Target:http.req.body(100) Search: text(“abcd”) Hits: 0 Undef Hits: 0 Action Reference Count: 0 Done
’’’
例 6: CLIENTLESS_VPN_DECODE_ALL アクションタイプで「検索の絞り込み」機能を使用する。
> add rewrite action act1 clientless_vpn_decode_all http.req.body(100) -search text("abcd")
Done
> sh rewrite action act1
Name: act1
Operation: clientless_vpn_decode_all
Target:http.req.body(100)
Search: text("abcd")
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done
>
<!--NeedCopy-->
コマンドラインインターフェイスを使用して既存の書き換えアクションを変更する
コマンドプロンプトで次のコマンドを入力して、既存の書き換えアクションを変更し、構成を確認します。
set rewrite action <name> [-target <expression>] [-stringBuilderExpr <expression>] [-search <expression>] [-refineSearch <expression>] [-comment <string>]
コマンドプロンプトで次のコマンドを入力して、変更された構成を確認します。
show rewrite action <name>
例:
> set rewrite action insertact -target "Client-IP"
Done
> show rewrite action insertact
Name: insertact
Operation: insert_http_header Target:Client-IP
Value:CLIENT.IP.SRC
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done
<!--NeedCopy-->
コマンドラインインターフェイスを使用して書き換えアクションを削除する
コマンドプロンプトで次のコマンドを入力して、書き換えアクションを削除します。
rm rewrite action <name>
例:
> rm rewrite action insertact
Done
<!--NeedCopy-->
構成ユーティリティを使用して書き換えアクションを構成する
- [AppExpert]>[Rewrite]>[Actions] の順に移動します。
- 詳細ウィンドウで、次のいずれかの操作を行います。
- アクションを作成するには、[ 追加] をクリックします。
- 既存のアクションを変更するには、アクションを選択し、[ 編集] をクリックします。
- [ 作成] または[ OK]をクリックします。アクションが正常に構成されたことを示すメッセージがステータスバーに表示されます。
- 手順 2 ~ 4 を繰り返して、必要な数の書き換えアクションを作成または変更します。
- [閉じる] をクリックします。
[ 数式の追加] ダイアログボックスを使用して式を追加します
- [ 書き換えアクションの作成 ] または [ 書き換えアクションの設定 ] ダイアログボックスで、入力する引数 type のテキスト領域で、[ 追加] をクリックします。
-
[ 式の追加 ] ダイアログボックスの最初のリストボックスで、式の最初の用語を選択します。
- HTTP HTTP プロトコル。HTTP プロトコルに関連するリクエストの側面を調べる場合は、これを選択します。
- SYS。保護されたウェブサイト。リクエストの受信者に関連するリクエストの側面を調べる場合は、これを選択します。
- CLIENT. 要求を送信したコンピュータ。リクエストの送信者の側面を調べる場合は、これを選択します。
選択すると、右端のリストボックスに、式の次の部分に適した用語がリストされます。
-
2 番目のリストボックスで、式の 2 番目の用語を選択します。選択肢は、前のステップで行った選択によって異なり、コンテキストに適切です。2 番目の選択を行った後、[式の構築] ウィンドウの下のヘルプウィンドウ (空白) に、選択した用語の目的と使用法を説明するヘルプが表示されます。
-
式が終了するまで、前のリストボックスの右側に表示されるリストボックスから用語を選択するか、値の入力を求めるテキストボックスに文字列または数値を入力します。 PI 式の言語およびレスポンダーポリシーの式の作成の詳細については、「ポリシーと式」を参照してください。
サンプル HTTP データに対してリライトアクションを使用した場合のエフェクトをテストする場合は、リライト式エバリュエータを使用できます。
TCP ペイロードを書き換え
TCP 書き換えのアクション内のターゲット式は、次のいずれかの式プレフィックスで開始する必要があります。
- CLIENT.TCP.PAYLOAD. クライアント要求の TCP ペイロードを書き換えるため。たとえば、CLIENT.TCP.PAYLOAD (10000) .AFTER_STR (“string1”) などです。
- SERVER.TCP.PAYLOAD. サーバー応答の TCP ペイロードを書き換えるため。たとえば、SERVER.TCP.PAYLOAD(1000).B64DECODE.BETWEEN(“string1”,”string2”)など。
[書き換えアクションエバリュエータ] ダイアログボックスを使用して書き換えアクションを評価する
- [ 書き換えアクション ] の詳細ウィンドウで、評価する書き換えアクションを選択し、[ 評価] をクリックします。
-
[式エバリュエーターを書き換え] ダイアログボックスで、次のパラメータの値を指定します。(アスタリスクは必須パラメータを示します)。
「書き換えアクション」(Rewrite Action)-評価する書き換えアクションがまだ選択されていない場合は、ドロップダウンリストから選択します。書き換えアクションを選択すると、「詳細」セクションに、選択した書き換えアクションの詳細が表示されます。 「新規」(New)-「新規作成」(New) を選択して「書き換えアクションを作成」(Create Rewrite Action) ダイアログボックスを開 「変更」(Modify)-「修正」(Modify) を選択して「書き換えアクションを設定」(Configure) ダイアログボックスを開き、選択した書き換え フロータイプ:選択した書き換えアクションを HTTP リクエストデータまたは HTTP 応答データのどちらでテストするかを指定します。デフォルトは [リクエスト] です。応答データでテストする場合は、[応答] を選択します。 HTTP 要求/応答データ*:書き換えアクションエバリュエーターがテストに使用する HTTP データを提供するスペースを提供します。データをウィンドウに直接貼り付けるか、[Sample] をクリックしてサンプル HTTP ヘッダーを挿入できます。 行末を表示-サンプル HTTP データの各行の末尾に UNIX スタイルの行末文字(\ n)を表示するかどうかを指定します。 [サンプル]:HTTP リクエスト/レスポンスデータウィンドウにサンプル HTTP データを挿入します。GET または POST データを選択できます。 [参照(Browse)]:ローカルブラウズウィンドウが開き、ローカルまたはネットワークロケーションのサンプル HTTP データを含むファイルを選択できます。 [クリア(Clear)]:[HTTP 要求/応答データ] ウィンドウから現在のサンプル HTTP データを消去します。
- [評価] をクリックします。書き換えアクションエバリュエーターは 、選択したサンプルデータに対する書き換えアクションの効果を評価し、[結果] ウィンドウで選択した [ 書き換え ] アクションによって変更された結果を表示します 。追加および削除は、ダイアログボックスの左下隅の凡例に示されているように強調表示されます。
-
すべてのアクションが希望する効果があると判断するまで、書き換えアクションを評価し続けます。
- 選択した書き換えアクションを修正し、変更したバージョンをテストするには、[ 修正 ] をクリックして [ 書き換えアクションの構成 ] ダイアログボックスを開き、変更内容を保存し、もう一度 [評価] をクリックします。
- 同じリクエストまたはレスポンスデータを使用して、別の書き換えアクションを評価するには、[ 書き換えアクション ] ドロップダウンリストからそれを選択し、もう一度 [ 評価 ] をクリックします。
-
[ 閉じる ] をクリックして、[ 式の書き換えエバリュエーター ] を閉じ、[ 書き換え操作 ] ウィンドウに戻ります。
- 書き換えアクションを削除するには、削除する書き換えアクションを選択し、「 削除 」をクリックし、プロンプトが表示されたら、「 OK」をクリックして選択を確定します。
書き換えポリシーの構成
必要な書き換えアクションを作成したら、少なくとも1つの書き換えポリシーを作成して、NetScaler ADCアプライアンスに書き換える要求を選択する必要があります。
書き換えポリシーは、1 つ以上の式で構成される規則と、要求または応答が規則に一致した場合に実行される関連アクションで構成されます。HTTP リクエストとレスポンスを評価するためのポリシールールは、リクエストまたはレスポンスのほぼすべての部分に基づくことができます。
TCP ペイロード以外のデータの書き換えに TCP 書き換えアクションを使用することはできませんが、TCP 書き換えポリシーのポリシールールは、トランスポート層およびトランスポート層の下の層の情報に基づいて作成できます。
設定されたルールが要求または応答に一致すると、対応するポリシーがトリガーされ、それに関連付けられたアクションが実行されます。
注:
コマンドラインインターフェイスまたは GUI を使用して、書き換えポリシーを作成および設定できます。コマンドラインインターフェイスとNetScaler ADCポリシー式言語に精通していないユーザーは、通常、GUIの使用がはるかに簡単になります。
コマンドラインインターフェイスを使用して新しい書き換えポリシーを追加するには
コマンドプロンプトで次のコマンドを入力して、新しい書き換えポリシーを追加し、構成を確認します。
<add rewrite policy <name> <expression> <action> [<undefaction>]
<show rewrite policy <name>
例 1. HTTP コンテンツの書き換え
> add rewrite policyNew "HTTP.RES.IS_VALID" insertact NOREWRITE
Done
> show rewrite policyNew
Name: policyNew
Rule: HTTP.RES.IS_VALID
RewriteAction: insertact
UndefAction: NOREWRITE
Hits: 0
Undef Hits: 0
Done
<!--NeedCopy-->
例 2. TCP ペイロードの書き換え (TCP 書き換え):
> add rewrite policy client_tcp_payload_policy CLIENT.IP.SRC.EQ(172.168.12.232) client_tcp_payload_replace_all
Done
> show rewrite policy client_tcp_payload_policy
Name: client_tcp_payload_policy
Rule: CLIENT.IP.SRC.EQ(172.168.12.232)
RewriteAction: client_tcp_payload_replace_all
UndefAction: Use Global
LogAction: Use Global
Hits: 0
Undef Hits: 0
Done
>
<!--NeedCopy-->
コマンドラインインターフェイスを使用して既存の書き換えポリシーを変更するには
コマンドプロンプトで次のコマンドを入力して、既存の書き換えポリシーを変更し、構成を確認します。
<set rewrite policy <name> -rule <expression> -action <action> [<undefaction>]
<show rewrite policy <name>
例:
> set rewrite policyNew -rule "HTTP.RES.IS_VALID" -action insertaction
Done
> show rewrite policyNew
Name: policyNew
Rule: HTTP.RES.IS_VALID
RewriteAction: insertaction
UndefAction: NOREWRITE
Hits: 0
Undef Hits: 0
Done
<!--NeedCopy-->
コマンドラインインターフェイスを使用して書き換えポリシーを削除するには
コマンドプロンプトで次のコマンドを入力して、書き換えポリシーを削除します。
rm rewrite policy <name>
例:
> rm rewrite policyNew
Done
<!--NeedCopy-->
GUI を使用して書き換えポリシーを設定するには
- [AppExpert]>[Rewrite]>[Policies] の順に移動します。
- 詳細ウィンドウで、次のいずれかの操作を行います。
- ポリシーを作成するには、[ Add] をクリックします。
- 既存のポリシーを変更するには、ポリシーを選択し、[ 開く]をクリックします。
- [ 作成]または[ OK]をクリックします。ポリシーが正常に構成されたことを示すメッセージがステータスバーに表示されます。
- 手順 2 ~ 4 を繰り返して、必要な数の書き換えアクションを作成または変更します。
- [閉じる] をクリックします。書き換えポリシーを削除するには、削除する書き換えポリシーを選択し、「 削除 」をクリックし、プロンプトが表示されたら、「 OK」をクリックして選択を確定します。
書き換えポリシーのバインド
書き換えポリシーを作成したら、それをバインドして有効にする必要があります。NetScaler ADCを通過するすべてのトラフィックにポリシーを適用する場合は、ポリシーをグローバルにバインドするか、ポリシーを特定の仮想サーバーまたはバインドポイントにバインドして、その仮想サーバーのみを転送するか、ポイントの着信トラフィックをそのポリシーにバインドできます。着信要求が書き換えポリシーと一致すると、そのポリシーに関連付けられたアクションが実行されます。
HTTP 要求および応答を評価するための書き換えポリシーは、HTTP または SSL タイプの仮想サーバーにバインドするか、REQ_OVERRIDE、 REQ_DEFAULT、RES_OVERRIDE、および RES_DEFAULT バインドポイントにバインドできます。TCP 書き換えの書き換えポリシーは、タイプ TCP または SSL_TCP の仮想サーバー、または OTHERTCP_REQ_OVERRIDE、OTHERTCP_REQ_DEFAULT、OTHERTCP_REQ_OVERRIDE、および OTHERTCP_RES_DEFAULT バインドポイントにのみバインドできます。
注:
OTHERTCPという用語は、NetScaler ADCアプライアンスのコンテキストで使用され、TCPパケットがカプセル化するプロトコルに関係なく、未加工のバイトストリームとして扱うすべてのTCPまたはSSL_TCP要求および応答を指します。
ポリシーをバインドするときは、そのポリシーにプライオリティを割り当てます。プライオリティによって、定義したポリシーが評価される順序が決まります。優先度は、任意の正の整数に設定できます。
NetScaler ADCオペレーティングシステムでは、ポリシーの優先度は逆の順序で動作します。数値が大きいほど、優先度は低くなります。たとえば、プライオリティが 10、100、1000 の 3 つのポリシーがある場合、プライオリティ 10 が割り当てられたポリシーが最初に適用され、次にポリシーにプライオリティ 100 が割り当てられ、最後にポリシーにオーダー 1000 が割り当てられます。
NetScaler ADCオペレーティングシステムの他のほとんどの機能とは異なり、書き換え機能は、要求がポリシーに一致した後も引き続きポリシーを評価および実装します。ただし、リクエストまたはレスポンスに対する特定のアクションポリシーの効果は、別のアクションの前で実行されるか後に実行されるかによって異なることがよくあります。優先度は、意図した結果を得るために重要です。
他のポリシーを任意の順序で追加するための十分な余裕を残し、バインドするときに各ポリシー間に50または100の間隔で優先順位を設定することで、希望の順序で評価されるように設定できます。これを実行すると、既存のポリシーのプライオリティを再割り当てすることなく、いつでもポリシーを追加できます。
書き換えポリシーをバインドする場合、ポリシーに goto 式 (gotoPriorityExpression) を割り当てるオプションもあります。goto 式には、goto 式を含むポリシーよりも高いプライオリティを持つ別のポリシーに割り当てられたプライオリティに一致する任意の正の整数を指定できます。goto式をポリシーに割り当てて、要求または応答がポリシーと一致すると、NetScaler ADCは優先順位がgoto式と一致するポリシーにすぐに移動します。現在のポリシーよりも小さいが、goto 式のプライオリティ番号よりも高いプライオリティ番号を持つポリシーはすべてスキップされ、それらのポリシーは評価されません。
コマンドラインインターフェイスを使用して書き換えポリシーをグローバルにバインドするには
コマンドプロンプトで次のコマンドを入力して、書き換えポリシーをグローバルにバインドし、構成を確認します。
bind rewrite global <policyName> <priority> [<gotoPriorityExpression>] [-type <type>] [-invoke (<labelType> <labelName>)]
show rewrite global
例:
>bind rewrite global policyNew 10
Done
> show rewrite global
1) Global bindpoint: RES_DEFAULT
Number of bound policies: 1
2) Global bindpoint: REQ_OVERRIDE
Number of bound policies: 1
Done
<!--NeedCopy-->
コマンドラインインターフェイスを使用して書き換えポリシーを特定の仮想サーバーにバインドするには
コマンドプロンプトで次のコマンドを入力して、書き換えポリシーを特定の仮想サーバーにバインドし、構成を確認します。
bind lb vserver <name>@ (<serviceName>@ [-weight <positive_integer>]) | <serviceGroupName>@ | (-policyName <string>@ [-priority <positive_integer>] [-gotoPriorityExpression <expression>] [-type ( REQUEST | RESPONSE )] [-invoke (<labelType> <labelName>)] )
show lb vserver <name>
例:
> bind lb vserver lbvip -policyName ns_cmp_msapp -priority 50
Done
>
> show lb vserver lbvip
lbvip (8.7.6.6:80) - HTTP Type: ADDRESS
State: DOWN
Last state change was at Wed Jul 15 05:54:24 2009 (+226 ms)
Time since last state change: 28 days, 01:57:26.350
Effective State: DOWN
Client Idle Timeout: 180 sec
Down state flush: ENABLED
Disable Primary Vserver On Down : DISABLED
Port Rewrite : DISABLED
No. of Bound Services : 0 (Total) 0 (Active)
Configured Method: LEASTCONNECTION
Mode: IP
Persistence: NONE
Vserver IP and Port insertion: OFF
Push: DISABLED Push VServer:
Push Multi Clients: NO
Push Label Rule: none
1) Policy : ns_cmp_msapp Priority:50
2) Policy : cf-pol Priority:1 Inherited
Done
<!--NeedCopy-->
GUI を使用して書き換えポリシーをバインドポイントにバインドするには
- AppExpert >書き換え > ポリシーに移動します。
- 詳細ペインで、グローバルにバインドする書き換えポリシーを選択し、[ Policy Manager] をクリックします。
- [ ポリシーマネージャの書き換え ] ダイアログボックスの [ バインドポイント ] メニューで、次のいずれかの操作を行います。
- HTTP 書き換えポリシーのバインディングを構成する場合は、[ HTTP] をクリックし、 要求ベースの書き換えポリシーと応答ベースの書き換えポリシーのどちらを構成するかに応じて、[要求] または [応答] をクリックします。
- TCP 書き換えポリシーのバインドを構成する場合は、[ TCP] をクリックし、 クライアント側の TCP 書き換えポリシーを構成するか、 サーバー側のTCP 書き換えポリシーを構成するかに応じて、[クライアント] または [サーバー] をクリックします。
- 書き換えポリシーをバインドするバインドポイントをクリックします。[ Rewrite Policy Manager ] ダイアログボックスには、選択したバインドポイントにバインドされているすべての書き換えポリシーが表示されます。
- [ Insert Policy ] をクリックして新しい行を挿入し、使用可能なバインドされていない書き換えポリシーをすべて備えたドロップダウンリストを表示します。
- バインドポイントにバインドするポリシーをクリックします。ポリシーは、バインドポイントにバインドされた書き換えポリシーのリストに挿入されます。
- [ 優先度 ] 列では、優先度を任意の正の整数に変更できます。このパラメータの詳細については、「書き換えポリシーをバインドするためのパラメータ」の「priority」を参照してください。
- 現在のポリシーが一致する場合、ポリシーをスキップして特定のポリシーに直接移動する場合は、[Goto Expression] カラムの値を、適用する次のポリシーのプライオリティと等しくなるように変更します。このパラメータの詳細については、「書き換えポリシーをバインドするためのパラメータ」の「gotoPriorityExpression」を参照してください。
- ポリシーを変更するには、ポリシーをクリックし、[ ポリシーの変更] をクリックします。
- ポリシーのバインドを解除するには、ポリシーをクリックし、[ ポリシーのバインド解除] をクリックします。
- アクションを変更するには、[アクション] 列で変更するアクションをクリックし、[ アクションの変更] をクリックします。
- 呼び出しラベルを変更するには、[ 呼び出し ] 列で、変更する呼び出しラベルをクリックし、[ 呼び出しラベルの変更] をクリックします。
- 現在設定しているバインドポイントにバインドされているすべてのポリシーのプライオリティを再生成するには、[ Regenerate Priorities] をクリックします。ポリシーは、他のポリシーと比較して既存の優先度を保持しますが、優先度は 10 の倍数で再番号付けされます。
- [ 変更を適用] をクリックします。
- [閉じる] をクリックします。ポリシーが正常に構成されたことを示すメッセージがステータスバーに表示されます。
GUI を使用して書き換えポリシーを特定の仮想サーバーにバインドするには
- [ トラフィック管理 ] > [ 負荷分散 ] > [ 仮想サーバー] に移動します。
- 仮想サーバーの詳細ウィンドウの一覧で、書き換えポリシーをバインドする仮想サーバーを選択し、[ 開く] をクリックします。
- [ 仮想サーバーの構成 (負荷分散) ] ダイアログボックスで、[ ポリシー ] タブを選択します。NetScaler ADCで構成されているすべてのポリシーがリストに表示されます。
- この仮想サーバにバインドするポリシーの名前の横にあるチェックボックスをオンにします。
- [OK] をクリックします。ポリシーが正常に構成されたことを示すメッセージがステータスバーに表示されます。
書き換えポリシーラベルの設定
単一のポリシーでサポートされるよりも複雑なポリシー構造を構築する場合は、ポリシーラベルを作成し、ポリシーと同様にバインドできます。ポリシーラベルは、ポリシーがバインドされるユーザー定義のポイントです。ポリシーラベルが呼び出されると、そのラベルにバインドされているすべてのポリシーが、設定したプライオリティの順序で評価されます。ポリシーラベルには、1 つまたは複数のポリシーを含めることができ、それぞれに独自の結果を割り当てることができます。ポリシー・ラベル内の1つのポリシーが一致すると、次のポリシーに進み、別のポリシー・ラベルまたは適切なリソースを呼び出すか、またはポリシー評価が即時に終了し、ポリシー・ラベルを呼び出したポリシーに制御が戻る場合があります。
書き換えポリシーラベルは、名前、ポリシーラベルに含まれるポリシーのタイプを示すトランスフォーム名、およびポリシーラベルにバインドされたポリシーのリストで構成されます。ポリシーラベルにバインドされている各ポリシーには、 書き換えポリシーの設定で説明されているすべての要素が含まれます。
注:コマンドラインインターフェイスまたは GUI を使用して、書き換えポリシーラベルを作成および設定できます。コマンドラインインターフェイスとNetScaler ADCポリシーインフラストラクチャ(PI)言語に精通していないユーザーは、通常、GUIの使用がはるかに簡単になります。
コマンドラインインターフェイスを使用して書き換えポリシーラベルを設定するには
書き換えポリシーラベルを追加するには、コマンドプロンプトで次のコマンドを入力します。
add rewrite policylabel <labelName> <transform>
たとえば、PollabelHttpResponses という名前の書き換えポリシーラベルを追加して、HTTP 応答で動作するすべてのポリシーをグループ化するには、次のように入力します。
add rewrite policy label polLabelHTTPResponses http_res
既存の書き換えポリシーラベルを変更するには、 NetScaler ADCコマンドプロンプトで次のコマンドを入力します 。
set rewrite policy <name> <transform>
注:
set rewrite policy コマンドは、追加書き換えポリシーコマンドと同じオプションを取ります。
書き換えポリシーラベルを削除するには、 NetScaler ADCコマンドプロンプトで次のコマンドを入力します 。
rm rewrite policy<name>
たとえば、pollabelHttpResponses という名前の書き換えポリシーラベルを削除するには、次のように入力します。
rm rewrite policy polLabelHTTPResponses
GUI を使用して書き換えポリシーラベルを設定するには
- AppExpert > 書き換え > ポリシーラベルに移動します。
- 詳細ウィンドウで、次のいずれかの操作を行います。
- ポリシーラベルを作成するには、[ Add] をクリックします。
- 既存のポリシーラベルを変更するには、ポリシーを選択し、[ 開く] をクリックします。
- ポリシーラベルにバインドされているリストからポリシーを追加または削除します。
- リストにポリシーを追加するには、[Insert Policy] をクリックし、ドロップダウンリストからポリシーを選択します。ポリシーを作成してリストに追加するには、リストで [New Policy] を選択し、 書き換えポリシーの設定の手順に従います。
- リストからポリシーを削除するには、そのポリシーを選択し、[ポリシーのバインド解除] をクリックします。
- [Priority] 列の数値を編集して、各ポリシーの優先度を変更します。 また、[優先順位の再生成] をクリックして、ポリシーの番号を自動的に再設定することもできます。
- 「 作成」または「OK」をクリックし、「閉じる」をクリックします。 ポリシーラベルを削除するには、ポリシーラベルを選択し、[ 削除] をクリックします。ポリシーラベルの名前を変更するには、ポリシーラベルを選択し、[ 名前の変更] をクリックします。ポリシーの名前を編集し、[OK] をクリックして変更を保存します。
この記事の概要
- [書き換え] オプションと [レスポンダー] オプションの比較
- 書き換えの仕組み
- 書き換えアクション
- 書き換えを有効にする
- 書き換えアクションの構成
- コマンドラインインターフェイスを使用して書き換えアクションを作成する
- コマンドラインインターフェイスを使用して既存の書き換えアクションを変更する
- コマンドラインインターフェイスを使用して書き換えアクションを削除する
- 構成ユーティリティを使用して書き換えアクションを構成する
- [ 数式の追加] ダイアログボックスを使用して式を追加します
- TCP ペイロードを書き換え
- [書き換えアクションエバリュエータ] ダイアログボックスを使用して書き換えアクションを評価する
- 書き換えポリシーの構成
- 書き換えポリシーのバインド
- 書き換えポリシーラベルの設定