Citrix ADC

重写

重写

警告:

使用经典策略的过滤器特性已被弃用,作为替代方案,Citrix建议您使用带有高级策略基础结构的重写和响应器特性。

重写是指重写Citrix ADC设备处理的请求或响应中的某些信息。重写可以帮助您访问所请求的内容,而不会暴露有关网站实际配置的不必要细节。重写特性在以下几种情况下是有用的:

  • 为了提高安全性,Citrix ADC可以重写所有的http://linkshttps://在响应体中。

  • 在SSL卸载部署中,响应中的不安全链路必须转换为安全链路。使用重写选项,可以重写所有http://linkshttps://确保从Citrix ADC发送到客户端的响应具有安全链路。

  • 如果网站必须显示错误页面,则可以显示自定义错误页面,而不是默认的404错误页面。例如,如果您显示的是网站的主页或网站地图,而不是错误页面,访问者将继续留在网站上,而不是离开网站。

  • 如果你想启动一个新网站,但使用旧的URL,你可以使用重写选项。

  • 当网站中的一个主题有一个复杂的URL时,你可以用一个简单、容易记住的URL重写它(也称为“酷URL”)。

  • 您可以将默认页面名称附加到网站的URL。例如,如果公司网站的默认页面为http://www.abc.com/index.php,当用户在浏览器地址栏输入“abc.com”时,可以将URL改写为“abc.com/index.php”。

启用重写功能后,Citrix ADC可以修改HTTP请求和响应的头部和正文。

要重写HTTP请求和响应,可以在配置的重写策略中使用支持协议的Citrix ADC策略表达式。管理HTTP请求和响应的虚拟服务器必须是HTTP或SSL类型。在HTTP流量中,可以执行以下操作:

  • 修改请求的URL
  • 添加、修改或删除标头
  • 在正文或标题中添加、替换或删除任何特定字符串。

要重写TCP有效负载,可以将有效负载视为原始字节流。管理TCP连接的每个虚拟服务器必须是TCP或SSL_TCP类型的。术语TCP重写用于指重写不是HTTP数据的TCP有效负载。在TCP流量中,您可以添加、修改或删除TCP有效负载的任何部分。

有关使用重写功能的示例,请参见重写动作和策略示例

重写和响应器选项之间的比较

重写特性和响应器特性的主要区别如下:

Responder不能用于响应或基于服务器的表达式。根据客户端参数的不同,Responder只能用于以下场景:

  • 将HTTP请求重定向到新的网站或网页
  • 使用一些自定义响应进行响应
  • 在请求级别删除或重置连接

如果存在响应器策略,Citrix ADC将检查来自客户端的请求,根据适用的策略采取操作,将响应发送给客户端,并关闭与客户端的连接。

如果存在重写策略,Citrix ADC将检查来自客户端的请求或来自服务器的响应,根据适用的策略采取操作,并将流量转发到客户端或服务器。

一般情况下,如果您希望Citrix ADC根据客户端或基于请求的参数重置或删除连接,建议使用响应器。使用响应器重定向通信,或使用自定义消息进行响应。使用重写操作HTTP请求和响应上的数据。

重写如何工作

重写策略由规则和操作组成。规则决定了应用重写的流量,动作决定了Citrix ADC采取的动作。可以定义多个重写策略。对于每个策略,指定绑定点和优先级。

绑定点是指流量流中的一个点,Citrix ADC在这个点上检查流量,以验证是否可以将任何重写策略应用于该流量。您可以将策略绑定到特定的负载均衡或内容切换虚拟服务器,如果希望策略应用于Citrix ADC处理的整个流量,则可以将策略设置为全局策略。这些策略被称为全局策略。

除了用户定义的策略外,Citrix ADC还有一些默认策略。默认策略不能修改或删除。

为了评估策略,Citrix ADC遵循以下顺序:

  • 全球政策
  • 绑定到特定虚拟服务器的策略
  • 默认策略

注意:

Citrix ADC只有绑定到某个点时才能应用重写策略。

Citrix ADC实现重写特性的步骤如下:

  • Citrix ADC设备检查全局策略,然后检查各个绑定点上的策略。

  • 如果多个策略绑定到一个绑定点,Citrix ADC将按照优先级顺序计算这些策略。优先级最高的策略首先进行评估。在评估每个策略之后,如果策略被评估为TRUE,它将添加与执行关联操作的策略相关联的操作。当策略规则中指定的特征与正在评估的请求或响应的特征相匹配时,就会发生匹配。

  • 对于任何策略,除了操作之外,还可以指定在评估当前策略之后必须评估的策略。这个策略被称为“Go to Expression”。对于任何策略,如果指定了Go to Expression (gotoPriorityExpr), Citrix ADC将计算Go to Expression策略。它会忽略优先级次之的策略。

    您可以指定策略的优先级来指示Go to Expression策略;不能使用策略的名称。如果您希望Citrix ADC在评估特定策略后停止评估其他策略,可以将Go to表达式设置为“END”。

  • 在评估所有策略之后,或者当策略的Go to Expression设置为END时,Citrix ADC开始根据操作列表执行操作。

有关配置重写策略的详细信息,请参见配置重写策略关于绑定重写策略,请参见绑定重写策略

下图说明了当使用重写特性时,Citrix ADC如何处理请求或响应。

图1。重写过程

图像

政策评估

