ADC

ADCで生成されたCookieに属性を挿入する

Web管理者は、NetScaler ADCアプライアンスによって生成されたCookieに他のCookie属性を挿入できます。これらの追加のCookie属性は、アプリケーションのアクセスパターンに基づいてADCが生成したCookieに必要なポリシーを適用するのに役立ちます。

以下の機能は、ADC が生成した Cookie を使用して永続性を実現します。

  • ロードバランシングCookie パーシステンス
  • 負荷分散グループの Cookie パーシステンス
  • GSLB サイトパーシスタンス
  • コンテンツスイッチングクッキーの永続性

次のパラメータを使用して、ADC が生成した Cookie に他の Cookie 属性を挿入できます。

  • literaladcCookieAttribute: ADC が生成したクッキーに、他のクッキー属性を文字列として追加します。

  • ComputedADCCookieAttribute: ADC ns変数を使用して、クライアントまたはサーバーの属性(ユーザーエージェントのバージョンなど)に基づいて、ADCで生成されたCookieにCookie属性を条件付きで追加します。

リテラル ADC Cookie 属性と計算された ADC Cookie 属性の両方を、ロードバランシングパラメータまたは単一のロードバランシングプロファイルで同時に設定することはできません。

すべてのCookie にはドメインが関連付けられています。クッキーのドメインがユーザーのアドレスバーのウェブサイトドメインと一致する場合、同じサイト(またはファーストパーティ)のコンテキストと見なされます。Cookie に関連付けられたドメインが外部サービスと一致し、ユーザーのアドレスバーにあるウェブサイトと一致しない場合、これはクロスサイト(またはサードパーティ)コンテキストと見なされます。

SameSite 属性は、Cookie をクロスサイトコンテキストに使用できるか、同一サイトコンテキストにのみ使用できるかをブラウザに示します。また、アプリケーションにクロスサイトコンテキストでアクセスする場合は、HTTPS 接続を介してのみアクセスすることができます。詳細については、 RFC6265を参照してください。

2020年2月まで、 SameSiteプロパティはCitrix ADCで明示的に設定されていませんでした。ブラウザはデフォルト値を「なし」に設定し、NetScalerの展開には影響しませんでした。

ただし、Google Chrome 80などの特定のブラウザをアップグレードすると、Cookieのデフォルトのクロスドメイン動作が変更されます。 SameSite 属性は、次のいずれかの値に設定できます。Google Chromeのデフォルト値はLaxに設定されています。

  • なし: 安全な接続でのみクロスサイトコンテキストで Cookie を使用するようブラウザに指示します。
  • Lax: ブラウザが同じサイトコンテキストでのリクエストに Cookie を使用するように指示します。クロスサイトコンテキストでは、GETリクエストなどの安全なHTTPメソッドのみがCookieを使用できます。
  • Strict: 同じサイトのコンテキストでのみCookieを使用します。

Cookie に SameSite 属性がない場合、Google Chrome は SameSite=LAX の機能を引き継ぎます。

他のブラウザーの特定のバージョンでは、SameSite 属性のデフォルト値が Noneに設定されることがあります。一部のブラウザバージョンでは、「SameSite = 「なし」は別の方法で扱うことができます。たとえば、以下のブラウザは「SameSite = none」の付いたCookie を拒否します。

  • Chrome51からChrome66までのChromeのバージョン(両端を含む)
  • Android の UC ブラウザのバージョン 12.13.2 より前のバージョン

ADCで生成されたCookieを構成する

ADC が生成する Cookie 属性を設定するには、以下を実行する必要があります。

  1. 負荷分散仮想サーバーを作成する
  2. LB パラメータまたは LB プロファイルを使用して、負荷分散仮想サーバの ADC Cookie 属性を設定します。
  3. LB プロファイルを使用する場合は、LB プロファイルを負荷分散仮想サーバーに設定します。
  4. Computed ADC Cookie 属性を使用する場合は、関連する書き換えポリシーを設定してください。

LB プロファイルが LB 仮想サーバーにバインドされている場合、グローバル LB パラメータ設定の代わりにプロファイルパラメータ設定が考慮されます。

ADC が生成する Cookie 属性は、次の方法で設定できます。

  • ロードバランシングパラメータの ADC Cookie 属性の設定
  • ロードバランシングプロファイルの ADC Cookie 属性の設定

NetScaler ADCアプライアンスで構成されたすべてのアプリケーションのADC生成Cookieにポリシーを均一に適用するには、グローバルLBパラメータでADC Cookie属性を設定します。

リテラルADCCookie属性 設定を使用すると、ADCで生成されたCookieにCookie属性を無条件に挿入できます。

