有时,Azure Front Door 中的 Azure Web 应用程序防火墙可能会阻止合法请求。 在优化 Web 应用程序防火墙(WAF)时,可以将 WAF 配置为允许应用程序请求。 WAF 排除列表允许从 WAF 评估中省略特定请求属性。 其余请求的计算结果为正常。 有关排除列表的详细信息,请参阅 包含 Azure Front Door 排除列表的 Azure Web 应用程序防火墙。
可以使用 Azure PowerShell、 Azure CLI、 REST API、Bicep、Azure 资源管理器模板和 Azure 门户配置排除列表。
Scenario
假设已创建 API。 客户端将请求发送到 API,其中包含名称和名称的userid
user-id
标头。
在优化 WAF 时,你注意到某些合法请求被阻止,因为用户标头包含 WAF 检测到 SQL 注入攻击的字符序列。 具体而言,规则 ID 942230 检测请求标头并阻止请求。 规则 942230 是 SQLI 规则组的一部分。
你决定创建一个排除项,以允许这些合法请求在没有 WAF 阻止的情况下通过它们。
创建排除项
打开 Azure Front Door WAF 策略。
选择 “托管规则>管理排除项”。
选择 并添加。
配置排除项 适用于 部分:
领域 价值 规则集 Microsoft_DefaultRuleSet_2.0 规则组 SQLI 规则 942230 检测条件 SQL 注入尝试 配置排除匹配条件:
领域 价值 匹配变量 请求标头名称 Operator 开头为 Selector 用户 查看排除项,该排除应类似于以下屏幕截图:
此排除项适用于以单词
user
开头的任何请求标头。 匹配条件不区分大小写,因此排除也会涵盖以开头User
的标头。 如果 WAF 规则 942230 检测到这些标头值中存在风险,它将忽略标头并继续移动。选择“保存”。
定义排除选择器
使用 New-AzFrontDoorWafManagedRuleExclusionObject cmdlet 定义新的排除选择器。
以下示例标识以单词 user
开头的请求标头。 匹配条件不区分大小写,因此排除也会涵盖以开头 User
的标头。
$exclusionSelector = New-AzFrontDoorWafManagedRuleExclusionObject `
-Variable RequestHeaderNames `
-Operator StartsWith `
-Selector 'user'
定义每规则排除项
使用 New-AzFrontDoorWafManagedRuleOverrideObject cmdlet 定义新的每规则排除项,其中包括在上一步中创建的选择器。
以下示例为规则 ID 942230 创建排除项。
$exclusion = New-AzFrontDoorWafManagedRuleOverrideObject `
-RuleId '942230' `
-Exclusion $exclusionSelector
将排除项应用于规则组
使用 New-AzFrontDoorWafRuleGroupOverrideObject cmdlet 创建规则组替代,它将排除应用于相应的规则组。
下面的示例使用 SQLI 规则组,因为该组包含规则 ID 942230。
$ruleGroupOverride = New-AzFrontDoorWafRuleGroupOverrideObject `
-RuleGroupName 'SQLI' `
-ManagedRuleOverride $exclusion
配置托管规则集
使用 New-AzFrontDoorWafManagedRuleObject cmdlet 配置托管规则集,包括上一步中创建的规则组替代。
以下示例使用规则组替代及其排除配置 DRS 2.0 规则集。
$managedRuleSet = New-AzFrontDoorWafManagedRuleObject `
-Type 'Microsoft_DefaultRuleSet' `
-Version '2.0' `
-Action Block `
-RuleGroupOverride $ruleGroupOverride
将托管规则集配置应用于 WAF 配置文件
使用 Update-AzFrontDoorWafPolicy cmdlet 更新 WAF 策略以包含所创建的配置。 确保为自己的环境使用正确的资源组名称和 WAF 策略名称。
Update-AzFrontDoorWafPolicy `
-ResourceGroupName 'FrontDoorWafPolicy' `
-Name 'WafPolicy'
-ManagedRule $managedRuleSet
创建排除项
az network front-door waf-policy managed-rules exclusion add
使用命令更新 WAF 策略以添加新的排除项。
排除项标识以单词 user
开头的请求标头。 匹配条件不区分大小写,因此排除也会涵盖以开头 User
的标头。
确保为自己的环境使用正确的资源组名称和 WAF 策略名称。
az network front-door waf-policy managed-rules exclusion add \
--resource-group FrontDoorWafPolicy \
--policy-name WafPolicy \
--type Microsoft_DefaultRuleSet \
--rule-group-id SQLI \
--rule-id 942230 \
--match-variable RequestHeaderNames \
--operator StartsWith \
--value user
示例 Bicep 文件
以下示例 Bicep 文件演示如何:
- 创建 Azure Front Door WAF 策略。
- 启用 DRS 2.0 规则集。
- 为 SQLI 规则组中存在的规则 942230 配置排除项。 此排除项适用于以单词
user
开头的任何请求标头。 匹配条件不区分大小写,因此排除也会涵盖以开头User
的标头。 如果 WAF 规则 942230 检测到这些标头值中存在风险,它将忽略标头并继续移动。
param wafPolicyName string = 'WafPolicy'
@description('The mode that the WAF should be deployed using. In "Prevention" mode, the WAF will block requests it detects as malicious. In "Detection" mode, the WAF will not block requests and will simply log the request.')
@allowed([
'Detection'
'Prevention'
])
param wafMode string = 'Prevention'
resource wafPolicy 'Microsoft.Network/frontDoorWebApplicationFirewallPolicies@2022-05-01' = {
name: wafPolicyName
location: 'Global'
sku: {
name: 'Premium_AzureFrontDoor'
}
properties: {
policySettings: {
enabledState: 'Enabled'
mode: wafMode
}
managedRules: {
managedRuleSets: [
{
ruleSetType: 'Microsoft_DefaultRuleSet'
ruleSetVersion: '2.0'
ruleSetAction: 'Block'
ruleGroupOverrides: [
{
ruleGroupName: 'SQLI'
rules: [
{
ruleId: '942230'
enabledState: 'Enabled'
action: 'AnomalyScoring'
exclusions: [
{
matchVariable: 'RequestHeaderNames'
selectorMatchOperator: 'StartsWith'
selector: 'user'
}
]
}
]
}
]
}
]
}
}
}
后续步骤
详细了解 Azure Front Door。