优先级最高的策略首先进行评估。Citrix ADC在发现匹配时不会停止重写策略的评估。它评估Citrix ADC上配置的所有重写策略。

  • 如果策略计算结果为TRUE, Citrix ADC将遵循以下过程:
    • 如果策略的Go to Expression设置为END, Citrix ADC将停止计算所有其他策略并开始执行重写。
    • gotoPriorityExpression可以设置为' NEXT ', ' END ',一些整数或' INVOCATION_LIST '。该值决定下一个优先级的策略。下表显示了Citrix ADC对表达式的每个值所采取的操作。

      表达式的值 行动
      下一个 计算具有下一个优先级的策略。
      结束 停止评估策略。
      <一个整数> 计算具有指定优先级的策略。
      INVOCATION_LIST 根据调用列表的结果应用Goto NEXT或END。
  • 如果策略计算为FALSE, Citrix ADC将按照优先级顺序继续计算。
  • 如果策略评估为UNDEFINED(由于错误而无法对接收的流量进行评估),Citrix ADC将执行分配给UNDEFINED条件的操作(称为undefAction),并停止对策略的进一步评估。

Citrix ADC只有在评估完成后才开始实际的重写。它引用被赋值为TRUE的策略标识的操作列表,并开始重写。在实现列表中的所有动作之后,Citrix ADC将根据需要转发流量。

注意:

确保策略没有在HTTP报头或正文或TCP有效负载的同一部分指定冲突或重叠的操作。当发生这种冲突时,Citrix ADC将遇到未定义的情况并终止重写。

重写操作

在Citrix ADC设备上,指定要采取的操作,例如在主体中添加、替换或删除文本,或添加、修改或删除标头,或将TCP有效负载中的任何更改指定为重写操作。有关重写操作的详细信息,请参见配置重写操作

下表描述了当策略计算为TRUE时,Citrix ADC可以采取的步骤。

行动 结果
插入 执行为策略指定的重写操作。
NOREWRITE 请求或响应不会被重写。Citrix ADC转发流量而不重写消息的任何部分。
重置 在TCP级别终止连接。
下降 消息被删除。

请注意

对于任何策略,您都可以将不足操作(策略计算为UNDEFINED时所采取的操作)配置为NOREWRITE、RESET或DROP。

要使用重写功能,请执行以下步骤:

  • 在Citrix ADC上启用该特性。
  • 定义重写操作。
  • 定义重写策略。
  • 将策略绑定到绑定点以使策略生效。

使重写

如果您想重写HTTP或TCP请求或响应,则在Citrix ADC设备上启用重写特性。如果启用了该特性,Citrix ADC将根据指定的策略执行重写操作。有关更多信息,请参见重写如何工作

使用命令行接口启用重写功能

在命令提示符下,输入以下命令来启用重写功能并验证配置:

  • 启用ns特性重写
  • 显示ns功能

例子:

> enable ns feature REWRITE Done > show ns feature feature Acronym Status ------- ------- ------ 1) Web Logging WL OFF 2) Surge Protection SP ON…1)重写。1) Citrix ADC Push Push OFF Done 

使用GUI启用重写功能

  1. 2 .在导航区单击系统,然后按设置
  2. 在详细信息窗格中,在“模式和功能”下,单击配置基本特性
  3. 配置基本特性对话框,选择“重写”复选框,然后单击好吧
  4. 启用/禁用功能(年代)对话框,单击是的.状态栏中出现一条消息,说明所选特性已启用。

配置重写操作

警告

从Citrix ADC 12.0 build 56.20开始,重写操作中的Pattern函数已弃用,作为替代,Citrix建议您使用搜索重写操作参数。

重写操作指示在将请求或响应发送到服务器或客户端之前对其进行的更改。

表达式定义如下:

  • 重写动作类型。

  • 重写操作的位置。

  • 重写动作配置类型。

例如,DELETE操作只使用目标表达式。REPLACE操作使用一个目标表达式和一个表达式来配置替换文本。

启用重写功能后,您需要配置一个或多个操作,除非内置的重写操作足够。所有内置操作的名称都以字符串ns_cvpn开头,后面跟着一串字母和下划线。内置动作执行有用且复杂的任务,如解码无客户端VPN请求或响应的部分内容或修改JavaScript或XML数据。内置操作可以被查看、启用和禁用,但不能被修改或删除。

注意:

方法中标识只能用于HTTP重写的操作类型重写动作类型列。

有关更多信息,请参见类型参数

使用命令行界面创建重写操作

在命令提示符下,键入以下命令来创建一个重写操作并验证配置:

  • 添加重写动作 [] [-search <表达式>][refineSearch <表达式>][-comment]
  • 显示重写操作

有关更多信息,请参见重写动作类型及其参数表格

重写功能有以下内置动作:

  • norewrite -将请求或响应发送给用户而不重写它。

  • RESET—重置连接并通知用户的浏览器,以便用户可以重新发送请求。

  • DROP -断开连接,不向用户发送响应。

以下流类型之一与每个操作隐式关联:

  • Request - Action应用于请求。

  • Response -操作应用于响应。

  • 中性——动作同时适用于请求和响应。

的名字

用户定义的重写操作的名称。首字符必须为字母、数字或_,只能包含字母、数字、“-”、“。”、“#”、空格、“@”、“=”、“:”和下划线。可以在添加重写策略后更改。

类型参数

类型参数显示用户定义的重写操作的类型。

的值类型参数:

  • 替换 .用字符串构建器表达式替换字符串。

例子

替换http.res.body(100)“new_replaced_data”Done > sh重写动作replace_http_act名称:replace_http_act操作:替换目标:http.res.body(100)值:new_replaced_data Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 
  • REPLACE_ALL -(search) .指定的请求或响应中<目标>所定义的字符串的所有出现项< string_builder_expr1 >定义的字符串< string_builder_expr2 >.您可以使用搜索工具来查找要替换的字符串。

例子

