Citrix ADC

リモートコンテンツ検査用のICAP

インターネットコンテンツ適応プロトコル (ICAP) は、HTTP メッセージで付加価値変換サービスを実行するためのシンプルな軽量プロトコルです。典型的なシナリオでは、ICAP クライアントは HTTP 要求と応答を 1 つ以上の ICAP サーバーに転送して処理します。ICAP サーバーは、要求に対してコンテンツ変換を実行し、要求または応答に対して実行する適切なアクションで応答を返します。

Citrix ADC アプライアンスのICAP

Citrix ADCの設定では、アプライアンスはサードパーティのICAPサーバー(マルウェア対策やデータ漏洩防止(DLP)など)と相互運用するICAPクライアントとして機能します。アプライアンスが着信 Web トラフィックを受信すると、アプライアンスはトラフィックを傍受し、コンテンツ検査ポリシーを使用して HTTP 要求に ICAP 処理が必要かどうかを評価します。「はい」の場合、アプライアンスはメッセージを復号化し、プレーンテキストとして ICAP サーバーに送信します。ICAP サーバーは、要求メッセージでコンテンツ変換サービスを実行し、応答をアプライアンスに返します。適応されたメッセージは、HTTP 要求または HTTP 応答のいずれかになります。アプライアンスが複数のICAPサーバーと相互運用している場合、アプライアンスはICAPサーバーの負荷分散を実行します。このシナリオは、1 つの ICAP サーバですべてのトラフィック負荷を処理するのに十分でない場合に発生します。ICAPサーバーが変更されたメッセージを返すと、アプライアンスは変更されたメッセージをバックエンドのオリジンサーバーに転送します。

Citrix ADCアプライアンスは、着信トラフィックがHTTPSタイプの場合、セキュアなICAPサービスを提供します。アプライアンスは SSL ベースの TCP サービスを使用して、アプライアンスとICAP サーバー間のセキュアな接続を確立します。

ICAPリクエストの変更(REQMOD)の仕組み

要求変更(REQMOD)モードでは、Citrix ADCアプライアンスは、クライアントから受信したHTTP要求をICAPサーバーに転送します。ICAP サーバーは、次のいずれかを実行します。

  1. 変更されたバージョンの要求を返送し、アプライアンスは変更された要求をバックエンドのオリジンサーバーに送信するか、変更された要求を別のICAP サーバーにパイプライン処理します。
  2. 適応が必要ないことを示すメッセージで応答します。
  3. エラーを返し、アプライアンスはエラーメッセージをユーザーに送信します。

ICAPレスポンス修正(RESPMOD)の仕組み

応答変更(RESPMOD)モードでは、Citrix ADCアプライアンスはICAPサーバーにHTTP応答を送信します(アプライアンスによって送信される応答は通常、オリジンサーバーによって送信される応答です)。ICAP サーバーは、次のいずれかを実行します。

  1. 応答の変更バージョンを送信し、アプライアンスは応答をユーザーに送信するか、応答を別のICAPサーバーにパイプラインします。
  2. 適応が必要ないことを示すメッセージで応答します。
  3. エラーを返し、アプライアンスは次にエラーメッセージをユーザーに送信します。

ICAP ライセンス

ICAP機能は、Citrix ADCスタンドアロンまたはCitrix ADC PremiumライセンスエディションまたはAdvancedライセンスエディションを使用した高可用性セットアップで動作します。

コンテンツ変換サービス用の ICAP の構成

コンテンツ変換サービスに ICAP を使用するには、まずコンテンツ検査機能と負荷分散機能を有効にする必要があります。機能を有効にしたら、次のタスクを実行できます。

コンテンツ検査を有効にするには

Citrix ADCアプライアンスをICAPクライアントとして動作させる場合は、まずコンテンツ検査および負荷分散機能を有効にする必要があります。

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

enable ns feature contentInspection LoadBalancing

ICAP プロファイルの追加

Citrix ADCアプライアンスのICAP構成は、ICAPプロファイルと呼ばれるエンティティで指定されます。プロファイルには ICAP 設定のコレクションがあります。設定には、ICAP 要求を動的に生成し、ICAP 応答を受信し、コンテンツ検査データをログに記録するパラメータが含まれます。

