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