Citrix ADC

配置重写策略

创建任何所需的重写操作后,必须至少创建一个重写策略才能选择希望 Citrix ADC 设备重写的请求。

重写策略由规则组成,规则本身由一个或多个表达式组成。以及在请求或响应与规则匹配时完成的相关操作。评估 HTTP 请求和响应的策略规则可以基于请求或响应的几乎任何部分。

除了 TCP 有效负载之外,您不能使用 TCP 重写操作来重写其他数据。您可以根据传输层中的信息制定 TCP 重写策略的策略规则。还有传输层下面的层。

如果配置的规则与请求或响应匹配,则会触发相应的策略并执行关联的操作。

注意: 您可以使用命令行界面或配置实用程序创建和配置重写策略。对命令行界面和 Citrix ADC 策略表达式语言不完全熟悉的用户通常会发现使用配置实用程序容易得多。

使用命令行界面添加新的重写策略

在命令提示符处,键入以下命令以添加新的重写策略并验证配置:

  • <add rewrite policy <name> <expression> <action> [<undefaction>]
  • <show rewrite policy <name>

示例 1. 重写 HTTP 内容


> add rewrite policy policyNew "HTTP.RES.IS_VALID" insertact NOREWRITE
 Done
> show rewrite policy policyNew
        Name: policyNew
        Rule: HTTP.RES.IS_VALID
        RewriteAction: insertact
        UndefAction: NOREWRITE
        Hits: 0
        Undef Hits: 0

 Done
<!--NeedCopy-->

示例 2. 重写 TCP 有效负载(TCP 重写)

> add rewrite policy client_tcp_payload_policy CLIENT.IP.SRC.EQ(172.168.12.232) client_tcp_payload_replace_all
 Done
> show rewrite policy client_tcp_payload_policy
        Name: client_tcp_payload_policy
        Rule: CLIENT.IP.SRC.EQ(172.168.12.232)
        RewriteAction: client_tcp_payload_replace_all
        UndefAction: Use Global
        LogAction: Use Global
        Hits: 0
        Undef Hits: 0

 Done
>
<!--NeedCopy-->

使用命令行界面修改现有的重写策略

在命令提示符处,键入以下命令以修改现有的重写策略并验证配置:

  • <set rewrite policy <name>-rule <expression-action <action> [<undefaction>]
  • <show rewrite policy <name>

例如


> set rewrite policy policyNew -rule "HTTP.RES.IS_VALID" -action insertaction
 Done

> show rewrite policy policyNew
        Name: policyNew
        Rule: HTTP.RES.IS_VALID
        RewriteAction: insertaction
        UndefAction: NOREWRITE
        Hits: 0
        Undef Hits: 0

 Done
<!--NeedCopy-->

使用命令行界面删除重写策略

在命令提示符处,键入以下命令以删除重写策略:

rm rewrite policy <name>

例如


> rm rewrite policy policyNew
Done
<!--NeedCopy-->

使用配置实用程序配置重写策略

  1. 导航到 AppExpert > Rewrite(重写)> Policies(策略)
  2. 在详细信息窗格中,执行以下操作之一:
    • 要创建策略,请单击 Add(添加)。
    • 要修改现有策略,请选择该策略,然后单击打开。
  3. 单击 Create(创建)或 OK(确定)。状态栏中将显示一条消息,指出已成功配置策略。
  4. 重复步骤 2 到 4,根据需要创建或修改任意数量的重写操作。
  5. 单击关闭要删除重写策略,请选择要删除的重写策略,然后单击 “删除,然后在提示时单击 “确定” 确认您的选择。

为内容安全标头、XSS 保护、HSTS、X 内容类型选项和内容安全策略创建重写策略

在命令提示符处,键入以下重写操作命令,将安全标头添加到使用重写通过 NetScaler 提供的网页中。

add rewrite action insert_STS_header insert_http_header Strict-Transport-Security ""max-age=157680000""
add rewrite action rw_act_insert_XSS_header insert_http_header X-Xss-Protection ""1; mode=block""
add rewrite action rw_act_insert_Xcontent_header insert_http_header X-Content-Type-Options ""nosniff""
add rewrite action rw_act_insert_Content_security_policy insert_http_header Content-Security-Policy ""default-src 'self' ; script-src 'self' 'unsafe-inline' 'unsafe-eval' ; style-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' data:""
<!--NeedCopy-->

在命令提示符处,键入以下重写策略命令,将安全标头添加到使用重写通过 NetScaler 提供的网页中。

add rewrite policy enforce_STS true insert_STS_header
add rewrite policy rw_pol_insert_XSS_header "HTTP.RES.HEADER("X-Xss-Protection").EXISTS.NOT" rw_act_insert_XSS_header
add rewrite policy rw_pol_insert_XContent TRUE rw_act_insert_Xcontent_header
add rewrite policy rw_pol_insert_Content_security_policy TRUE rw_act_insert_Content_security_policy
<!--NeedCopy-->

在命令提示符处,键入以下命令,使用 Goto Expression NEXT 将策略绑定到响应上的虚拟服务器。

bind vpn vserver access -policy enforce_STS -priority 100 -gotoPriorityExpression NEXT -type RESPONSE
bind vpn vserver "VSERVERNAME" -policy rw_pol_insert_XSS_header -priority 110 -gotoPriorityExpression NEXT -type RESPONSE
bind vpn vserver access -policy rw_pol_insert_XContent -priority 120 -gotoPriorityExpression NEXT -type RESPONSE
bind vpn vserver access -policy rw_pol_insert_Content_security_policy -priority 130 -gotoPriorityExpression NEXT -type RESPONSE
<!--NeedCopy-->

使用配置实用程序为内容安全标头、XSS 保护、HSTS、X 内容类型选项和内容安全策略配置重写策略

  1. 导航到 AppExpert > 重写 > 操作
  2. 单击 “ 添加 ” 为每个标头创建重写操作。
  3. 导航到 AppExpert > 重写 > 策略
  4. 单击 添加 创建重写策略并将其链接到操作。
  5. 使用 Goto 表达式 NEXT将策略绑定到响应上的虚拟服务器。

注意: 在 SSLVPN 中,我们需要使用以下内容安全操作:

add rewrite action Rewrite_Insert_Content-Security-Policy insert_http_header Content-Security-Policy ""default-src 'self' ; script-src 'self' 'unsafe-inline' 'unsafe-eval' ; style-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' http://localhost:* data:;"
<!--NeedCopy-->

本地主机例外是必需的,因为浏览器使用 localhost HTTP 调用将 cookie /GW 信息传递给插件。由于 CSP 只有 “self”,因此只允许调用虚拟服务器。