Citrix Secure Web Gateway

SSL 代行受信のための SSL ポリシーインフラストラクチャ

ポリシーは、着信トラフィックに対するフィルタのように動作します。Citrix Secure Web Gateway(SWG)アプライアンスのポリシーは、プロキシ接続と要求の管理方法を定義するのに役立ちます。処理は、そのポリシーに対して設定されているアクションに基づきます。つまり、接続要求のデータはポリシーで指定された規則と比較され、規則に一致する接続にアクションが適用されます (式)。ポリシーのアクションを定義し、ポリシーを作成したら、プロキシサーバーにバインドして、そのプロキシサーバーを通過するトラフィックに適用されます。

SSLインターセプションの SSL ポリシーは、着信トラフィックを評価し、ルール(式)に一致する要求に事前定義されたアクションを適用します。接続の代行受信、バイパス、またはリセットは、定義された SSL ポリシーに基づいて決定されます。ポリシーに対して、INTERCEPT、BYPASS、または RESET の 3 つのアクションのいずれかを設定できます。ポリシーの作成時にアクションを指定します。ポリシーを有効にするには、アプライアンスのプロキシサーバーにポリシーをバインドする必要があります。ポリシーが SSLインターセプションを対象とするように指定するには、プロキシサーバーにポリシーをバインドするときに、タイプ(バインドポイント)を INTERCEPT_REQ として指定する必要があります。ポリシーのバインドを解除するときは、タイプを INTERCEPT_REQ として指定する必要があります。

:

プロキシサーバは、ポリシーを指定した場合にだけ、インターセプトを決定できます。

トラフィックインターセプションは、任意の SSL ハンドシェイク属性に基づいて行うことができます。最も一般的に使用されるのは SSL ドメインです。SSL ドメインは通常、SSL ハンドシェイクの属性によって示されます。これは、SSL Client Hello メッセージから抽出されたサーバー名インジケータ値(存在する場合)、または元のサーバー証明書から抽出されたサーバー別名(SAN)値になります。Citrix SWGのSSLiポリシーでは、DETECTED_DOMAINという特別な属性が表示されます。これにより、お客様はオリジンサーバー証明書からのSSLドメインに基づいてインターセプトポリシーを簡単に作成することができます。顧客は、ドメイン名を文字列、URL リスト(URL セットまたはpatset)、またはドメインから派生した URL カテゴリと照合できます。

Citrix SWG CLIを使用してSSLポリシーを作成する

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

add ssl policy <name> -rule <expression> -action <string>

:

次の例は、detected_domain 属性を使用してドメイン名をチェックする式を持つポリシーの例です。

XYZBANKなどの金融機関へのトラフィックを傍受しない

add ssl policy pol1 -rule client.ssl.detected_domain.contains("XYZBANK") -action BYPASS

ユーザーが企業ネットワークから YouTube に接続することを許可しないでください。

add ssl policy pol2 -rule client.ssl.client.ssl.detected_domain.url_categorize(0,0).category.eq ("YouTube") -action RESET

すべてのユーザトラフィックをインターセプトします。

add ssl policy pol3 –rule true –action INTERCEPT

お客様が detected_domain を使用したくない場合は、任意の SSL ハンドシェイク属性を使用してドメインを抽出および推測できます。

たとえば、ドメイン名が、クライアントの hello メッセージの SNI拡張に見つかりません。ドメイン名は、オリジンサーバー証明書から取得する必要があります。次の例は、オリジンサーバー証明書のサブジェクト名でドメイン名をチェックする式を持つポリシーの例です。

任意の Yahoo ドメインへのすべてのユーザトラフィックを傍受します。

add ssl policy pol4 -rule client.ssl.origin_server_cert.subject.contains("yahoo") –action INTERCEPT

カテゴリ「ショッピング/小売」のすべてのユーザトラフィックをインターセプトします。

add ssl policy pol_url_category -rule client.ssl.origin_server_cert.subject.URL_CATEGORIZE(0,0).CATEGORY.eq("Shopping/Retail") -action INTERCEPT

未分類 URL へのすべてのユーザトラフィックをインターセプトします。

add ssl policy pol_url_category -rule client.ssl.origin_server_cert.subject.url_categorize(0,0).category.eq("Uncategorized") -action INTERCEPT

次の例は、URL セットのエントリに対してドメインを照合するポリシーの例です。

SNI のドメイン名が URL セット「top100」のエントリと一致する場合、すべてのユーザートラフィックをインターセプトします。

add ssl policy pol_url_set  -rule client.ssl.client_hello.SNI.URLSET_MATCHES_ANY("top100") -action INTERCEPT

オリジンサーバー証明書が URL セット「top100」のエントリと一致する場合、ドメイン名のすべてのユーザートラフィックをインターセプトします。

add ssl policy pol_url_set  -rule client.ssl.origin_server_cert.subject.URLSET_MATCHES_ANY("top100") -action INTERCEPT

SWG GUI を使用してプロキシサーバーへの SSL ポリシーを作成する

  1. [ Secure Web Gateway] > [SSL] > [ポリシー]に移動します。
  2. [SSL ポリシー] タブで、[追加] をクリックし、次のパラメータを指定します。
    • ポリシー名
    • ポリシーアクション:代行受信、バイパス、またはリセットから選択します。
  3. [作成] をクリックします。

SWG CLI を使用して SSL ポリシーをプロキシサーバーにバインドする

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

bind ssl vserver <vServerName> -policyName <string> -priority <positive_integer> -type  INTERCEPT_REQ

:

bind ssl vserver <name> -policyName pol1 -priority 10 -type INTERCEPT_REQ

Citrix SWG GUIを使用してSSLポリシーをプロキシサーバーにバインドする

  1. [ Secure Web Gateway] > [プロキシ仮想サーバー] に移動します。
  2. 仮想サーバを選択し、[Edit] をクリックします。
  3. [詳細設定]で、[SSL ポリシー] をクリックします。
  4. [SSL ポリシー] ボックスの内側をクリックします。
  5. 「ポリシーの選択」で、バインドするポリシーを選択します。
  6. タイプ」で「 INTERCEPT_REQ」を選択します。
  7. [バインド] をクリックし、[OK] をクリックします。

コマンドラインを使用して SSL ポリシーをプロキシサーバーにバインド解除する

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

unbind ssl vserver <vServerName> -policyName <string> -type INTERCEPT_REQ

SWG の SSL ポリシーで使用される SSL 式

説明
CLIENT.SSL.CLIENT_HELLO.SNI.* SNI 拡張を文字列形式で返します。文字列を評価して、指定したテキストが含まれているかどうかを確認します。例:client.ssl.client_hello.sni.contains("xyz.com")
CLIENT.SSL.ORIGIN_SERVER_CERT.* バックエンドサーバーから受け取った証明書を、文字列形式で返します。文字列を評価して、指定したテキストが含まれているかどうかを確認します。例:client.ssl.origin_server_cert.subject.contains("xyz.com")
CLIENT.SSL.DETECTED_DOMAIN.* SNI 拡張またはオリジンサーバー証明書からドメインを文字列形式で返します。文字列を評価して、指定したテキストが含まれているかどうかを確認します。例:client.ssl.detected_domain.contains("xyz.com")