> add policy patset pat_list_2 Done > bind policy patset pat_list_2 "www.abc.com" Done > bind policy patset pat_list_2 "www.def.com" Done > add rewrite action refineSearch_act_31 replace_all "HTTP.RES.BODY(100000)"https:// \“\”搜索“patset(\“pat_list_2 \”)”-refineSearch”扩展(7,0).REGEX_SELECT (re # http://)”Done > sh rewrite action refineSearch_act_31名称:refineSearch_act_31操作:replace_all目标:HTTP.RES.BODY(100000)细化搜索:EXTEND(7,0).REGEX_SELECT(re#http://#)值:"https://"搜索:patset("pat_list_2") Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 
  • REPLACE_HTTP_RES < string_builder_expr >.用字符串构建器表达式定义的字符串替换完整的HTTP响应。

例子

>添加重写动作replace_http_res_act replace_http_res '"HTTP/1.1 200 OK\r\n\r\nSending from ADC"' Done > sh重写动作replace_http_res_act名称:replace_http_res_act操作:replace_http_res目标:"HTTP/1.1 200 OK Sending from ADC" Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 
  • REPLACE_SIP_RES <目标>.属性指定的字符串替换完整的SIP响应<目标>

例子

> add rewrite action replace_sip_res_act replace_sip_res '"HTTP/1.1 200 OK\r\n\r\nSending from ADC"' Done > sh rewrite action replace_sip_res_act Name: replace_sip_res_act Operation: replace_sip_res Target:"HTTP/1.1 200 OK Sending from ADC" Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 
  • INSERT_HTTP_HEADER .插入指定的HTTP报头< header_string_builder_expr >所指定的头内容< contents_string_builder_expr >.

例子

>添加重写动作ins_cip_header "CIP" "CLIENT.IP. "年代RC" Done > sh rewrite action ins_cip_header Name: ins_cip_header Operation: insert_http_header Target:CIP Value:CLIENT.IP.SRC Hits: 0 Undef Hits: 0 Action Reference Count: 0 Done 
  • DELETE_HTTP_HEADER <目标>.删除指定的HTTP报头<目标>

例子

> add重写动作del_true_client_ip_header delete_http_header "True-Client-IP" Done > sh重写动作del_true_client_ip_header名称:del_true_client_ip_header操作:delete_http_header目标:True-Client-IP Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 
  • CORRUPT_HTTP_HEADER <目标>.属性所指定的HTTP头的所有出现的头名<目标>例如:MY_HEADER被更改为MHEY_ADER。

例子

> add重写动作corrupt_content_length_hdr corrupt_http_header "Content-Length" Done > sh重写动作corrupt_content_length_hdr名称:corrupt_content_length_hdr操作:corrupt_http_header目标:Content-Length Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 
  • INSERT_BEFORE .中指定的字符串< string_builder_expr1 >并插入字符串< string_builder_expr2 >在这之前。
添加重写动作insert t_before_ex_act (100)Done > sh重写动作insert_before_ex_act名称:insert_before_ex_act操作:insert_before目标:http.res.body(100)值:"Add this string in the starting" Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 
  • INSERT_BEFORE_ALL -(search) .指定的请求或响应中<目标>中指定的字符串的所有出现位置< string_builder_expr1 >中指定的字符串< string_builder_expr2 >在这之前。您可以使用搜索工具来查找字符串。

例子

> add policy patset pat Done > bind policy patset pat abcd Done > add rewrite action refineSearch_act_1 insert_before_all http.res.body(10)' Target .prefix(10) + "refineSearch_testing" -search patset("pat") - refinesearch_extend ("pat") Done > sh重写动作refineSearch_act_1名称:refineSearch_act_1操作:insert_before_all目标:http.res.body(10)细化搜索:extend(" 10,10 ")值:Target .prefix(10) + "refineSearch_testing"搜索:patset("pat") Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 
  • INSERT_AFTER .中指定的字符串< string_builder_expr1 >中指定的字符串< string_builder_expr2 >在它。* * * *例子:
添加重写动作'"add this string after 100 bytes"' Done > sh rewrite action insert_after_act名称:insert_after_act操作:insert_after目标:http.req.body(100)值:"add this string after 100 bytes" Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 
  • INSERT_AFTER_ALL -(search) .指定的请求或响应中<目标>指定的字符串的所有出现位置< string_builder_expr1 >并插入指定的字符串< string_builder_expr2 >在每一个。您可以使用搜索工具来查找字符串。

例子

>添加重写动作refineSearch_act_2 insert_after_all http.res.body(100)'"refineSearch_testing" -search text("abc") - refinesearchextend (0,10) Done > sh重写动作refineSearch_act_2名称:refineSearch_act_2操作:insert_after_all目标:http.res.body(100)细化搜索:extend(0,10)值:"refineSearch_testing"搜索:text("abc") Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 
  • 删除<目标>.查找并删除指定的目标器。

例子

> add重写动作delete_ex_act delete http.req.header("HDR") Done > sh重写动作delete_ex_act名称:delete_ex_act操作:delete目标:http.req.header("HDR") Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 
  • DELETE_ALL -(search) .指定的请求或响应中<目标>,查找并删除所指定字符串的所有出现项< string_builder_expr >.您可以使用搜索工具来查找字符串。

例子

