NSX Advanced Load Balancer 收集不同类型的日志以排查各种性能或中断问题,改善最终用户体验以及成功运行任何应用程序。在入站客户端请求和后端服务器之间建立连接时,NSX Advanced Load Balancer 控制器 收集 HTTP 请求标头和响应标头信息。

NSX Advanced Load Balancer 支持在应用程序日志中移除或屏蔽 HTTP 请求标头和响应标头字段中的个人身份信息 (Personally Identifiable Information, PII)。可以移除所需 HTTP 标头字段的实际值或将其屏蔽为 X。在以下类型的请求中,将屏蔽 HTTP 请求标头:

  • 从客户端收到的 HTTP 标头。

  • 发送到后端服务器的 HTTP 标头。

以下类型的请求在 NSX Advanced Load Balancer 上被视为 HTTP 响应标头:

  • 来自后端服务器的响应

  • 发送到客户端的响应标头

注:

可以屏蔽或移除 NSX Advanced Load Balancer 上的应用程序日志中的任何 HTTP 标头。该功能并不仅限于屏蔽标头,而且还可以移除应用程序日志中的标头名称及其相应的值。

用例

避免泄露与用户相关的敏感信息,例如 HTTP Cookie、授权信息等。还要避免由于泄露的用户或服务器相关信息而可能产生的任何安全威胁。

使用 CLI 在信息日志中隐藏 PII

根据要求,可以在 NSX Advanced Load Balancer 上的虚拟服务日志中屏蔽或移除任何 HTTP 请求标头和响应标头。

在下面提到的配置片段中,在虚拟服务的分析配置文件配置中使用 match_str: "HTTP-Header-name" 命令选择了 HTTP 标头,并使用 LOG_FIELD_MASKOFF 命令为其设置了相应的操作(以屏蔽原始值):

请参阅以下配置片段以作为参考:

analyticsprofile_object {
   uuid: "l7-analytics-profile-3"
   name: "l7-analytics-profile-3"
   tenant_uuid: "admin"
   sensitive_log_profile {
      header_field_rules {
         index: 1
         name: "hdr_rule_1"
         enabled: true
         match {
            match_criteria: EQUALS
            string_group_uuids: "stringgroup-2"
         }
         action: LOG_FIELD_MASKOFF
     }
     header_field_rules {
         index: 2
         name: "hdr_rule_2"
         enabled: true
         match {
            match_criteria: CONTAINS
            match_str: "X-Forwarded-For"
         }
         action: LOG_FIELD_MASKOFF
     }
   }
}

stringgroup_object {
   uuid: "stringgroup-2"
   name: "stringgroup-2"
   kv {
      key: "Authorization"
   }
   kv {
      key: "Cookie"
   }
   kv {
      key: "Set-Cookie"
   }
   tenant_uuid: "admin"
}

HTTP 请求和 HTTP 响应标头的变化

以下屏幕截图显示了 NSX Advanced Load Balancer 上的日志中的各种 HTTP 标头的屏蔽值。

HTTP 请求标头变化:

更改分析配置文件之前的 HTTP 请求标头详细信息:



更改分析配置文件之后的 HTTP 请求标头详细信息:



在上面提到的示例中,以下 HTTP 请求标头的值屏蔽为 X:

  • X-Forwarded-For

  • 授权 HTTP 标头

  • Cookie 字段

HTTP 响应标头变化:

更改分析配置文件之前应用程序日志中的 HTTP 响应标头详细信息:



更改分析配置文件之后应用程序日志中的 HTTP 响应标头详细信息:



在上面提到的示例中,应用程序日志中的 HTTP 响应标头 Set-Cookie 值屏蔽为 X。

使用 NSX Advanced Load Balancer UI 在信息日志中隐藏 PII

NSX Advanced Load Balancer UI 上提供的敏感日志配置文件选项用于在选定虚拟服务的应用程序日志中隐藏敏感信息。

注:

用于敏感日志配置文件的规则不支持正则表达式 (Regex)。