ICAP サーバーに対して ICAP 要求を動的に生成するために、ICAP プロファイルに「insertHTTPRequest」という新しいパラメータが追加されます。このパラメータが設定されている場合、アプライアンスは設定された値をポリシー式として受け取り、式を評価し、結果をカプセル化された HTTP 要求または応答として含め、ICAP サーバーに送信します。また、新しいパラメータ「insertICAPHeaders」は、ICAPヘッダーを動的に評価して含めるように構成できます。

アプライアンスが ICAP 要求を送信し、ICAP サーバーに応答を受信しない場合、接続は応答しなくなります。これは、ICAP サーバーが応答を送信するか、セッションが解放されるまで発生します。この動作は、ICAP 応答タイムアウトオプションを設定することで処理できます。ICAP 応答が遅延した場合にアクションを実行するために、ICAP の要求タイムアウトパラメータを設定できます。構成済みの要求タイムアウト内にCitrix ADCアプライアンスが応答を受信しない場合、要求タイムアウトアクションが実行されます。

ReqTimeoutアクション:可能な値は、バイパス、リセット、ドロップです。 BYPASS: これは、リモートICAPサーバーの応答を無視し、クライアント/サーバーに要求/応答を送信します。 RESET(デフォルト): クライアント接続を閉じてリセットします。 DROP: ユーザーに応答を送信せずにリクエストを削除する

ICAP 応答を評価するために、新しいポリシー式ICAP.RES がコンテンツインスペクションのコールアウトリターン式で使用されます。この式は、HTTP_CALLOUT内のHTTP.RES式と同様の ICAP 応答を評価します。

たとえば、Citrix ADCアプライアンスが、Citrix ADC仮想IPアドレスの背後にホストされるサービスに対するHTTPリクエストを受信した場合、アプライアンスは外部サーバーとのクライアントの認証をチェックし、アクションを実行しなければならない場合があります。

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

add ns icapProfile <name> [-preview ( ENABLED | DISABLED )][-previewLength <positive_integer>] -uri <string> [-hostHeader <string>] [-userAgent <string>] -Mode ( REQMOD | RESPMOD )[-queryParams <string>] [-connectionKeepAlive ( ENABLED | DISABLED )][-allow204 ( ENABLED | DISABLED )] [-insertICAPHeaders <string>][-insertHTTPRequest <string>] [-reqTimeout <positive_integer>][-reqTimeoutAction <reqTimeoutAction>] [-logAction <string>]

例:

add icapprofile reqmod-profile -mode RESPMOD -uri “/req_scan” -hostHeader “Webroot.reqsca” -useragent “NS_SWG-Proxy”

add ns icapProfile icap_prof1 -uri "/example" -Mode REQMOD -reqtimeout 4 -reqtimeoutaction BYPASS

> add icapProfile reqmode-profile -uri '/example' -mode REQMOD -insertHTTPRequest q{HTTP.REQ.METHOD + " " + HTTP.REQ.URL + " HTTP/1.1\r\n" + "Host: " + HTTP.REQ.HOSTNAME + "\r\n\r\n"}

ICAP コンテンツ検査アクションの記録

コンテンツ検査ログストリームレコードまたは SYSLOG ログを動的に生成するには、ICAP 応答で ICAP.RES ベースのポリシー式を使用できます。このパラメータは、ICAP プロファイルで構成して、動的ログレコードを生成するポリシー式を構成できます。

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

add audit messageaction icap_log_expr INFORMATIONAL icap.res.full_header

set icapProfile reqmode-profile -logAction messageaction

ICAP サービスを TCP サービスまたは SSL_TCP サービスとして追加する

コンテンツ検査機能を有効にした後、負荷分散セットアップの一部となる ICAP サーバーに ICAP サービスを追加する必要があります。追加するサービスによって、Citrix ADCアプライアンスと負荷分散仮想サーバー間のICAP接続が提供されます。

: 管理者は、ICAP サービスを追加し、コンテンツ検査アクションで ICAP サーバーの IP アドレスを直接構成できます。

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

add service <name> <IP> <serviceType> <port>

例:

add service icapsv1 10.10.10.10 SSL_TCP 1345

add service icapsv2 10.10.10.11 SSL_TCP 1345

