Azure Front Door 的 Azure Web 应用程序防火墙速率限制规则控制在速率限制期间允许从特定源 IP 地址到应用程序的请求数。 有关速率限制的详细信息,请参阅 什么是 Azure Front Door 速率限制?。
本文介绍如何在 Azure Front Door 标准和高级层上配置 Web 应用程序防火墙(WAF)速率限制规则。
Scenario
假设你负责公共网站。 你刚刚添加了一个页面,其中包含有关组织正在运行的促销信息。 你担心,如果客户端经常访问该页面,某些后端服务可能无法快速缩放,并且应用程序可能会遇到性能问题。
你决定创建速率限制规则,将每个源 IP 地址限制为每分钟最多 1,000 个请求。 仅将此规则应用于请求 URL 中包含的请求 */promo*
。
小窍门
如果没有 Azure 订阅,可在开始前创建一个试用帐户。
创建 Azure Front Door 配置文件和 WAF 策略
在 Azure 门户中,选择“ 创建资源”。
搜索 Front Door,然后选择 Front Door 和 CDN 配置文件。
选择 创建。
选择 “继续”创建 Front Door 以使用 快速创建 门户创建过程。
在 “基本 信息”页上输入所需的信息:
- 资源组:选择现有资源组,或为 Azure Front Door 和 WAF 资源创建新的资源组。
- 名称:输入 Azure Front Door 配置文件的名称。
- 层:选择 “标准 ”或“ 高级”。 对于此方案,这两个层都支持速率限制。
- 终结点名称:为终结点提供唯一名称,因为 Azure Front Door 终结点必须具有全局唯一的名称。
- 源类型和源主机名:选择要使用速率限制规则保护的源应用程序。
在 WAF 策略旁边,选择“ 新建”。
输入 WAF 策略的名称,然后选择“ 创建”。
选择“审核 + 创建”>创建。
部署完成后,选择“ 转到资源”。
创建速率限制规则
选择 “自定义规则>添加自定义规则”。
输入创建速率限制规则所需的信息:
- 自定义规则名称:输入自定义规则的名称,例如 rateLimitRule。
- 规则类型:选择 速率限制。
- 优先级:输入规则的优先级,例如 1。
- 速率限制持续时间:选择 1 分钟。
- 速率限制阈值(请求):输入 1000。
在 “条件”中,输入指定匹配条件以标识 URL 包含字符串
*/promo*
的请求所需的信息:- 匹配类型:选择 字符串。
- 匹配变量:Enter RequestUri。
- 作:选择 为。
- 运算符:选择 “包含”。
- 匹配值:输入 /促销。
对于 作,请选择“ 日志 ”或“ 阻止”。
速率限制规则仅支持
Log
和Block
作。 不支持Allow
。选择 并添加。
选择“保存”。
在 WAF 上使用防护模式
默认情况下,Azure 门户在检测模式下创建 WAF 策略。 此设置意味着 WAF 不会阻止请求。 有关详细信息,请参阅 WAF 模式。
在使用防护模式之前调整 WAF。 优化有助于避免误报检测。 它还有助于防止 WAF 阻止合法请求。
在这里,你将 WAF 重新配置为使用防护模式。
打开 WAF 策略。
请注意, 策略模式 是在 检测时设置的。
选择 “切换到预防模式”。
先决条件
在开始设置速率限制策略之前,请设置 PowerShell 环境并创建 Azure Front Door 配置文件。
设置 PowerShell 环境
Azure PowerShell 提供了一组 cmdlet,这些 cmdlet 使用 Azure 资源管理器 模型管理 Azure 资源。
可以在本地计算机上安装 Azure PowerShell ,并将其用于任何 PowerShell 会话。 在这里,使用 Azure 凭据登录并安装适用于 Azure Front Door 标准版或高级版的 Azure PowerShell 模块。
使用用于登录的交互式对话框连接到 Azure
运行以下命令登录到 Azure:
Connect-AzAccount -Environment AzureChinaCloud
安装 PowerShellGet
确保已安装当前版本的 PowerShellGet 。 运行下面的命令:
Install-Module PowerShellGet -Force -AllowClobber
然后,重启 PowerShell 以确保使用最新版本。
安装 Azure Front Door PowerShell 模块
安装 Az.FrontDoor
PowerShell 模块, Az.Cdn
以便通过 PowerShell 使用 Azure Front Door 标准版或高级版。
Install-Module -Name Az.FrontDoor
Install-Module -Name Az.Cdn
使用模块 Az.Cdn
来处理 Azure Front Door 标准版或高级资源。 使用 Az.FrontDoor
模块处理 WAF 资源。
创建资源组
使用 New-AzResourceGroup cmdlet 为 Azure Front Door 配置文件和 WAF 策略创建新的资源组。 根据自己的要求更新资源组名称和位置:
$resourceGroupName = 'FrontDoorRateLimit'
New-AzResourceGroup -Name $resourceGroupName -Location 'chinanorth2'
创建 Azure Front Door 配置文件
使用 New-AzFrontDoorCdnProfile cmdlet 创建新的 Azure Front Door 配置文件。
在此示例中,将创建一个名为 MyFrontDoorProfile
:
$frontDoorProfile = New-AzFrontDoorCdnProfile `
-Name 'MyFrontDoorProfile' `
-ResourceGroupName $resourceGroupName `
-Location global `
-SkuName Standard_AzureFrontDoor
创建 Azure Front Door 终结点
使用 New-AzFrontDoorCdnEndpoint cmdlet 将终结点添加到 Azure Front Door 配置文件。
Azure Front Door 终结点必须具有全局唯一的名称,因此请将 $frontDoorEndpointName
变量的值更新为唯一名称。
$frontDoorEndpointName = '<unique-front-door-endpoint-name>'
$frontDoorEndpoint = New-AzFrontDoorCdnEndpoint `
-EndpointName $frontDoorEndpointName `
-ProfileName $frontDoorProfile.Name `
-ResourceGroupName $frontDoorProfile.ResourceGroupName `
-Location $frontDoorProfile.Location
定义 URL 匹配条件
使用 New-AzFrontDoorWafMatchConditionObject cmdlet 创建匹配条件来标识应用速率限制的请求。
以下示例匹配变量包含字符串 /promo 的请求RequestUri
:
$promoMatchCondition = New-AzFrontDoorWafMatchConditionObject `
-MatchVariable RequestUri `
-OperatorProperty Contains `
-MatchValue '/promo'
创建自定义速率限制规则
使用 New-AzFrontDoorWafCustomRuleObject cmdlet 创建速率限制规则,其中包括在上一步中定义的匹配条件和请求阈值。
以下示例将限制设置为 1000
:
$promoRateLimitRule = New-AzFrontDoorWafCustomRuleObject `
-Name 'rateLimitRule' `
-RuleType RateLimitRule `
-MatchCondition $promoMatchCondition `
-RateLimitThreshold 1000 `
-Action Block `
-Priority 1
当任何源 IP 地址在一分钟内发送超过 1,000 个请求时,WAF 会阻止后续请求,直到下一分钟开始。
创建 WAF 策略
使用 New-AzFrontDoorWafPolicy cmdlet 创建 WAF 策略,其中包括创建的自定义规则。
$wafPolicy = New-AzFrontDoorWafPolicy `
-Name 'MyWafPolicy' `
-ResourceGroupName $frontDoorProfile.ResourceGroupName `
-Sku Standard_AzureFrontDoor `
-CustomRule $promoRateLimitRule
配置安全策略以将 Azure Front Door 配置文件与 WAF 策略相关联
使用 New-AzFrontDoorCdnSecurityPolicy cmdlet 为 Azure Front Door 配置文件创建安全策略。 安全策略将 WAF 策略与要受 WAF 规则保护的域相关联。
在此示例中,将终结点的默认主机名与 WAF 策略相关联:
$securityPolicyAssociation = New-AzFrontDoorCdnSecurityPolicyWebApplicationFirewallAssociationObject `
-PatternsToMatch @("/*") `
-Domain @(@{"Id"=$($frontDoorEndpoint.Id)})
$securityPolicyParameters = New-AzFrontDoorCdnSecurityPolicyWebApplicationFirewallParametersObject `
-Association $securityPolicyAssociation `
-WafPolicyId $wafPolicy.Id
$frontDoorSecurityPolicy = New-AzFrontDoorCdnSecurityPolicy `
-Name 'MySecurityPolicy' `
-ProfileName $frontDoorProfile.Name `
-ResourceGroupName $frontDoorProfile.ResourceGroupName `
-Parameter $securityPolicyParameters
先决条件
在开始设置速率限制策略之前,请设置 Azure CLI 环境并创建 Azure Front Door 配置文件。
设置 Azure CLI 环境
Azure CLI 提供了一组命令,这些命令使用 Azure 资源管理器 模型来管理 Azure 资源。
可以在本地计算机上安装 Azure CLI ,并将其用于任何 shell 会话。 在这里,使用 Azure 凭据登录,并安装适用于 Azure Front Door 标准版或高级版的 Azure CLI 扩展。
使用用于登录的交互式对话框连接到 Azure
运行以下命令登录到 Azure:
az login
为 Azure CLI 安装 Azure Front Door 扩展
从 front-door
Azure CLI 安装该扩展以使用 Azure Front Door WAF:
az extension add --name front-door
使用 az afd
命令来处理 Azure Front Door 标准版或高级资源。 使用 az network front-door waf-policy
命令处理 WAF 资源。
创建资源组
使用 az group create 命令为 Azure Front Door 配置文件和 WAF 策略创建新的资源组。 根据自己的要求更新资源组名称和位置:
resourceGroupName='FrontDoorRateLimit'
az group create \
--name $resourceGroupName \
--location chinanorth2
创建 Azure Front Door 配置文件
使用 az afd profile create 命令创建新的 Azure Front Door 配置文件。
在此示例中,将创建一个名为 MyFrontDoorProfile
:
frontDoorProfileName='MyFrontDoorProfile'
az afd profile create \
--profile-name $frontDoorProfileName \
--resource-group $resourceGroupName \
--sku Standard_AzureFrontDoor
创建 Azure Front Door 终结点
使用 az afd endpoint create 命令将终结点添加到 Azure Front Door 配置文件。
Azure Front Door 终结点必须具有全局唯一的名称,因此请将 frontDoorEndpointName
变量的值更新为唯一名称。
frontDoorEndpointName='<unique-front-door-endpoint-name>'
az afd endpoint create \
--endpoint-name $frontDoorEndpointName \
--profile-name $frontDoorProfileName \
--resource-group $resourceGroupName \
创建 WAF 策略
使用 az network front-door waf-policy create 命令创建 WAF 策略:
wafPolicyName='MyWafPolicy'
az network front-door waf-policy create \
--name $wafPolicyName \
--resource-group $resourceGroupName \
--sku Standard_AzureFrontDoor
准备添加自定义速率限制规则
使用 az network front-door waf-policy rule create 命令创建自定义速率限制规则。 以下示例将限制设置为每分钟 1,000 个请求。
速率限制规则必须包含在下一步中创建的匹配条件。 在此命令中,将包含 --defer
参数,该参数告知 Azure CLI 尚未将规则提交到 Azure。
az network front-door waf-policy rule create \
--name rateLimitRule \
--policy-name $wafPolicyName \
--resource-group $resourceGroupName \
--rule-type RateLimitRule \
--rate-limit-duration 1 \
--rate-limit-threshold 1000 \
--action Block \
--priority 1 \
--defer
当任何源 IP 地址在一分钟内发送超过 1,000 个请求时,WAF 会阻止后续请求,直到下一分钟开始。
添加匹配条件
使用 az network front-door waf-policy rule match-condition add 命令向自定义规则添加匹配条件。 匹配条件标识应应用速率限制的请求。
以下示例匹配变量包含字符串 /promo 的请求RequestUri
:
az network front-door waf-policy rule match-condition add \
--match-variable RequestUri \
--operator Contains \
--values '/promo' \
--name rateLimitRule \
--policy-name $wafPolicyName \
--resource-group $resourceGroupName
提交此命令时,Azure CLI 会创建速率限制规则并一起匹配条件。
配置安全策略以将 Azure Front Door 配置文件与 WAF 策略相关联
使用 az afd security-policy create 命令为 Azure Front Door 配置文件创建安全策略。 安全策略将 WAF 策略与要受 WAF 规则保护的域相关联。
在此示例中,将终结点的默认主机名与 WAF 策略相关联:
securityPolicyName='MySecurityPolicy'
wafPolicyResourceId=$(az network front-door waf-policy show --name $wafPolicyName --resource-group $resourceGroupName --query id --output tsv)
frontDoorEndpointResourceId=$(az afd endpoint show --endpoint-name $frontDoorEndpointName --profile-name $frontDoorProfileName --resource-group $resourceGroupName --query id --output tsv)
az afd security-policy create \
--security-policy-name $securityPolicyName \
--profile-name $frontDoorProfileName \
--resource-group $resourceGroupName \
--domains $frontDoorEndpointResourceId \
--waf-policy $wafPolicyResourceId
前面的代码查找 WAF 策略和 Azure Front Door 终结点的 Azure 资源标识符,以便它可以将它们与安全策略相关联。
注释
每当对 WAF 策略进行更改时,都无需重新创建 Azure Front Door 安全策略。 WAF 策略更新会自动应用于 Azure Front Door 域。
快速入门
若要使用 Bicep 创建具有速率限制规则的 Azure Front Door 配置文件,请参阅具有速率限制 Bicep 快速入门的 Azure Front Door 标准版或高级 版。
后续步骤
详细了解 Azure Front Door。