>添加重写动作refineSearch_act_4 delete_all "HTTP.RES.BODY(50000)"搜索文本(“Windows桌面”)-refineSearch“扩展(40、40).REGEX_SELECT (re # \ \‘*’s < AppData >。* \ \年代‘*’< \ \ / AppData > #)”Done > show REWRITE action refineSearch_act_4名称:refineSearch_act_4操作:delete_all目标:HTTP.RES.BODY(50000)精炼搜索:EXTEND(40,40). regex_select (re#\s ' * ' . ' * ' \s ' * ' <\/AppData>#)搜索:text("Windows Desktops") Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 
  • replace_diameter ter_header_field <目标> <字段值>.在请求或响应中修改指定的报头字段<目标>.使用Diameter.req.flags.SET(<标记>)Diameter.req.flags.UNSET <标记>作为stringbuilderexpression设置或取消设置标志。

例子

> add重写动作replace_直径ter_field_ex_act replace_直径ter_header_field diameter.req.flags diameter.req.flags.set(proxable) Done > sh重写动作replace_直径ter_field_ex_act名称:replace_直径ter_field_ex_act操作:replace_直径ter_header_field目标:直径.req. ex_actflags值:diameter.req.flags.set(proxable) Hits: 0 Undef Hits: 0 Action Reference Count: 0 Done 
  • REPLACE_DNS_HEADER_FIELD <目标>.中指定的报头字段<目标>

例子

>添加重写动作replace_dns_hdr_act replace_dns_header_field dns.req.header.flags.set(AA) Done > sh重写动作replace_dns_hdr_act名称:replace_dns_hdr_act操作:replace_dns_header_field目标:dns.req.header.flags.set(AA) Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 
  • REPLACE_DNS_ANSWER_SECTION <目标>.替换响应中的DNS应答部分。这只适用于A和AAAA记录。使用DNS。NEW_RRSET_A而且NS。NEW_RRSET_AAAA表达式来配置新的答案部分。

例子

> add重写动作replace_dns_ans_act replace_dns_answer_section DNS.NEW_RRSET_A("1.1.1.1", 10) Done > sh重写动作replace_dns_ans_act名称:replace_dns_ans_act操作:replace_dns_answer_section目标:DNS.NEW_RRSET_A("1.1.1.1", 10) Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 
  • CLIENTLESS_VPN_DECODE <目标>.以无客户端VPN格式解码目标指定的模式。

例子

> add重写动作cvpn_decode_act_1 clientless_vpn_decode http.req.body(100) Done > sh重写动作cvpn_decode_act_1名称:cvpn_decode_act_1操作:clientless_vpn_decode目标:http.req.body(100) Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 
  • CLIENTLESS_VPN_DECODE_ALL <目标>搜索<表达式>.以无客户端VPN格式解码搜索参数指定的所有模式。

例子

> add重写动作act1 clientless_vpn_decode_all http.req.body(100) -search text("abcd") Done > sh重写动作act1名称:act1操作:clientless_vpn_decode_all目标:http.req.body(100)搜索:text("abcd") Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 
  • CLIENTLESS_VPN_ENCODE <目标>.以无客户端VPN格式编码目标指定的模式。

例子

> add重写动作cvpn_encode_act_1 clientless_vpn_encode http.req.body(100) Done > sh重写动作cvpn_encode_act_1名称:cvpn_encode_act_1操作:clientless_vpn_encode目标:http.req.body(100) Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 
  • CLIENTLESS_VPN_ENCODE_ALL <目标>搜索<表达式>.编码所有模式指定的搜索参数在无客户端VPN格式。

例子

> add重写动作act2 clientless_vpn_encode_all http.req.body(100) -search text("abcd") Done > sh重写动作act2名称:act1操作:clientless_vpn_encode_all目标:http.req.body(100)搜索:text("abcd") Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 
  • CORRUPT_SIP_HEADER <目标>.属性指定的SIP报头的所有出现的报头名称<目标>用一个损坏的名字,这样接收者就认不出来了。

例子

> add重写动作corrupt_sip_hdr_act corrupt_sip_header SIP_HDR Done > sh重写动作corrupt_sip_hdr_act名称:corrupt_sip_hdr_act操作:corrupt_sip_header目标:SIP_HDR Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 
  • INSERT_SIP_HEADER .插入指定的SIP报头< header_string_builder_expr >所指定的头内容< contents_string_builder_expr >

例子

> add重写动作insert_sip_hdr_act insert_sip_header SIP_HDR '"inserting_sip_header"' Done >sh重写动作insert_sip_hdr_act名称:insert_sip_hdr_act操作:insert_sip_header目标:SIP_HDR值:"inserting_sip_header" Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 
  • DELETE_SIP_HEADER <目标>.删除指定的SIP报头<目标>

例子

> add重写动作delete_sip_hdr delete_sip_header SIP_HDR Done > sh重写动作delete_sip_hdr名称:delete_sip_hdr操作:delete_sip_header目标:SIP_HDR Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 

目标参数

Target参数是一个表达式,指定要重写请求或响应的哪一部分。

StringBuilderExpr

StringBuilderExpr是一个表达式,它指定在指定位置插入到请求或响应中的内容。此表达式替换指定的字符串。

例1。插入带有客户端IP的HTTP报头

> add重写动作insertact INSERT_HTTP_HEADER "client-IP" CLIENT.IP. src Done > show重写动作insertact名称:insertact操作:INSERT_HTTP_HEADER目的:client-IP取值:CLIENT.IP。SRC BypassSafetyCheck: NO Hits: 0 Undef Hits: 0 Action Reference Count: 0 Done 

例2。替换TCP有效负载中的字符串(TCP重写)

> add重写动作client_tcp_payload_replace_all REPLACE_ALL 'client.tcp.payload(1000)' '"new-string"' -search text("old-string") Done > show重写动作client_tcp_payload_replace_all名称:client_tcp_payload_replace_all操作:REPLACE_ALL目标:client.tcp.payload(1000)值:"new-string"搜索:text("old-string") BypassSafetyCheck: NO Hits: 0 Undef Hits: 0 action Reference Count: 0 Done > 

搜索要重写的请求或响应的一部分

Search功能有助于在请求或响应中找到所需模式的所有实例。

搜索功能需要在以下动作类型中使用:

  • INSERT_BEFORE_ALL
  • INSERT_AFTER_ALL
  • REPLACE_ALL
  • DELETE_ALL
  • CLIENTLESS_VPN_ENCODE_ALL
  • CLIENTLESS_VPN_DECODE_ALL

搜索功能不能与以下操作类型一起使用:

  • INSERT_HTTP_HEADER
  • INSERT_BEFORE
  • INSERT_AFTER
  • 取代
  • 删除
  • DELETE_HTTP_HEADER
  • CORRUPT_HTTP_HEADER
  • REPLACE_HTTP_RES
  • CLIENTLESS_VPN_ENCODE
  • CLIENTLESS_VPN_DECODE
  • INSERT_SIP_HEADER
  • DELETE_SIP_HEADER
  • CORRUPT_SIP_HEADER
  • REPLACE_DIAMETER_HEADER_FIELD
  • REPLACE_DNS_ANSWER_SECTION
  • REPLACE_DNS_HEADER_FIELD
  • REPLACE_SIP_RES

支持以下搜索类型:

  • 示例:-search Text (" hello ")
  • 正则表达式——用于匹配请求或响应中的多个字符串的模式。例如:-search regex(re~^hello*~)
  • XPATH——用于搜索XML的XPATH表达式。示例:-search xpath(xp%/a/b%)
  • JSON——用于搜索JSON的XPATH表达式。示例:-search xpath_json(xp%/a/b%) HTML—用于搜索HTML的XPATH表达式。示例:-search xpath_html(xp%/ HTML /body%) Patset—用于搜索绑定到Patset实体的所有模式。示例:-search patset(" patset1 ")
  • 数据集——搜索绑定到数据集实体的所有模式。示例:-search dataset(" dataset1 ")
  • AVP—用于匹配直径/半径消息中多个AVP的AVP号。示例:-search AVP (999)

优化搜索结果

您可以使用Refine Search功能指定额外的标准来细化搜索结果。精炼搜索功能只能在使用搜索功能时使用。Refine搜索参数总是以“extend(m,n)”操作开始,其中' m '指定搜索结果左侧的一些字节,' n '指定搜索结果右侧的几个字节,以扩展所选区域。

如果配置的重写动作为:

添加重写动作test_refine_search replace_all http.res.body(10)' " testing_refine_search " ' -search text("abc") -refineSearch extend(1,1) HTTP响应体为abcxxxx456。<!——NeedCopy >

然后,搜索参数查找模式“abc”,并且由于refineSearch参数也配置为检查匹配模式左侧额外的1个字节和右侧额外的1个字节。结果被替换的文本是:abcx。这个动作的输出是testing_refine_searchxxx456

例1:在INSERT_BEFORE_ALL动作类型中使用Refine搜索功能。

> add policy patset pat Done > bind policy patset pat abcd Done > add rewrite action refineSearch_act_1 insert_before_all http.res.body(10)' Target .prefix(10) + "refineSearch_testing" -search patset("pat") - refinesearch_extend ("pat") Done > sh重写动作refineSearch_act_1名称:refineSearch_act_1操作:insert_before_all目标:http.res.body(10)细化搜索:extend(" 10,10 ")值:Target .prefix(10) + "refineSearch_testing"搜索:patset("pat") Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 

例2:在INSERT_AFTER_ALL动作类型中使用Refine搜索功能。

>添加重写动作refineSearch_act_2 insert_after_all http.res.body(100)'"refineSearch_testing" -search text("abc") - refinesearchextend (0,10) Done > sh重写动作refineSearch_act_2名称:refineSearch_act_2操作:insert_after_all目标:http.res.body(100)细化搜索:extend(0,10)值:"refineSearch_testing"搜索:text("abc") Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 

例3:在REPLACE_ALL操作类型中使用Refine搜索功能。

> add policy patset pat_list_2 Done > bind policy patset pat_list_2 "www.abc.com" Done > bind policy patset pat_list_2 "www.def.com" Done > add rewrite action refineSearch_act_31 replace_all "HTTP.RES.BODY(100000)""\"https://\"" -search "patset(\"pat_list_2\")"-refineSearch”扩展(7,0).REGEX_SELECT (re # http://)”Done > sh rewrite action refineSearch_act_31名称:refineSearch_act_31操作:replace_all目标:HTTP.RES.BODY(100000)细化搜索:EXTEND(7,0).REGEX_SELECT(re#http://#)值:"https://"搜索:patset("pat_list_2") Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 

例4:在DELETE_ALL操作类型中使用Refine搜索功能。

>添加重写动作refineSearch_act_4 delete_all "HTTP.RES.BODY(50000)"-search text("Windows desktop ") -refineSearch "EXTEND(40,40). regex_select (re#\\s*.*\\s*<\\/AppData>#)"> show REWRITE动作refineSearch_act_4名称:refineSearch_act_4操作:delete_all目标:HTTP.RES.BODY(50000)精炼搜索:EXTEND(40,40). regex_select (re#\s*.*\s*<\/AppData>#)搜索:text("Windows Desktops") Hits: 0 Undef Hits: 0 action Reference Count: 0 Done > 

例5:在CLIENTLESS_VPN_ENCODE_ALL操作类型中使用Refine Search功能。

“‘

add重写动作act2 clientless_vpn_encode_all http.req.body(100) -search text(" abcd ") Done sh重写动作act2名称:act1操作:clientless_vpn_encode_all目标:http.req.body(100)搜索:text(" abcd ") Hits: 0 Undef Hits: 0 action Reference Count: 0 Done

“‘

示例6:在CLIENTLESS_VPN_DECODE_ALL操作类型中使用Refine Search功能。

> add重写动作act1 clientless_vpn_decode_all http.req.body(100) -search text("abcd") Done > sh重写动作act1名称:act1操作:clientless_vpn_decode_all目标:http.req.body(100)搜索:text("abcd") Hits: 0 Undef Hits: 0 action Reference Count: 0 Done > 

使用命令行接口修改现有的重写操作

在命令提示符下,输入以下命令修改现有的重写操作并验证配置:

  • 设置重写动作 [-target <表达式>][-stringBuilderExpr <表达式>][-search <表达式>][-refineSearch <表达式>][-comment <字符串>]

在命令提示符下,输入以下命令来验证修改后的配置

  • 显示重写操作

例子

> set重写动作insertact -target "Client-IP" Done > show重写动作insertact名称:insertact操作:insert_http_header目标:Client-IP值:CLIENT.IP。SRC Hits: 0 Undef Hits: 0 Action Reference Count: 0 Done 

使用命令行接口删除重写操作

在命令提示符下,输入以下命令删除重写操作:

Rm重写操作

例子

> rm重写动作insertact Done 

使用配置实用程序配置重写操作

  1. 导航到重写>动作
  2. 在详细信息窗格中,执行以下操作之一:
    • 单击,创建操作添加
    • 若要修改现有操作,请选择该操作,然后单击编辑
  3. 点击创建好吧.状态栏中出现一条消息,说明Action已成功配置。
  4. 重复步骤2到步骤4创建或修改任意数量的重写操作。
  5. 点击关闭配置重写操作

使用“添加表达式”对话框添加表达式

  1. 创建重写动作配置重写操作对话框中,在要输入的类型参数的文本区域下,单击添加
  2. 添加表情对话框中,在第一个列表框中为表达式选择第一个项。

    • HTTP。HTTP协议。如果希望检查请求中与HTTP协议相关的某些方面,则选择此选项。
    • SYS。受保护的网站。如果您想检查请求中与请求接收者相关的某些方面,则选择此选项。
    • 客户端。发送请求的计算机。如果希望检查请求发送方的某些方面,则选择此选项。

当您做出选择时,最右边的列表框为表达式的下一部分列出了适当的术语。

  1. 在第二个列表框中,为表达式选择第二个项。这些选择取决于您在上一步中所做的选择,并且适合于上下文。在做出第二个选择之后,Construct Expression窗口(为空白)下面的Help窗口将显示描述刚刚选择的术语的目的和用法的帮助。

  2. 继续从上一个列表框右侧的列表框中选择术语,或者在提示输入值的文本框中输入字符串或数字,直到表达式完成。有关PI表达式语言和为响应器策略创建表达式的详细信息,请参见“策略和表达式.”

如果希望测试重写操作在示例HTTP数据上使用时的效果,可以使用重写表达式计算器。

重写TCP有效负载

TCP重写动作中的目标表达式必须以以下表达式前缀之一开始:

  • CLIENT.TCP.PAYLOAD。用于重写客户端请求中的TCP有效负载。例如,CLIENT.TCP.PAYLOAD(10000). after_str (" string1 ")。
  • SERVER.TCP.PAYLOAD。用于重写服务器响应中的TCP有效负载。例如,SERVER.TCP.PAYLOAD(1000). b64decode . between (" string1 ", " string2 ")。

使用“重写操作评估器”对话框评估重写操作

  1. 重写操作详细信息窗格中,选择要计算的重写操作,然后单击评估
  2. 在“重写表达式计算器”对话框中,为以下参数指定值。(星号表示必填参数。)

    重写操作—如果要计算的重写操作尚未选中,请从下拉列表中选择它。选择重写操作后,Details部分将显示所选重写操作的详细信息。新建—选择新建以打开“创建重写操作”对话框并创建一个重写操作。修改—选择“修改”,打开“配置重写操作”对话框,修改所选的重写操作。流类型——指定是否使用HTTP请求数据或HTTP响应数据测试所选的重写操作。默认为Request。如果您希望使用Response数据进行测试,请选择Response。HTTP请求/响应数据*—为您提供一个空间,供您提供重写操作评估器用于测试的HTTP数据。您可以将数据直接粘贴到窗口中,或者单击Sample插入一些示例HTTP报头。显示行尾-指定是否在示例HTTP数据的每一行的末尾显示unix风格的行尾字符(\n)。 Sample—Inserts sample HTTP data into the HTTP Request/Response Data window. You can choose either GET or POST data. Browse—Opens a local browse window so that you can choose a file containing sample HTTP data from a local or network location. Clear—Clears the current sample HTTP data from the HTTP Request/Response Data window.

  3. 点击评估。的重写动作计算器评估重写操作对所选样例数据的影响,并显示被所选对象修改后的结果重写行动在结果窗口。如对话框左下角的图例所示,添加和删除将高亮显示。
  4. 继续评估重写操作,直到确定所有操作都具有所需的效果。

    • 您可以修改所选的重写操作,并通过单击测试修改后的版本修改打开配置重写操作对话框,进行并保存更改,然后再次单击“评估”。
    • 属性中选择不同的重写操作,可以使用相同的请求或响应数据计算不同的重写操作重写的行动下拉列表,然后单击评估一次。
  5. 点击关闭关闭重写表达式求值器然后回到重写操作窗格。

  6. 若要删除重写操作,请选择要删除的重写操作,然后单击删除当出现提示时,单击确认您的选择好吧计算一个重写操作

配置重写策略

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

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

尽管不能使用TCP重写操作重写TCP有效负载以外的数据,但可以根据传输层和传输层以下的层中的信息为TCP重写策略制定策略规则。

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

注意:

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

使用命令行接口添加新的重写策略

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

  • []
  • .

例1。重写HTTP内容

>添加重写policyNew“HTTP.RES”。IS_VALID" insertact NOREWRITE Done > show rewrite policyNew名称:policyNew规则:HTTP.RES。IS_VALID RewriteAction: insertact UndefAction: NOREWRITE Hits: 0 Undef Hits: 0 Done 

例2。重写TCP有效负载(TCP Rewrite):

> add重写策略client_tcp_payload_policy CLIENT.IP.SRC.EQ(172.168.12.232) client_tcp_payload_replace_all Done > show重写策略client_tcp_payload_policy名称:client_tcp_payload_policy规则: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 > 

使用命令行界面修改已存在的重写策略

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

  • -rule -action []
  • .

例子:

>设置重写policyNew -rule HTTP.RES。IS_VALID" -action insertaction Done > show rewrite policyNew名称:policyNew规则:HTTP.RES. Name。IS_VALID RewriteAction: insertaction UndefAction: NOREWRITE Hits: 0 Undef Hits: 0 Done 

使用命令行接口删除重写策略

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

Rm重写策略

例子:

> rm重写policyNew Done 

通过图形化界面配置重写策略

  1. 导航到重写>策略
  2. 在详细信息窗格中,执行以下操作之一:
    • 如需新建策略,请单击“新建”。
    • 若要修改已存在的策略,请选中该策略,然后单击“打开”。
  3. 点击创建好吧.状态栏中出现一条消息,说明策略已成功配置。
  4. 重复步骤2到步骤4创建或修改任意数量的重写操作。
  5. 点击关闭.如果需要删除重写策略,选中待删除的重写策略前的复选框,单击删除当出现提示时,单击确认您的选择好吧

绑定重写策略

创建重写策略后,需要绑定策略才能生效。如果希望将策略应用于通过Citrix ADC的所有流量,则可以将策略绑定到全局,或者可以将策略绑定到特定的虚拟服务器或绑定点,以仅将该虚拟服务器定向,或者将点的传入流量绑定到该策略。如果传入请求与重写策略匹配,则执行与该策略关联的操作。

用于评估HTTP请求和响应的重写策略可以绑定到HTTP或SSL类型的虚拟服务器,也可以绑定到REQ_OVERRIDE、REQ_DEFAULT、RES_OVERRIDE和RES_DEFAULT绑定点。用于TCP重写的重写策略只能绑定到TCP或SSL_TCP类型的虚拟服务器,或者绑定到OTHERTCP_REQ_OVERRIDE、OTHERTCP_REQ_DEFAULT、OTHERTCP_RES_OVERRIDE和OTHERTCP_RES_DEFAULT绑定点。

注意:

术语OTHERTCP在Citrix ADC设备的上下文中用于指您希望作为原始字节流处理的所有TCP或SSL_TCP请求和响应,而不管TCP数据包封装的是什么协议。

绑定策略时,会为其分配优先级。优先级决定了评估您定义的策略的顺序。可以将优先级设置为任何正整数。

在Citrix ADC操作系统中,策略优先级以相反的顺序工作——数字越高,优先级越低。例如,如果有三个优先级分别为10、100和1000的策略,首先应用优先级为10的策略,然后应用优先级为100的策略,最后应用优先级为1000的策略。

与Citrix ADC操作系统中的大多数其他功能不同,重写功能在请求匹配策略后继续评估和实现策略。然而,特定操作策略对请求或响应的效果通常是不同的,这取决于它是在另一个操作之前还是之后执行的。优先级对于得到你想要的结果很重要。

您可以为自己留下足够的空间,以任何顺序添加其他策略,并仍然按照您想要的顺序设置它们,在绑定每个策略时设置优先级,间隔为50或100。如果您这样做,您可以随时添加更多的策略,而不必重新分配现有策略的优先级。

在绑定重写策略时,您还可以选择将goto表达式(gotoPriorityExpression)分配给该策略。转到表达式可以是与分配给不同策略的优先级相匹配的任何正整数,该策略的优先级高于包含转到表达式的策略。如果将goto表达式分配给策略,并且请求或响应与该策略匹配,则Citrix ADC将立即转到优先级与goto表达式匹配的策略。它跳过优先级号低于当前策略,但高于goto表达式优先级号的任何策略,并且不计算这些策略。

使用命令行接口全局绑定重写策略

在命令提示符下,输入以下命令全局绑定重写策略并验证配置:

  • bind rewrite global [] [type ] [-invoke ( )]
  • 显示重写全局

例子:

>bind rewrite global policyNew 10 Done > show rewrite global 1) global bindpoint: RES_DEFAULT绑定策略个数:1 2)global bindpoint: REQ_OVERRIDE绑定策略个数:1 Done 

使用命令行接口将重写策略绑定到特定的虚拟服务器

在命令提示符下,输入以下命令将重写策略绑定到特定的虚拟服务器并验证配置:

  • bind lb vserver @ (@ [-weight ]) | @ | (-policyName @ [-priority ] [-gotoPriorityExpression ] [-type (REQUEST | RESPONSE)] [-invoke ( )])
  • 显示lb vserver

例子:

> bind lb vserver lbvip - policyname ns_cmp_msapp -priority 50 Done > > show lb vserver lbvip lbvip (8.7.6.6:80) - HTTP Type: ADDRESS State: DOWN Last State change was at Wed Jul 15 05:54:24 2009 (+226 ms) Time since Last State change was at Wed Jul 15 05:54:24 2009 (+226 ms) Time since Last State change: 28 days, 01:57:26.350 Effective State: DOWN Client Idle Timeout: 180 sec DOWN State flush: ENABLED Disable Primary vserver On DOWN: DISABLED Port Rewrite: DISABLED否绑定服务:0 (Total) 0 (Active)配置方法:LEASTCONNECTION模式:IP持久化:NONE Vserver IP和端口插入:OFF Push: DISABLED Push Vserver: Push Multi Clients: NO Push Label规则:NONE 1) Policy: ns_cmp_msapp优先级:50 2)Policy: cf-pol优先级:1 Inherited Done 

