借助安全 Web 代理,您可以在政策中定义各种类型的规则,以保护出站 Web 流量。您可以使用这些规则,通过使用特定的请求详细信息(例如标头和网址模式)来精确控制流量的安全性,确保只有获批的 HTTP/S 流量离开您的网络。
本页面介绍了各种类型的规则,以及创建这些规则并将其添加到安全政策中的步骤。
配置主机匹配规则
主机匹配规则会根据您允许或拒绝的 网址列表评估 Web 请求的目标主机名。通过检查目标网域(例如 www.example.com),这些规则可确保您的流量仅到达已获批准的网站和服务。
本部分介绍如何为以下安全 Web 代理部署模式配置主机匹配规则:
- 显式代理模式
- 下一个跃点模式
显式代理模式
将 Secure Web Proxy 部署为显式代理时,请配置主机匹配规则,以验证客户端发送的主机信息是否已正确提取并对照您定义的安全规则进行检查。在显式代理模式下,客户端会主动配置为将其流量直接发送到 Secure Web Proxy 实例。
在显式代理模式下,主机匹配适用于不同类型的 Web 流量,具体方式如下:
| 流量类型 | 匹配机制 | 规则配置 |
|---|---|---|
| 未加密的 HTTP | 安全 Web 代理会根据 HTTP 请求的标准 CONNECT 标头中的 host 字段检查目标主机名。 |
在 sessionMatcher 字段中,使用 host() == "example.com"。 |
| 加密的 HTTPS(不进行传输层安全协议 (TLS) 检查) | 在应用级层或会话级层也无法进行主机匹配。这是因为请求详细信息已加密,并且不支持 destination.ip 属性。您必须使用更广泛的政策控制措施(例如来源身份匹配),或者为基于主机的过滤启用 TLS 检查。 |
如需使用应用匹配器,请使用来源身份匹配(例如服务账号)或启用 TLS 检查。 |
| 加密的 HTTPS(带有 TLS 检查) | 如需检查完整请求,您必须同时使用会话匹配器和应用匹配器。 | 1. 设置一个常规的会话匹配器规则,该规则要么返回 true,要么匹配目标主机(例如 host() == "example.com")。
2. 在 |
下一个跃点模式
将 Secure Web Proxy 部署为下一个跃点时,您必须配置主机匹配规则。流量通过基于您定义的 IP 地址范围的 Virtual Private Cloud (VPC) 路由重定向到代理。主机匹配规则通过检查流量的各个字段(例如服务器名称指示 [SNI] 标头)来确保代理正确识别目标主机。
下一个跃点模式下的主机匹配功能适用于不同类型的 Web 流量,具体如下:
| 流量类型 | 匹配机制 | 规则配置 |
|---|---|---|
| 未加密的 HTTP | 安全 Web 代理会根据标准 HTTP 请求标头中的 host 字段检查目标主机名。 |
在 sessionMatcher 字段中,使用 host() == "example.com"。 |
| 加密的 HTTPS(不进行 TLS 检查) | 安全 Web 代理会根据出站请求中的 SNI 标头检查主机名,即使其余流量已加密,该标头也可见。 | 在 sessionMatcher 字段中,使用 host() == "example.com"。 |
| 加密的 HTTPS(带有 TLS 检查) | 如需检查完整请求,您必须同时使用会话匹配器和应用匹配器。 | 1. 设置一个常规的会话匹配器规则,该规则要么返回 true,要么匹配目标主机(例如 host() == "example.com")。
2. 在 |
配置 TCP 代理规则
您可以为应用配置传输控制协议 (TCP) 代理规则,以保护非 Web 流量,并为不使用标准 HTTP/S 的应用(例如端口 80 和 443)强制执行安全政策。
应用这些规则后,您可以防止未经授权使用其他 TCP 端口进行数据传输或恶意活动。当工作负载使用 Secure Web Proxy 作为非 Web 协议的下一个跃点时,此功能尤为有用。
如需实现 TCP 代理规则并为应用创建允许或阻止流量规则,您必须指定目标端口。您可以选择性地添加以下任何会话匹配器属性,以细化允许或禁止规则的条件。
下表详细介绍了您可以在 TCP 代理规则中使用的各种属性:
| 属性 | 属性类型 | 说明 |
|---|---|---|
source.ip |
字符串 | 发送请求的客户端的 IP 地址。 |
source.port |
字符串 | 发送请求的客户端端口。 |
destination.port |
字符串 | 安全 Web 代理实例将流量发送到的上游端口。 |
source.matchTag(SECURE_TAG) |
布尔值 |
该实参是安全标记的永久 ID,例如 |
source.matchServiceAccount(SERVICE_ACCOUNT) |
布尔值 | True,如果来源与 SERVICE_ACCOUNT(例如 source.matchServiceAccount('x@my-project.iam.gserviceaccount.com'))相关联。
|
inIpRange(IP_ADDRESS, |
布尔值 | True,如果 IP_ADDRESS 包含在 IP_RANGE 中,例如 inIpRange(source.ip, '1.2.3.0/24')。IPv6 地址的子网掩码不能大于 `/64`。
|
TCP 代理规则示例
此示例展示了如何使用 CEL 表达式定义安全 Web 代理 gatewaySecurityPolicyRule,以允许所有 TCP 流量到达端口 22。在应用安全 Web 代理的 TCP 代理功能时,可以使用此配置。
以下代码示例展示了如何定义 TCP 代理规则:
name: projects/PROJECT_ID/locations/REGION/gatewaySecurityPolicies/POLICY_NAME/rules/RULE_NAME
enabled: true
priority: 100 # Lower numbers have higher priority
description: "Allow TCP proxy traffic to port 22 - such as, for SSH"
basicProfile: ALLOW
sessionMatcher: "destination.port == 22"
替换以下内容:
PROJECT_ID:您的项目的 IDREGION:政策的区域POLICY_NAME:政策的名称RULE_NAME:TCP 代理规则的名称。在此示例中,我们可以将其值视为allow-ssh-tcp-proxy。
重要注意事项
您配置的任何 TCP 代理规则都必须具有比 HTTP/S 规则更高的优先级(数字更小),以确保系统先评估并执行这些规则。如需了解详情,请参阅规则评估顺序。
配置 TCP 代理规则时,不支持
host会话匹配器属性,因为在 TCP 层没有主机信息。TCP 代理规则仅根据目标端口过滤 Web 流量。为了增强网络的安全性,建议您使用逻辑运算符(逻辑 AND 运算符 [&&] 和逻辑 OR 运算符 [||])和受支持的属性(例如
source.ip)添加其他条件。以下示例展示了如何定义更具体的 TCP 代理规则:// Allow port 22 from only a specific source IP range sessionMatcher: "destination.port == 22 && inIpRange(source.ip, '10.0.0.0/24')"安全 Web 代理不支持为用户数据报协议 (UDP) 应用配置代理规则。因此,安全 Web 代理会阻止基于 UDP 的应用的流量。
创建安全 Web 代理规则
本部分介绍如何创建安全 Web 代理规则。
在创建规则之前,请确保执行以下操作:
创建规则并将其与政策相关联后,您可以在部署安全 Web 代理时使用该规则。
控制台
在 Google Cloud 控制台中,前往 SWP 政策页面。
点击您的政策名称,例如
policy1。点击 添加规则。
对于每条规则,请执行以下操作:
在优先级中,输入规则的数字评估顺序。 规则按照从最高到最低的优先级进行评估,其中
0是最高优先级。在名称字段中,输入规则的名称。
在说明字段中,输入规则的说明。
在操作部分,选择以下选项之一:
- 允许:允许与规则匹配的连接请求。
- 拒绝:拒绝与规则匹配的连接请求。
对于状态字段,请选择以下规则强制执行选项之一:
- 已启用:在安全 Web 代理实例上强制执行该规则。
- 已停用:不在安全 Web 代理实例上强制执行相应规则。
在会话匹配部分中,指定用于匹配会话的条件,例如
host() == "www.wikipedia.org"。如需详细了解
SessionMatcher的语法,请参阅 CEL 匹配器语言参考文档。在应用匹配部分中,指定匹配请求的条件。
如需详细了解如何匹配 TCP 流量,请参阅配置 TCP 代理规则。
点击添加规则。
Cloud Shell
创建
rule.yaml文件,如下所示。 如需详细了解sessionMatcher的语法,请参阅 CEL 匹配器语言参考文档。name: projects/PROJECT_ID/locations/REGION/gatewaySecurityPolicies/policy1/rules/RULE_NAME description: Allow wikipedia.org enabled: true priority: 1 basicProfile: ALLOW sessionMatcher: host() == 'www.wikipedia.org'替换以下内容:
PROJECT_ID:您的项目的 IDREGION:政策的区域RULE_NAME:规则的名称。在此示例中,我们可以将其值视为allow-wikipedia-org。
可选:或者,如果您想创建启用 TLS 检查的规则,请按此处所示创建
rule.yaml文件。 如需了解详情,请参阅 TLS 检查概览和启用 TLS 检查。name: projects/PROJECT_ID/locations/REGION/gatewaySecurityPolicies/policy1/rules/RULE_NAME description: Allow wikipedia.org enabled: true priority: 1 basicProfile: ALLOW sessionMatcher: host() == 'www.wikipedia.org' applicationMatcher: request.path.contains('index.html') tlsInspectionEnabled: true如需详细了解如何匹配 TCP 流量,请参阅配置 TCP 代理规则。
创建安全政策规则。
gcloud network-security gateway-security-policies rules import allow-wikipedia-org \ --source=rule.yaml \ --location=REGION \ --gateway-security-policy=policy1