コマンドプロンプトで入力します。

set lb parameter -LiteralADCCookieAttribute <string>
<!--NeedCopy-->

例:

set lb parameter -LiteralADCCookieAttribute SameSite=None
<!--NeedCopy-->

計算された ADC Cookie 属性設定では 、クライアントまたはサーバーの属性に基づいて、ADC が生成する Cookie に条件付きで Cookie 属性を挿入できます。

コマンドプロンプトで入力します。

set lb parameter -ComputedADCCookieAttribute <ns variable>
<!--NeedCopy-->

例:

add ns variable cookieattribute_var -type "text(100)" -scope transaction
set lb parameter -ComputedADCCookieAttributE "$cookieattribute_var"
add ns assignment samesiteassign -variable "$cookieattribute_var" -set ""SameSite=None""

add policy expression pol_iphone "(HTTP.REQ.HEADER("User-Agent").CONTAINS("iP") && (HTTP.REQ.HEADER("User-Agent").REGEX_SELECT(re/OS \d+\\_/).REGEX_SELECT(re/\d+/).TYPECAST_NUM_T(DECIMAL).EQ(12).typecast_text_t ALT "false").eq("true"))"
add policy expression pol_chrome "(HTTP.REQ.HEADER("User-Agent").CONTAINS("Chrom") && (HTTP.REQ.HEADER("User-Agent").REGEX_SELECT(re/Chrom.*\d+./).REGEX_SELECT(re/\d+/).TYPECAST_NUM_T(DECIMAL).BETWEEN(51,66).typecast_text_t ALT "false").eq("true"))"
add rewrite policy exception_samesite_attribute "pol_iphone || pol_chrome " NOREWRITE
add rewrite policy append_samesite_attribute true samesiteassign

bind rewrite global exception_samesite_attribute 90 110 -type RES_OVERRIDE
bind rewrite global append_samesite_attribute 100 110 -type RES_OVERRIDE
<!--NeedCopy-->

GUI を使用して変数を設定する

  1. AppExpert > 変数に移動し、「 追加」をクリックします。
  2. 変数の作成 」ページで、ドロップダウンメニューから「 スコープ」を「トランザクションとしてスコープ** 」を選択し、「テキストとしてタイプ** 」を選択します。

    ADC クッキー用の変数を作成

  3. その他の詳細を入力して、[ 作成] をクリックします。

GUI を使用して課題を作成する

変数を設定したら、値を割り当てるか、代入を作成して変数に対して実行する操作を指定できます。

  1. AppExpert > Assignmentsに移動してAddをクリックします。
  2. [ 割り当ての作成] ページで、詳細を入力し、[ 作成] をクリックします。
  1. [トラフィック管理] > [負荷分散] > [負荷分散パラメータの変更] に移動します。

    change lb parameters

  2. [ 負荷分散パラメータの設定 ] ペインで、要件に基づいていずれかのフィールドに適切な値を入力します。

    • リテラル ADC クッキー属性
    • 計算された ADC クッキー属性

    lb parameters.png を設定

  3. [OK] をクリックします。

NetScaler ADCアプライアンスで構成された特定のアプリケーションにポリシーを適用するには、アプリケーション固有のLB仮想サーバーにバインドされたLBプロファイルのCookie属性パラメータを設定できます。

LBプロファイルの リテラルADCCookie属性 設定を使用すると、仮想サーバーに固有のADC生成CookieにCookie属性を無条件に挿入できます。

コマンドプロンプトで入力します。

add lb profile <profile name> -LiteralADCCookieAttribute <string>
<!--NeedCopy-->

例:

add lb profile LB-Vserver-Profile-1 -LiteralADCCookieAttribute SameSite=None
add lb vserver LB-VServer-1 SSL 10.102.148.37 443 -persistenceType COOKIEINSERT -lbprofilename LB-Vserver-Profile-1
<!--NeedCopy-->

LB プロファイルの Computed ADC Cookie 属性設定を使用すると 、クライアントまたはサーバーの属性に基づいて、ADC が生成する Cookie に条件付きで Cookie 属性を挿入できます。次に、この LB プロファイルを LB 仮想サーバーに設定します。

コマンドプロンプトで入力します。

add lb profile <profile name> -ComputedADCCookieAttribute <ns variable>
<!--NeedCopy-->

例:

add ns variable cookieattribute_var -type "text(100)" -scope transaction
add ns assignment samesiteassign -variable "$cookieattribute_var" -set ""SameSite=None""
add lb profile LB-Vserver-Profile-1 -ComputedADCCookieAttributE "$cookieattribute_var"