使用GUI将重写策略绑定到绑定点

  1. 导航到AppExpert>重写>政策
  2. 在详细信息窗格中,选择要全局绑定的重写策略,然后单击策略管理器
  3. 重写策略管理器对话框中的绑定点菜单,执行以下操作之一:
    1. 如果需要为HTTP重写策略配置绑定,请单击HTTP,然后单击其中之一请求响应,这取决于您是想配置基于请求的重写策略还是基于响应的重写策略。
    2. 如果需要为TCP重写策略配置绑定,请单击TCP,然后单击其中之一客户端服务器,取决于配置客户端TCP重写策略还是服务器端TCP重写策略。
  4. 单击要将重写策略绑定到的绑定点。的重写策略管理器对话框将显示所选绑定点上绑定的所有重写策略。
  5. 点击插入政策插入新行并显示包含所有可用的未绑定重写策略的下拉列表。
  6. 单击要绑定到绑定点的策略。策略被插入到绑定点绑定的重写策略列表中。
  7. 优先级列时,可以将优先级更改为任何正整数。有关此参数的详细信息,请参见“绑定重写策略的参数”中的优先级。
  8. 如果需要跳过策略,匹配到当前策略后直接跳转到指定策略,需要将“后转表达式”列的值修改为下一个策略的优先级。有关此参数的详细信息,请参见“绑定重写策略的参数”中的gotoPriorityExpression。
  9. 单击待修改的策略,然后单击修改政策
  10. 单击待解绑定的策略,然后单击解放的政策
  11. 若要修改操作,请在“操作”列中单击要修改的操作,然后单击修改操作
  12. 要修改调用标签,请使用调用列中,单击要修改的调用标签,然后单击修改调用标签
  13. 若要重新生成绑定到当前配置的绑定点的所有策略的优先级,请单击再生的优先级.这些策略相对于其他策略保留其现有的优先级,但优先级以10的倍数重新编号。
  14. 点击申请更改
  15. 点击关闭.状态栏中出现一条消息,说明策略已成功配置。