以下是添加新的敏感日志配置文件或编辑现有配置文件的步骤。

  1. 导航到应用程序 > 虚拟服务,选择所需的虚拟服务,然后单击编辑图标。

  2. 导航到分析选项卡,单击分析配置文件的编辑选项。

  3. 向下滚动到敏感日志信息部分以添加新的规则或编辑现有的规则,从而捕获选定虚拟服务的日志。

  4. 要添加新的规则,请单击创建选项(+ 号),或者

  5. 要编辑现有规则,请单击编辑选项,如下所示。



  6. 提供所需的名称、匹配规则以及所需的匹配操作。

  7. 对于启用操作,可以执行以下操作:

    1. 选择移除以从日志中移除匹配的字段。

    2. 选择屏蔽以从日志中屏蔽匹配的字段。

屏蔽 URI

您可以使用 uri_query_field_rules 字段在日志中屏蔽 URI 查询参数。如果 match_str[1] 中的键与定义的 match_criteria 匹配,则会屏蔽这些值。

下面显示了一个示例配置:

[admin]: > configure analyticsprofile example_profile
[admin]: analyticsprofile> sensitive_log_profile
[admin]: analyticsprofile:sensitive_log_profile> uri_query_field_rules
[admin]: analyticsprofile:sensitive_log_profile:uri_query_field_rules> enabled
[admin]: analyticsprofile:sensitive_log_profile:uri_query_field_rules> name "example_mask_rule"
[admin]: analyticsprofile:sensitive_log_profile:uri_query_field_rules> action log_field_maskoff
[admin]: analyticsprofile:sensitive_log_profile:uri_query_field_rules> match
[admin]: analyticsprofile:sensitive_log_profile:uri_query_field_rules:match> match_str "password"
[admin]: analyticsprofile:sensitive_log_profile:uri_query_field_rules:match> match_criteria contains

在使用该配置时,如果发送到虚拟服务的请求包含与匹配规则匹配的查询参数,则会在应用程序日志中屏蔽 URI(例如 curl "VIP/?passwordfield=somepassword"),如下所示:



屏蔽 WAF 规则

在核心规则集 (Core Rule Set, CRS) 与 REQUEST_COOKIES 匹配时,可以在 waf_field_rules 上的敏感日志配置文件(“模板”>“配置文件”>“分析”)中将其指定为匹配元素。

例如,可以为所有 WAF 虚拟服务保留一个通用分析配置文件,其中包括隐藏敏感匹配项(例如 Cookies、Args:Password 等)的规则。

通过 CLI 配置屏蔽

配置分析配置文件以屏蔽 WAF 规则的过程如下所示:

configure analyticsprofile 'some-common-analytics-profile'
sensitive_log_profile
name mask-waf-match-cookies
match match_criteria equals match_str REQUEST_COOKIES
action log_field_maskoff
enabled true

sensitive_log_profile 将显示如下:

+---------------------------------------+--------------------------------------------+
| Field                                 |   Value                                    |                    
+---------------------------------------+--------------------------------------------+       	
|sensitive_log_profile                  |                                            |
|header_field_rules[1]                  |                                            |
|name                                   |1                                           |
|enabled                                |True                                        |
|match                                  |                                            |
|match_criteria                         |Equals                                      |
|string_group_refs[1]                   |cookie-group                                |
|action                                 |LOG_FIELD_MASKOFF                           |
|waf_field_rules[1]                     |                                            |
|name                                   |mask-waf-match-cookies                      |
|enabled                                |True                                        |
|match                                  |                                            |
|match_criteria                         |CONTAINS                                    |
|match_str[1]                           |REQUEST_Cookies                             |
|action                                 |LOG_FIELD_MASKOFF                           |
+---------------------------------------+--------------------------------------------+

该配置文件屏蔽应用程序日志中的标头(非 WAF)和 WAF 匹配项。

注:

必须定义不同的规则集以屏蔽 WAF 虚拟服务和非 WAF 虚拟服务。

应用策略前后的测试请求和应用程序日志如下所示:

curl -vvv -k -H 'Host: foobar' -H 'Cookie: k=*script*alert(42);*script*' VIP

在应用敏感策略之前,将在 WAF 匹配项和应用程序日志标头中显示 Cookie。



在应用敏感策略之后,将在 WAF 日志和应用程序日志标头中屏蔽 Cookie。