TCPまたはSSL_TCPベースの負荷分散仮想サーバーの追加

ICAP サービスを作成したら、ICAP トラフィックを受け入れ、ICAP サーバーの負荷分散を行う仮想サーバーを作成する必要があります。

注:

また、SSL ベースの TCP サービスを、セキュリティで保護されたチャネル経由で使用することもできます。これを行うには、SSL_TCP サービスを使用し、コンテンツ検査アクションにバインドする必要があります。

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

add lb vserver <name> <serviceType> <port>

例:

add lb vserver vicap TCP 0.0.0.0.0 –persistenceType NONE -cltTimeout 9000

add lb vserver vicap SSL_TCP 0.0.0.0 0 –persistenceType NONE -cltTimeout 9000

負荷分散仮想サーバーにICAPサービスをバインドする

ICAP サービスと仮想サーバーを作成したら、ICAP サービスを仮想サーバーにバインドする必要があります。

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

bind lb vserver <name> <serviceName>

例:

bind lb vserver vicap icapsv1

コンテンツ検査アクションの追加

コンテンツ検査機能を有効にしたら、ICAP リクエスト情報を処理するための ICAP アクションを追加する必要があります。作成されたICAPプロファイルとサービス、または負荷分散仮想サーバーは、ICAPアクションにバインドされます。ICAP サーバーがダウンしている場合は、アプライアンスの ifserverdown パラメーターを構成して、次のいずれかのアクションを実行できます。

Continue:リモートサーバーがダウンしているときにユーザーがコンテンツ検査をバイパスしたい場合、デフォルトとして「Continue」アクションを選択できます。 RESET(デフォルト):このアクションは、RSTとの接続を閉じることによってクライアントに応答します。 DROP:このアクションは、ユーザーに応答を送信せずにパケットをサイレントにドロップします。

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

add contentInspection action <name> -type ICAP -serverName <string> -icapProfileName <string>

add ContentInspection action <name> -type ICAP -serverip <ip> - serverport <port> -icapProfileName <string>

注:

負荷分散仮想サーバーの代わりに ICAP サービスを構成できる場合は、\<-serverip> オプションでサービス名を記述できます。コンテンツ検査アクションを追加すると、TCP サービスはポート 1344 の指定された IP アドレスに対して自動的に作成され、ICAP 通信に使用されます。

例:

add ContentInspection action ci_act_lb -type ICAP -serverName vicap -icapProfileName icap_reqmod

add ContentInspection action ci_act_svc -type ICAP -serverName icapsv1 -icapProfileName icap_reqmod

add ContentInspection action ci_act_svc -type ICAP -serverip 1.1.1.1 - serverport 1344 -icapProfileName icap_reqmod

コンテンツ検査ポリシーの追加

コンテンツ検査アクションを作成したら、コンテンツ検査ポリシーを作成して、ICAP 処理と監査ロギングの要求を評価する必要があります。ポリシーは、1 つ以上の式で構成される規則に基づいています。ルールは、要求がルールに一致した場合に関連付けられるコンテンツインスペクションアクションに関連付けられます。

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

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

例:

add ContentInspection policy ci_pol_basic –rule true –action ci_act_svc

add ContentInspection policy ci_pol_HTTP –rule HTTP.REQ.URL.CONTAINS(“html”) –action ci_act_svc

コンテンツ検査ポリシーをコンテンツスイッチングまたは負荷分散仮想サーバーにバインドする

ICAP ポリシーを有効にするには、ICAP ポリシーをグローバルにバインドするか、アプリケーションのフロントエンドである Content Switching または負荷分散仮想サーバーにバインドする必要があります。ポリシーをバインドするときは、ポリシーに優先順位を割り当てる必要があります。優先順位によって、定義したポリシーが評価される順序が決まります。

注:

アプリケーション仮想サーバーのタイプは、HTTP/SSL/CS-PROXY である必要があります。

コンテンツ変換後にトラフィックをバックエンドオリジンサーバーに転送するための負荷分散設定の設定については、「負荷分散」を参照してください。

セキュリティで保護された ICAP サービスの構成

Citrix ADCアプライアンスとICAP Webサーバー間のセキュアな接続を確立するために、アプライアンスはSSLベースのTCPサービスまたはICAPアクションにバインドされた負荷分散仮想サーバーを使用します。

