Citrix ADC

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

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

次の機能は、ADCで生成されたCookieを使用して永続性を実現します。

  • Cookieの永続性の負荷分散
  • 負荷分散グループのCookieの永続性
  • GSLBサイトの永続性
  • コンテンツスイッチングクッキーの永続性

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

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

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

リテラル ADC クッキー属性と計算された ADC クッキー属性の両方を、負荷分散パラメータまたは単一の負荷分散プロファイルで同時に設定することはできません。

ユースケース:SameSiteCookie属性を構成する

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

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

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

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

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

CookieにSameSite属性がない場合、GoogleChromeは次の機能を引き継ぎます。 SameSite=Lax.

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

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

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

ADC で生成された cookie 属性を設定するには、次の手順を実行します。

  1. 負荷分散仮想サーバーの作成
  2. LBパラメーターまたはLBプロファイルを使用して、負荷分散仮想サーバーのADCCookie属性を設定します。
  3. LBプロファイルを使用する場合は、LBプロファイルを負荷分散仮想サーバーに設定します。
  4. 計算されたADCCookie属性を使用することを選択した場合は、関連する書き換えポリシーを構成します。

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

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

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

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

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

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

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

例:

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

Computed ADC Cookie Attribute 設定を使用すると、クライアントまたはサーバーの属性に基づいて、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 > Variablesに移動して Addをクリックします。
  2. [ 変数 の作成]ページで、ドロップダウンメニューから[ トランザクション として スコープ]および[ テキスト として タイプ] を選択します。

    ADCクッキーの変数を作成する

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

GUIを使用して割り当てを作成する

変数を構成した後、割り当てを作成することにより、値を割り当てるか、変数に対して実行する操作を指定できます。

  1. AppExpert > Assignmentsに移動してAddをクリックします。
  2. [ 割り当ての作成] ページで、詳細を入力し、[ 作成] をクリックします。

    ADC変数の割り当てを作成する

  1. [トラフィック管理] > [負荷分散] > [負荷分散パラメータの変更] に移動します。

    change lb parameters

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

    • リテラルADCCookie属性
    • 計算されたADCCookie属性

    configure lb parameters.png

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

Citrix 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プロファイルの ComputedADC Cookie Attribute 設定を使用すると、クライアントまたはサーバーの属性に基づいて、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 virtual server

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

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

    プロファイルを追加する

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

    リテラル-LBprofile.pngで計算された属性

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

ns変数の構成を確認します

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

次の表に、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

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

Done
<!--NeedCopy-->

GSLBデプロイメントにCookie属性を挿入するためのサンプル構成

次の設定例は、LB仮想サーバーに対応するGSLBサービスで設定されたサイトの永続性に適用されます。GSLB Cookieにいくつかの追加のCookie属性を追加するには、次の設定を実行します。

  • LBプロファイル(LB-Vserver-Profile-1)でADCCookie属性を設定します。
  • たとえば、リテラルADCCookie属性値を設定します “SameSite=None”, LBプロファイルで。
  • 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-->

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

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

  • LBパラメータでADCcookie属性を設定します。

    注:

    LBプロファイルでADCCookie属性を設定することもできます。

  • ns変数を構成します (cookieattribute_var) タイプをテキストに設定し、スコープをトランザクションに設定します。
  • ns変数を使用して、グローバルLBパラメーターに計算されたADCCookie属性を設定します。
  • 書き換えポリシーを設定する (exception_samesite_attribute そして append_samesite_attribute) Cookie属性を挿入するためのコンテンツスイッチング仮想サーバーに。
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にCookie属性を挿入します