使用 Azure 防火墙的 HTTP 标头插入功能,为 Web 流量添加或修改 HTTP 标头。 通过定制头部,组织可以执行安全策略、嵌入认证令牌,并与后端服务集成。 该功能提升安全性,有助于合规性,并优化流量管理,尤其适用于需要特定头部访问或识别的应用。 根据应用规则配置 HTTP 标头插入。 当流量与配置为插入 HTTP 标头的应用程序规则匹配时,Azure 防火墙 会插入已配置的 HTTP 标头。
支持的方案和限制
HTTP 头部插入功能针对特定用例设计,并有一定的约束。
支持的方案
- 在高级SKU中,该功能支持HTTP流量和通过TLS检查解密的HTTPS流量。
- 在标准和基础 SKU 中,该功能支持 HTTP 流量。
- 你也可以通过使用 Azure 防火墙 Policy Draft + Deployment 来配置此功能。
局限性
请记住以下限制:
- 你不能在应用程序规则中将某些保留的标头作为自定义 HTTP 标头插入。 下表列出了按类别分组的保留标头。
- 插入HTTP头可以减少规则集合组中的规则总数,因此在使用HTTP头部时要谨慎。 如果你在某个规则集合组达到了JSON限制,就创建一个新的规则集合组并在那里添加规则。
| 类别 |
保留标头 |
| 概况与关联 |
host、connection、content-length、transfer-encoding、upgrade、via、te、trailer |
| 身份验证和 Cookie |
proxy-authorization、proxy-authenticate、authorization、cookie、set-cookie |
| 安全性 |
content-security-policy、strict-transport-security、x-content-type-options、x-frame-options、referrer-policy、x-xss-protection、public-key-pins、expect-ct、x-xsrf-token |
| 转发 |
x-forwarded-for、x-forwarded-proto、x-forwarded-host、x-forwarded-port、x-forwarded-scheme、forwarded |
| Other |
metadata |
配置步骤
以下章节提供有关 HTTP 标头插入的分步指导。
这些步骤假设你已经有一个现有的 Azure 防火墙 策略(fw-policy以下示例中)。 如果你没有,请参见“部署并配置 Azure 防火墙 策略”。
注释
对启用TLS检测的HTTPS流量执行同样步骤。
头部名称最多可包含100个字符。
头部值最多可包含16K(16,000)个字符。
每个应用规则中允许的HTTP头部总长度(所有HTTP头名称和HTTP头值之和)为16KB(16,384字节)。
在 Azure 门户中,访问现有防火墙策略或创建一个新的。
选择规则,然后选择应用规则。
创建新的应用规则或编辑已有的规则。
在规则配置面板中,找到 HTTP头插入 部分。
通过指定标头名称和值来添加所需的标头。 你可以根据需要添加多个标头。
保存规则。
为了验证头部配置正确,请重新打开规则并确认 HTTP头部插入 部分显示你添加的头部名称和值。
通过运行az登录命令登录你的Azure账户。
使用 az network firewall policy rule-collection-group create 创建规则集合组。
az network firewall policy rule-collection-group create \
--name rcg-c \
--policy-name fw-policy \
--resource-group test-rg \
--priority 10000
使用 az network firewall policy rule-collection-group collection add-filter-collection 添加一个规则集合,其中包含一条带有自定义 HTTP 标头的应用程序规则。
az network firewall policy rule-collection-group collection add-filter-collection \
--policy-name "fw-policy" \
--resource-group "test-rg" \
--rcg-name "rcg-c" \
--name "app_collection_1" \
--collection-priority 10003 \
--action Allow \
--rule-name "app_rule_1" \
--rule-type ApplicationRule \
--target-fqdns "*.microsoft.com" "*.azure.com" \
--source-addresses "10.0.0.5" "10.0.0.6" \
--protocols Http=80 \
--description "Allow access to Microsoft and Azure domains with header insertion" \
--http-headers-to-insert "Restrict-Access-To-Tenants=contoso.com,fabrikam.onmicrosoft.com" "Restrict-Access-Context=aaaabbbb-0000-cccc-1111-dddd2222eeee"
使用 az network firewall policy rule-collection-group show 验证是否已创建该规则,以及标头是否已正确配置。
az network firewall policy rule-collection-group show \
--policy-name fw-policy \
--resource-group test-rg \
--name rcg-c
该命令返回规则收集组 rcg-c的完整配置。 搜索你的规则名称(例如, app_rule_1),并验证其属性。
通过使用 New-AzFirewallPolicyApplicationRule 创建一个新的应用规则。
$rule = New-AzFirewallPolicyApplicationRule `
-Name "app_rule_1" `
-SourceAddress "10.0.0.5", "10.0.0.6" `
-Protocol "Http:80" `
-TargetFqdn "*.microsoft.com", "*.azure.com"
通过使用 New-AzFirewallPolicyApplicationRuleCustomHttpHeader 创建自定义 HTTP 头,并将其添加到规则中。
$header1 = New-AzFirewallPolicyApplicationRuleCustomHttpHeader -HeaderName "Restrict-Access-To-Tenants" -HeaderValue "contoso.com,fabrikam.onmicrosoft.com"
$header2 = New-AzFirewallPolicyApplicationRuleCustomHttpHeader -HeaderName "Restrict-Access-Context" -HeaderValue "aaaabbbb-0000-cccc-1111-dddd2222eeee"
$rule.AddCustomHttpHeaderToInsert($header1)
$rule.AddCustomHttpHeaderToInsert($header2)
通过使用 New-AzFirewallPolicyFilterRuleCollection 创建一个包含该规则的应用规则集合。
$collection = New-AzFirewallPolicyFilterRuleCollection `
-Name "app_collection_1" `
-Priority 10003 `
-Rule @($rule) `
-ActionType "Allow"
通过使用 New-AzFirewallPolicyRuleCollectionGroup 创建一个包含规则集合的规则集合组。
New-AzFirewallPolicyRuleCollectionGroup `
-Name "rcg-c" `
-FirewallPolicyName "fw-policy" `
-ResourceGroupName "test-rg" `
-Priority 10000 `
-RuleCollection $collection
通过使用 Get-AzFirewallPolicyRuleCollectionGroup 验证规则是否已创建且头部配置正确。
Get-AzFirewallPolicyRuleCollectionGroup `
-AzureFirewallPolicyName "fw-policy" `
-ResourceGroupName "test-rg" `
-Name "rcg-c"
该命令返回规则收集组 rcg-c的完整配置。 搜索你的规则名称(例如, app_rule_1),并验证其属性。
后续步骤