セキュリティで保護されたICAP接続を確立するには、次のタスクを実行します。

  1. SSL ベースの TCP サービスを追加します。
  2. SSL ベースの TCP サービスを、TCP または SSL_TCP タイプの仮想サーバの負荷分散にバインドします。
  3. SSL ベースの TCP サービスまたは負荷分散仮想サーバーをコンテンツ検査アクションにバインドします。

SSLベースのTCPサービスを仮想サーバーの負荷分散に追加する

Citrix ADCアプライアンスとICAP Webサーバー間のセキュアな接続を確立するために、アプライアンスはSSLベースのTCPサービスまたはICAPアクションにバインドされた負荷分散仮想サーバーを使用します。

セキュリティで保護されたICAP接続を確立するには、次のタスクを実行します。

  1. SSL ベースの TCP サービスを追加します。
  2. SSL ベースの TCP サービスを、TCP または SSL_TCP タイプの仮想サーバの負荷分散にバインドします。

SSL ベースの TCP サービスまたは負荷分散仮想サーバーをコンテンツ検査アクションにバインド

SSLベースのTCPサービスを仮想サーバーの負荷分散に追加する

コンテンツ検査機能を有効にした後、負荷分散セットアップの一部となるセキュリティで保護された ICAP サービスを追加する必要があります。追加するサービスにより、Citrix ADCアプライアンスと負荷分散仮想サーバー間のセキュアなICAP接続が提供されます。

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

add service <name> <IP> <serviceType> <port>

例:

add service icapsv2 10.102.29.200 SSL_TCP 1344 –gslb NONE –maxclient 0 –maxReq 0 –cip DISABLED –usip NO –useproxport YES –sp ON –cltTimeout 9000 –svrTimeout 9000 –CKA NO –TCPB  NO –CMP NO

SSL_TCPまたはTCP負荷分散仮想サーバーにSSL_TCPベースのTCPサービスをバインドします

セキュリティで保護された ICAP サービスを作成したら、サービスを負荷分散仮想サーバーにバインドする必要があります (負荷分散仮想サーバーを使用して ICAP サーバーの負荷分散を行う場合)。

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

bind lb vserver <name> <serviceName>

例:

bind lb vserver vicap icapsv2

SSL ベースの TCP サービスまたは負荷分散仮想サーバーをコンテンツ検査アクションにバインドする

ICAP 要求情報を処理するための ICAP アクションを追加し、SSL ベースの TCP サービスをアクションにバインドする必要があります。

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

add contentInspection action <name> -type ICAP -serverName <string> -icapProfileName <string>

例:

add ContentInspection action ci_act_svc -type ICAP -serverName icapsv2 -icapProfileName icap_reqmod

add ContentInspection action ci_act_svc -type ICAP -serverName vicap -icapProfileName icap_reqmod

GUI を使用して ICAP プロトコルを構成する

  1. [負荷分散] > [サービス] に移動し、[追加] をクリックします。
  2. [サービス] ページで、サービスの詳細を入力します。
  3. [負荷分散] > [仮想サーバー] に移動します。HTTP/SSL タイプの負荷分散仮想サーバーを追加します。または、仮想サーバーを選択して [編集] をクリックすることもできます。
  4. サーバーの基本情報を入力したら、[Continue] をクリックします。
  5. [詳細設定] セクションで、[ポリシー] をクリックします。
  6. [ポリシー] セクションに移動し、[鉛筆] アイコンをクリックして、コンテンツ検査ポリシーを設定します。
  7. [ポリシーの選択] ページで、[コンテンツ検査] を選択します。[続行] をクリックします。
  8. [ポリシーのバインド] セクションで、[+] をクリックしてコンテンツ検査ポリシーを追加します。
  9. ICAP ポリシーの作成 ページで、ポリシーの名前を入力します。
  10. [アクション] フィールドで、[+] 記号をクリックして ICAP アクションを追加します。
  11. ICAP アクションの作成 」ページで、アクションの名前を入力します。
  12. アクションの名前を入力します。
  13. [Server Name] フィールドに、すでに作成されている TCP サービスの名前を入力します。
  14. ICAPプロファイル 」フィールドで、「+」記号をクリックしてICAPプロファイルを追加します。
  15. ICAPプロファイルの作成 」ページで、プロファイル名、URI、およびモードを入力します。
  16. [作成] をクリックします。
  17. ICAPアクションの作成 」ページで、「 作成 」をクリックします。
  18. ICAP ポリシーの作成 ページで、 式エディター に「true」と入力し、「 作成 」をクリックします。
  19. [バインド] をクリックします。
  20. コンテンツ検査機能を有効にするかどうかを確認するメッセージが表示されたら、[はい] をクリックします。
  21. [完了] をクリックします。