add policy expression pol_iphone "(HTTP.REQ.HEADER("User-Agent").CONTAINS("iP") && (HTTP.REQ.HEADER("User-Agent").REGEX_SELECT(re/OS \d+\\_/).REGEX_SELECT(re/\d+/).TYPECAST_NUM_T(DECIMAL).EQ(12).typecast_text_t ALT "false").eq("true"))"
add policy expression pol_chrome "(HTTP.REQ.HEADER("User-Agent").CONTAINS("Chrom") && (HTTP.REQ.HEADER("User-Agent").REGEX_SELECT(re/Chrom.*\d+./).REGEX_SELECT(re/\d+/).TYPECAST_NUM_T(DECIMAL).BETWEEN(51,66).typecast_text_t ALT "false").eq("true"))"
add rewrite policy exception_samesite_attribute "pol_iphone || pol_chrome " NOREWRITE
add rewrite policy append_samesite_attribute true samesiteassign

add lb vserver LB-VServer-1 SSL 10.102.148.37 443 -persistenceType COOKIEINSERT -lbprofilename LB-Vserver-Profile-1
bind lb vserver LB-VServer-1 -policyName exception_samesite_attribute -priority 90 -gotoPriorityExpression 110 -type RESPONSE
bind lb vserver LB-VServer-1 -policyName append_samesite_attribute -priority 100 -gotoPriorityExpression 110 -type RESPONSE
<!--NeedCopy-->
  1. Traffic Management > Load Balancing > Virtual Serversに移動します。
  2. 仮想サーバを選択し、[ 編集(Edit)] をクリックします。
  3. [ 詳細設定 ] セクションの [ プロファイルの追加] をクリックします。

    lb 仮想サーバー

  4. プロファイル 」セクションで、「 追加 」をクリックして LB プロファイルを作成します。

    プロファイルをすでに作成している場合は、[ LB Profile] ドロップダウンメニューからプロファイルを選択します

    プロファイルを追加する

  5. [ LBプロファイル] ペインで、要件に基づいて、いずれかのフィールドに適切な値を入力します。
  • リテラル ADC クッキー属性
  • 計算された ADC クッキー属性

    LB profile.png のリテラル計算属性

  1. [OK] をクリックします。
  2. 作成したLBプロファイルを、 手順1で作成したLB仮想サーバーに設定します

ns 変数設定の検証

ADC ns 変数が LB パラメータまたは LB プロファイルで適切に設定されていることを確認するには、show lb パラメータまたは show lb profile コマンドを使用します。

次の表は、ns 変数が正しく設定されていない場合のさまざまな警告メッセージとその原因を示しています。

警告メッセージ 理由
NS 変数は設定されていません。text () とタイプして変数にスコープトランザクションを設定してください NS 変数はまだ設定されていません。
設定された NS 変数の範囲はトランザクションではありません。 変数は設定されていますが、スコープが「トランザクション」に設定されていません。
変数のタイプは Text () ではありません。 変数は構成されていますが、タイプが「テキスト」に設定されていません。
NS 変数に設定された値の最大サイズが 255 を超えています。 NS 変数に設定された値は 255 文字を超えています。注: ADCで生成されたCookieには、最大255文字の長さを追加できます。最大長を超える文字は切り捨てられます。

出力例

次の例では、ns 変数が設定されていない場合に警告メッセージが表示されます。

set lb parameter -ComputedADCCookieAttribute "$lbvar"

Warning: NS Variable is not configured. Please configure it with type text() and scope transaction
Done
<!--NeedCopy-->

警告メッセージは、 show lb parameter 次のコマンドの出力に表示されます。

show lb parameter

Global LB parameters:
Persistence Cookie HttpOnly Flag: ENABLED
Use Encrypted Persistence Cookie: DISABLED
Use Port For Hash LB: YES
Prefer direct route: YES
Retain Service State: OFF
Start RR Factor: 0
Skip Maxclient for Monitoring: DISABLED
Monitor Connection Close: FIN
Use consolidated stats for LeastConnection: YES
Allow mac mode based vserver to pick thereturn traffic from services: DISABLED
Allow bound service removal: ENABLED
TTL for Domain Based Server: 0 secs

NetScaler Cookie Variable Name: $lbvar(NS Variable is not configured. Please configure it with type text() and scope transaction)

Done
<!--NeedCopy-->