使用GUI将重写策略绑定到特定的虚拟服务器

  1. 导航到交通管理>负载平衡>虚拟服务器
  2. 2 .在虚拟服务器详细信息窗格列表中,选择需要绑定重写策略的虚拟服务器,单击开放
  3. 配置虚拟服务器(负载均衡)对话框中,选择政策选项卡。在Citrix ADC上配置的所有策略都显示在列表中。
  4. 选中要绑定到此虚拟服务器的策略名称旁边的复选框。
  5. 点击好吧.状态栏中出现一条消息,说明策略已成功配置。

配置重写策略标签

如果希望构建比单个策略所支持的更复杂的策略结构,可以创建策略标签,然后像绑定策略一样绑定它们。策略标签是用户定义的策略绑定点。在调用策略标签时,将按照配置的优先级顺序计算绑定到它的所有策略。一个策略标签可以包括一个或多个策略,每个策略都可以分配自己的结果。策略标签中一个策略的匹配可能导致继续执行下一个策略,调用不同的策略标签或适当的资源,或者立即结束策略计算并将控制返回到调用策略标签的策略。

重写策略标签由名称、描述策略标签中包含的策略类型的转换名称以及绑定到策略标签的策略列表组成。绑定到策略标签的每个策略包含中描述的所有元素配置重写策略

