Citrix ADC

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

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

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

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

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

  • LiteralADCCookieAttribute: 追加のCookie属性をADCで生成されたCookieに文字列として追加します。

  • 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メソッドのみがクッキーを使用することができます。
  • Strict: 同じサイトのコンテキストでのみCookieを使用します。 CookieにSameSite属性がない場合、GoogleChromeは次の機能を引き継ぎます。 SameSite=Lax.

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

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

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

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

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

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

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

  • LBパラメータでのADCCookie属性の設定
  • LBプロファイルでのADCCookie属性の設定

CLIを使用してLBパラメータにADCcookie属性を設定する

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

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

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

set lb parameter -LiteralADCCookieAttribute <string>

例:

set lb parameter -LiteralADCCookieAttribute SameSite=None

Computed ADC Cookie Attribute 設定を使用すると、クライアントまたはサーバーの属性に基づいて、ADCで生成されたCookieに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_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

GUIを使用して変数を構成する

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

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

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

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

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

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

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

GUIを使用してLBパラメータにADCcookie属性を設定する

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

    change lb parameters

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

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

    configure lb parameters.png

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

CLIを使用してLBプロファイルにADCCookie属性を設定する

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

LBプロファイルの リテラルADCCookie属性 設定を使用すると、仮想サーバーに固有の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プロファイルの ComputedADC Cookie Attribute 設定を使用すると、クライアントまたはサーバーの属性に基づいて、ADCで生成されたCookieに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

GUIを使用してLBプロファイルにADCCookie属性を設定する

  1. Traffic Management > Load Balancing > Virtual Serversに移動します。
  2. 仮想サーバを選択し、[Edit] をクリックします。
  3. [詳細設定] セクションで、[プロファイルの追加]をクリックします。

    lb virtual server

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

    add profiles

  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

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

計算された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