SSLインターセプトのためのSSLポリシーインフラストラクチャ
ポリシーは、受信トラフィックに対するフィルターのように機能します。Citrix Secure Web Gateway™ (SWG) アプライアンス上のポリシーは、プロキシ接続とリクエストを管理する方法を定義するのに役立ちます。処理は、そのポリシーに設定されているアクションに基づいています。つまり、接続リクエスト内のデータはポリシーで指定されたルールと比較され、そのルール(式)に一致する接続にアクションが適用されます。ポリシーのアクションを定義し、ポリシーを作成した後、それをプロキシサーバーにバインドして、そのプロキシサーバーを通過するトラフィックに適用されるようにします。
SSLインターセプトのためのSSLポリシーは、受信トラフィックを評価し、ルール(式)に一致するリクエストに事前定義されたアクションを適用します。接続をインターセプト、バイパス、またはリセットするかどうかの決定は、定義されたSSLポリシーに基づいて行われます。ポリシーには、INTERCEPT、BYPASS、RESETの3つのアクションのいずれかを設定できます。ポリシーを作成する際にアクションを指定します。ポリシーを有効にするには、アプライアンス上のプロキシサーバーにバインドする必要があります。ポリシーがSSLインターセプトを目的としていることを指定するには、ポリシーをプロキシサーバーにバインドする際に、タイプ(バインドポイント)をINTERCEPT_REQとして指定する必要があります。ポリシーをアンバインドする際も、タイプをINTERCEPT_REQとして指定する必要があります。
注:
プロキシサーバーは、ポリシーを指定した場合にのみインターセプトを決定できます。
トラフィックのインターセプトは、任意のSSLハンドシェイク属性に基づいて行うことができます。最も一般的に使用されるのはSSLドメインです。SSLドメインは通常、SSLハンドシェイクの属性によって示されます。これは、存在する場合、SSLクライアントHelloメッセージから抽出されたサーバー名表示(SNI)値、またはオリジンサーバー証明書から抽出されたサーバー代替名(SAN)値である可能性があります。Citrix SWGのSSLiポリシーは、DETECTED_DOMAINという特別な属性を提供しており、これにより顧客はオリジンサーバー証明書からのSSLドメインに基づいてインターセプトポリシーを簡単に作成できます。顧客はドメイン名を文字列、URLリスト(URLセットまたはpatset)、またはドメインから派生したURLカテゴリと照合できます。
Citrix® SWG CLIを使用したSSLポリシーの作成
コマンドプロンプトで、次のように入力します。
add ssl policy <name> -rule <expression> -action <string>
<!--NeedCopy-->
例:
以下の例は、detected_domain属性を使用してドメイン名を確認する式を持つポリシーに関するものです。
XYZBANKのような金融機関へのトラフィックをインターセプトしません。
add ssl policy pol1 -rule client.ssl.detected_domain.contains("XYZBANK") -action BYPASS
<!--NeedCopy-->
ユーザーが企業ネットワークからYouTubeに接続することを許可しません。
add ssl policy pol2 -rule client.ssl.client.ssl.detected_domain.url_categorize(0,0).category.eq ("YouTube") -action RESET
<!--NeedCopy-->
すべてのユーザーのトラフィックをインターセプトします。
add ssl policy pol3 –rule true –action INTERCEPT
<!--NeedCopy-->
顧客がdetected_domainを使用しない場合、SSLハンドシェイク属性のいずれかを使用してドメインを抽出し、推測することができます。
たとえば、クライアントHelloメッセージのSNI拡張にドメイン名が見つからない場合。ドメイン名はオリジンサーバー証明書から取得する必要があります。以下の例は、オリジンサーバー証明書のサブジェクト名にドメイン名があるかどうかをチェックする式を持つポリシーに関するものです。
すべてのユーザーのトラフィックを任意のYahooドメインにインターセプトします。
add ssl policy pol4 -rule client.ssl.origin_server_cert.subject.contains("yahoo") –action INTERCEPT
<!--NeedCopy-->
「ショッピング/小売」カテゴリのすべてのユーザーのトラフィックをインターセプトします。
add ssl policy pol_url_category -rule client.ssl.origin_server_cert.subject.URL_CATEGORIZE(0,0).CATEGORY.eq("Shopping/Retail") -action INTERCEPT
<!--NeedCopy-->
未分類のURLへのすべてのユーザーのトラフィックをインターセプトします。
add ssl policy pol_url_category -rule client.ssl.origin_server_cert.subject.url_categorize(0,0).category.eq("Uncategorized") -action INTERCEPT
<!--NeedCopy-->
以下の例は、ドメインをURLセットのエントリと照合するポリシーに関するものです。
SNIのドメイン名がURLセット「top100」のエントリと一致する場合、すべてのユーザーのトラフィックをインターセプトします。
add ssl policy pol_url_set -rule client.ssl.client_hello.SNI.URLSET_MATCHES_ANY("top100") -action INTERCEPT
<!--NeedCopy-->
オリジンサーバー証明書がURLセット「top100」のエントリと一致する場合、そのドメイン名のすべてのユーザーのトラフィックをインターセプトします。
add ssl policy pol_url_set -rule client.ssl.origin_server_cert.subject.URLSET_MATCHES_ANY("top100") -action INTERCEPT
<!--NeedCopy-->
SWG GUIを使用したプロキシサーバーへのSSLポリシーの作成
- Secure Web Gateway > SSL > ポリシー に移動します
-
SSLポリシー タブで、追加 をクリックし、次のパラメーターを指定します
- ポリシー名
- ポリシーアクション – インターセプト、バイパス、またはリセットから選択します
- 式
- 作成 をクリックします
SWG CLIを使用したプロキシサーバーへのSSLポリシーのバインド
コマンドプロンプトで、次のように入力します。
bind ssl vserver <vServerName> -policyName <string> -priority <positive_integer> -type INTERCEPT_REQ
<!--NeedCopy-->
例:
bind ssl vserver <name> -policyName pol1 -priority 10 -type INTERCEPT_REQ
<!--NeedCopy-->
Citrix SWG GUIを使用したプロキシサーバーへのSSLポリシーのバインド
- Secure Web Gateway > プロキシ仮想サーバー に移動します
- 仮想サーバーを選択し、編集 をクリックします
- 詳細設定 で、SSLポリシー をクリックします
- SSLポリシー ボックス内をクリックします
- ポリシーの選択 で、バインドするポリシーを選択します
- タイプ で、INTERCEPT_REQ を選択します
- バインド をクリックし、次に OK をクリックします
コマンドラインを使用したプロキシサーバーからのSSLポリシーのアンバインド
コマンドプロンプトで、次のように入力します。
unbind ssl vserver <vServerName> -policyName <string> -type INTERCEPT_REQ
<!--NeedCopy-->
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") |