注意:您可以使用命令行界面或GUI来创建和配置重写策略标签。不完全熟悉命令行界面和Citrix ADC Policy Infrastructure (PI)语言的用户通常会发现使用GUI要容易得多。

使用命令行接口配置重写策略标签

要添加一个重写策略标签,在命令提示符处输入以下命令:

add rewrite policylabel

例如,要添加一个名为polLabelHTTPResponses的重写策略标签来对所有处理HTTP响应的策略进行分组,您可以键入以下内容:

添加重写策略标签polLabelHTTPResponses http_res

要修改现有的重写策略标签,请执行Citrix ADC命令提示符,输入以下命令:

设置重写策略

注意:

set rewrite policy命令的选项与add rewrite policy命令相同。

要删除重写策略标签,请执行Citrix ADC命令提示符,输入以下命令:

Rm重写策略

例如,要删除名为polLabelHTTPResponses的重写策略标签,您可以键入以下内容:

rm重写polLabelHTTPResponses策略

使用GUI配置重写策略标签

  1. 导航到AppExpert>重写>政策的标签
  2. 在详细信息窗格中,执行以下操作之一:
    • 单击,新建策略标签添加
    • 如果需要修改已存在的策略标签,选中策略前的复选框,单击开放
  3. 从绑定到策略标签的列表中添加或删除策略。
    • 单击,将策略添加到列表中插入政策,在下拉列表框中选择策略。中的说明,可以创建策略并将其添加到列表中,方法是在列表中选择“新建策略”,然后执行配置重写策略
    • 若要从列表中删除策略,请选中该策略,然后单击“解绑定策略”。
  4. 通过编辑“优先级”列中的数字,修改每个策略的优先级。您还可以通过单击“重新生成优先级”自动为策略重新编号。
  5. 点击创建好吧,然后按关闭.选中策略标签前的复选框,单击,删除策略标签删除.若要重命名策略标签,请选中策略标签,然后单击重命名.编辑策略的名称,然后单击好吧以保存更改。