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アプライアンスはHTTP応答をICAPサーバーに送信します(アプライアンスによって送信される応答は通常、オリジンサーバーから送信された応答です)。次に、ICAP サーバーは次のいずれかを実行します。

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

ICAP ライセンス

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

コンテンツ変換サービスのICAPを構成する

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

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

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

コマンドプロンプトで入力します。

enable ns feature contentInspection LoadBalancing
<!--NeedCopy-->

ICAP プロファイルを追加

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

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

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

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

ICAP 応答を評価するために、コンテンツ検査コールアウト戻り値式で新しいポリシー式ICAP.RESが使用されます。この式は、HTTP_CALLOUTHTTP.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>
<!--NeedCopy-->

例:

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>
<!--NeedCopy-->

例:

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
<!--NeedCopy-->

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

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

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

bind lb vserver <name> <serviceName>
<!--NeedCopy-->

例:

bind lb vserver vicap icapsv1
<!--NeedCopy-->

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

コンテンツ検査機能を有効にしたら、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>
<!--NeedCopy-->

注:

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

コンテンツ検査ポリシーを追加する

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

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

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

例:

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
<!--NeedCopy-->

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

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

注:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

add service <name> <IP> <serviceType> <port>
<!--NeedCopy-->

例:

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
<!--NeedCopy-->

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

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

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

bind lb vserver <name> <serviceName>
<!--NeedCopy-->

例:

bind lb vserver vicap icapsv2
<!--NeedCopy-->

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

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

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

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

例:

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
<!--NeedCopy-->

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

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

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

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

  1. 負荷分散 > サービスに移動し追加をクリックします
  2. [ サービス ] ページで、サービスの詳細を入力します。
  3. [ 負荷分散 ] > [ 仮想サーバー] に移動します。HTTP/SSL タイプの仮想サーバーを追加します。または、仮想サーバーを選択して [ 編集] をクリックすることもできます
  4. サーバーの基本情報を入力したら、[ 続行] をクリックします。
  5. [詳細設定] セクションで、[ ポリシー] をクリックします。
  6. [ ポリシー ] セクションに移動し、 鉛筆アイコンをクリックして 、コンテンツ検査ポリシーを設定します。
  7. [ポリシーの選択] ページで、[ コンテンツ検査] を選択します。[続行] をクリックします。
  8. [ ポリシーバインディング ] セクションで、[ + ] をクリックしてコンテンツ検査ポリシーを追加します。
  9. [ICAP ポリシーの作成 ] ページで、ポリシーの名前を入力します。
  10. [ アクション ] フィールドで、[+] 記号をクリックして ICAP アクションを追加します。
  11. [ICAP アクションの作成 ] ページで、アクションの名前を入力します。
  12. アクションの名前を入力します。
  13. サーバー名 」フィールドに、作成済みのTCP_SSLサービスの名前を入力します。
  14. [ ICAP プロファイル ] フィールドで、[+] 記号をクリックして ICAP プロファイルを追加します。
  15. [ ICAP プロファイルの作成 ] ページで、プロファイル名、URI、および MODE を入力します。
  16. [Create] をクリックします。
  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>
<!--NeedCopy-->

制限:App Firewall のストリーミングモードは、コンテンツ検査機能ではサポートされていません。

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

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
<!--NeedCopy-->

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

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
<!--NeedCopy-->