Citrix ADC

ADCが生成したクッキーにクッキー属性を挿入する

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

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

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

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

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

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

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

ユースケース:SameSite クッキー属性の設定

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

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

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

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

  • [** なし]:** セキュアな接続でのみクロスサイトコンテキストで Cookie を使用するブラウザを示します。
  • Lax: 同じサイトコンテキストでリクエストにクッキーを使用するブラウザを示します。クロスサイトコンテキストでは、GETリクエストのような安全なHTTPメソッドのみがクッキーを使用することができます。
  • Strict: 同じサイトのコンテキストでのみクッキーを使用します。 クッキーに SameSite 属性がない場合、Google Chrome は SameSite = LAX の機能を引き継ぎます。

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

  • Chrome 51からChrome 66までのクロムのバージョン(両端を含む)
  • バージョン12.13.2より前のAndroid上のUCブラウザのバージョン

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

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

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

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

  • LB パラメータの ADC クッキー属性の設定
  • LB プロファイルの ADC クッキー属性の設定

CLI を使用した LB パラメータの ADC クッキー属性の設定

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

リテラルADCクッキー属性 設定を使用すると、クッキー属性をADCが生成したクッキーに無条件に挿入できます。

コマンドプロンプトで、次のように入力します。

set lb parameter -LiteralADCCookieAttribute <string>

例:

set lb parameter -LiteralADCCookieAttribute SameSite=None

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

コマンドプロンプトで、次のように入力します。

set lb parameter -ComputedADCCookieAttribute <ns variable>

例:

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_insert "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

GUI を使用した LB パラメータの ADC クッキー属性の設定

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

    lb パラメータを変更する

  2. [** Load Balancing Parameters**] ペインで、要件に基づいて、いずれかのフィールドに適切な値を入力します。

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

    lb parameters.png を設定する

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

CLI を使用した LB プロファイルの ADC クッキー属性の設定

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

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

コマンドプロンプトで、次のように入力します。

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

例:

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

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

コマンドプロンプトで、次のように入力します。

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

例:

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
  1. [トラフィック管理] > [負荷分散] > [仮想サーバー] に移動します。
  2. 仮想サーバを選択し、[Edit] をクリックします。
  3. [詳細設定] セクションで、[プロファイルの追加] をクリックします。

    lb 仮想サーバー

  4. [プロファイル] セクションで、[追加] をクリックして、LB プロファイルを作成します。 既にプロファイルを作成している場合は、[LB Profile] ドロップダウンメニューからプロファイル を選択します。

    ![プロファイルを追加] (/en-us/citrix-adc/media/add-profiles.png)

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

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

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

ns 変数構成の確認

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

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

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

サンプル出力

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

set lb parameter -ComputedADCCookieAttribute "$lbvar"

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

警告メッセージは、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

GSLBデプロイメントにCookie属性を挿入するための設定例

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

  • LB プロファイル(LB-VSER-プロファイル-1)で ADC クッキー属性を設定します。
  • LB プロファイルで、リテラル ADC クッキー属性値 (例:「同一サイト=なし」) を設定します。
  • LB プロファイルを負荷分散仮想サーバー (LB-vServer-1) に設定します。これは、GSLB サービスを表します。
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

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

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

  • LB パラメータで ADC クッキー属性を設定します。

    注:

    また、LB プロファイルで ADC クッキー属性を設定することもできます。

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

ADCが生成したクッキーにクッキー属性を挿入する