Citrix ADC

ICAP 用于远程内容检查

互联网内容适应协议 (ICAP) 是一种简单的轻量级协议,用于在 HTTP 消息上运行增值转换服务。在典型场景中,ICAP 客户端将 HTTP 请求和响应转发到一个或多个 ICAP 服务器进行处理。ICAP 服务器对请求执行内容转换,并通过对请求或响应采取的适当操作发回响应。

Citrix ADC 设备上的 ICAP

在 Citrix ADC 设置中,设备充当与第三方 ICAP 服务器(例如反恶意软件和数据丢失保护 (DLP))互操作的 ICAP 客户端。当设备收到传入的 Web 流量时,设备会拦截流量,并使用内容检查策略评估 HTTP 请求是否需要 ICAP 处理。如果是,设备将解密消息并以纯文本形式发送到 ICAP 服务器。ICAP 服务器在请求消息上运行内容转换服务,并将响应发送回设备。改编后的消息可以是 HTTP 请求或 HTTP 响应。如果设备与多个 ICAP 服务器互操作,则设备将执行 ICAP 服务器的负载平衡。当一个 ICAP 服务器不足以处理所有流量负载时,就会发生这种情况。ICAP 服务器返回修改后的消息后,设备会将修改后的消息转发到后端源服务器。

如果传入流量为 HTTPS 类型,Citrix ADC 设备还会提供安全的 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 功能适用于具有 Citrix ADC 高级版或高级许可证版的 Citrix ADC 独立版或高可用性设置。

为内容转换服务配置 ICAP

要将 ICAP 用于内容转换服务,必须首先启用内容检查和负载平衡功能。启用这些功能后,您可以完成以下任务

启用内容检查

如果希望 Citrix ADC 设备充当 ICAP 客户端,则必须先启用内容检查和负载平衡功能。

在命令提示符下,键入:

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

添加 ICAP 个人资料

Citrix ADC 设备的 ICAP 配置是在名为 ICAP 配置文件的实体中指定的。配置文件具有 ICAP 设置的集合。这些设置包括用于动态生成 ICAP 请求、接收 ICAP 响应和记录内容审查数据的参数。

为了动态生成向 ICAP 服务器发出 ICAP 请求,在 ICAP 配置文件中添加了一个新参数“inserthttPrequest”。如果配置了此参数,设备会将配置的值作为策略表达式并评估表达式,并将结果包含为封装的 HTTP 请求或响应,然后将其发送到 ICAP 服务器。此外,可以配置一个新参数“insertICAPHeaders”,以动态评估和包含 ICAP 标头。

当设备发送 ICAP 请求但未收到 ICAP 服务器的响应时,连接将变得无响应。它一直持续到 ICAP 服务器发送响应或释放会话为止。可以通过配置 ICAP 响应超时选项来处理该行为。如果 ICAP 响应延迟,您可以为操作设置请求超时参数。如果 Citrix ADC 设备在配置的请求超时内未收到响应,则会执行请求超时操作。

reqTimeoutAction:可能的值包括旁路、重置、丢弃。 BYPASS: 这将忽略远程 ICAP 服务器的响应,并将请求/响应发送到客户端/服务器。 RESET(默认): 通过关闭客户端连接来重置。 DROP: 在不向用户发送响应的情况下删除请求

为了评估 ICAP 响应,在内容检查标注返回表达式 ICAP.RES 中使用了新的策略表达式。此表达式计算的 ICAP 响应与 HTTP_CALLOUT 中的 HTTP.RES 表达式类似。

例如,当 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 处理和审核日志记录的请求。策略基于由一个或多个表达式组成的规则。如果请求与规则匹配,则该规则与关联的内容检查操作相关联。

在命令提示符处,键入以下内容:

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. 在“服务器名”字段中,输入已创建的 TCP 服务的名称。
  14. ICAP 配置文件字段中,单击“+”号以添加 ICAP 配置文件。
  15. 创建 ICAP 配置文件页面中,输入配置文件名称、URI 和模式。
  16. 单击创建
  17. 创建 ICAP 操作页中,单击创建
  18. 创建 ICAP 策略页中,在表达式编辑器中输入“true”,然后单击创建
  19. 单击 Bind(绑定)。
  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 和模式。
  16. 单击创建
  17. 创建 ICAP 操作页中,单击创建
  18. 创建 ICAP 策略页中,在表达式编辑器中输入“true”,然后单击创建
  19. 单击 Bind(绑定)。
  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-->