次の設定例は、LB 仮想サーバーに対応する GSLB サービスで設定されたサイトパーシスタンスに適用されます。GSLB Cookie にいくつかのクッキー属性を追加するには、以下の設定を行います。

  • LB プロファイル (LB-VServer-Profile-1) に ADC Cookie 属性を設定します。
  • LB プロファイルに「SameSite=None」などのリテラル ADC クッキー属性値を設定します。
  • LB プロファイルを GSLB サービスを表す負荷分散仮想サーバー (LB-VServer-1) に設定します。
add gslb vserver GSLB-VServer-1 SSL -backupLBMethod ROUNDROBIN -tolerance 0 -appflowLog DISABLED
add gslb site site1 10.102.148.4 -publicIP 10.102.148.4
add gslb service site1_gsvc1 10.102.148.35 SSL 443 -publicIP 10.102.148.35 -publicPort 443 -maxClient 0 -siteName site1 -sitePersistence HTTPRedirect -sitePrefix ss1 -cltTimeout 180 -svrTimeout 360 -downStateFlush ENABLED

bind gslb vserver GSLB-VServer-1 -serviceName site1_gsvc1
bind gslb vserver GSLB-VServer-1 -domainName www.gslb.com -TTL 5

add service service-1 10.102.84.140 SSL 443

add lb profile LB-Vserver-Profile-1 -LiteralADCCookieAttribute SameSite=None
add lb vserver LB-VServer-1 SSL 10.102.148.37 443 -persistenceType COOKIEINSERT -lbprofilename LB-Vserver-Profile-1

bind lb vserver LB-VServer-1 service-1
<!--NeedCopy-->

また、計算された ADC Cookie 属性を使用して Cookie 属性を条件付きで挿入することもできます。

次の設定例は、複数のアプリケーションがコンテンツスイッチング仮想サーバーの背後でホストされている場合に適用されます。すべてのアプリケーションに同じポリシーを適用するには、次のように、書き換えポリシーを LB 仮想サーバーではなくコンテンツスイッチング仮想サーバーにバインドします。

  • LB パラメータに ADC Cookie 属性を設定します。

    注:

    ADC Cookie 属性は LB プロファイルでも設定できます。

  • タイプを [テキスト] に、[スコープ] を [トランザクション] に設定した ns 変数 (cookieattribute_var) を設定します。
  • ns 変数を使用して、計算された ADC Cookie 属性をグローバル LB パラメータに設定します。
  • Cookie 属性を挿入するためのリライトポリシー (exception_samesite_attribute と append_samesite_attribute) をコンテンツスイッチング仮想サーバーに設定します。
add ns variable cookieattribute_var -type "text(100)" -scope transaction
set lb parameter -ComputedADCCookieAttributE "$cookieattribute_var"
add ns assignment samesiteassign -variable "$cookieattribute_var" -set ""SameSite=None""

add policy expression pol_iphone "(HTTP.REQ.HEADER("User-Agent").CONTAINS("iP") && (HTTP.REQ.HEADER("User-Agent").REGEX_SELECT(re/OS \d+\\_/).REGEX_SELECT(re/\d+/).TYPECAST_NUM_T(DECIMAL).EQ(12).typecast_text_t ALT "false").eq("true"))"
add policy expression pol_chrome "(HTTP.REQ.HEADER("User-Agent").CONTAINS("Chrom") && (HTTP.REQ.HEADER("User-Agent").REGEX_SELECT(re/Chrom.*\d+./).REGEX_SELECT(re/\d+/).TYPECAST_NUM_T(DECIMAL).BETWEEN(51,66).typecast_text_t ALT "false").eq("true"))"
add rewrite policy exception_samesite_attribute "pol_iphone || pol_chrome " NOREWRITE
add rewrite policy append_samesite_attribute true samesiteassign

add lb vserver LB-VServer-1 SSL 10.102.148.35 443
add lb vserver LB-VServer-2 SSL 10.102.148.36 443

add cs vserver CS-VServer-1 SSL 10.102.148.42 443 -persistenceType COOKIEINSERT

add cs action act1 -targetLBVserver v1
add cs action act2 -targetLBVserver v2
add cs policy CS-policy-1 -rule "HTTP.REQ.URL.CONTAINS("file1.html")" -action act1
add cs policy CS-policy-2 -rule "HTTP.REQ.URL.CONTAINS("file2.html")" -action act2

bind cs vserver CS-VServer-1 -policyName CS-policy-1 -priority 1
bind cs vserver CS-VServer-1 -policyName CS-policy-2 -priority 2

bind cs vserver -policyname exception_samesite_attribute 90 110 -type RES_OVERRIDE
bind cs vserver -policyname append_samesite_attribute 100 110 -type RES_OVERRIDE
<!--NeedCopy-->
ADCで生成されたCookieに属性を挿入する