コンテンツの変換後にトラフィックの負荷分散とバックエンドオリジンサーバーへの転送を行うためのCitrix ADC GUI構成については、負荷分散を参照してください。

GUI を使用してセキュリティで保護された ICAP プロトコルを構成する

  1. [負荷分散] > [サービス] に移動し、[追加] をクリックします。
  2. [サービス] ページで、サービスの詳細を入力します。
  3. [負荷分散] > [仮想サーバー] に移動します。HTTP/SSL タイプの仮想サーバーを追加します。または、仮想サーバーを選択して [編集] をクリックすることもできます。
  4. サーバーの基本情報を入力したら、[Continue] をクリックします。
  5. [詳細設定] セクションで、[ポリシー] をクリックします。
  6. [ポリシー] セクションに移動し、[鉛筆] アイコンをクリックして、コンテンツ検査ポリシーを設定します。
  7. [ポリシーの選択] ページで、[コンテンツ検査] を選択します。[続行] をクリックします。
  8. [ポリシーのバインド] セクションで、[+] をクリックしてコンテンツ検査ポリシーを追加します。
  9. ICAP ポリシーの作成 ページで、ポリシーの名前を入力します。
  10. [アクション] フィールドで、[+] 記号をクリックして ICAP アクションを追加します。
  11. ICAP アクションの作成 」ページで、アクションの名前を入力します。
  12. アクションの名前を入力します。
  13. サーバー名」 フィールドに、すでに作成されているTCP_SSLサービスの名前を入力します。
  14. ICAPプロファイル 」フィールドで、「+」記号をクリックしてICAPプロファイルを追加します。
  15. ICAPプロファイルの作成 」ページで、プロファイル名、URI、およびモードを入力します。
  16. [作成] をクリックします。
  17. ICAPアクションの作成 」ページで、「 作成 」をクリックします。
  18. ICAP ポリシーの作成 ページで、 式エディター に「true」と入力し、「 作成 」をクリックします。
  19. [バインド] をクリックします。
  20. コンテンツ検査機能を有効にするかどうかを確認するメッセージが表示されたら、[はい] をクリックします。
  21. [完了] をクリックします。

リモートコンテンツ検査のための監査ログのサポート

着信要求または発信応答がコンテンツ検査された場合、Citrix ADCアプライアンスはICAPの詳細を記録します。アプライアンスは、詳細をログ・メッセージとしてns.logファイルに保存します。

各ログメッセージには、通常、次の詳細が含まれます。

<Source IP> <Destination IP> <Domain> <ICAP server IP><ICAP Mode> <Service URI> <ICAP response> <Policy action>

コンテンツ検査要求ログメッセージの例:

Apr 18 14:45:41 <local0.info> 10.106.97.104 04/18/2018:14:45:41 GMT 0-PPE-0 : default CI ICAP_LOG 788 0 : Source 10.102.1.98:39048 - Destination 10.106.97.89:8011 - Domain 10.106.97.89 - Content-Type application/x-www-form-urlencoded - ICAP Server 10.106.97.99:1344 - Mode REQMOD - Service /example - Response 204 - Action FORWARD

コンテンツ検査された応答ログメッセージの例:

Apr 18 12:34:08 <local0.info> 10.106.97.104 04/18/2018:12:34:08 GMT 0-PPE-0 : default CI ICAP_LOG 71 0 : Source 10.106.97.105:18552 - Destination 10.106.97.99:80 - Domain NA - Content-Type NA - ICAP Server 10.106.97.99:1344 - Mode RESPMOD - Service /example - Response 400 - Action Internal Error