你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

配置 Web 应用程序防火墙速率限制规则

Azure Front Door 的 Azure Web 应用程序防火墙速率限制规则控制在速率限制期间允许从特定源 IP 地址发送到应用程序的请求数。 有关速率限制的详细信息,请参阅什么是 Azure Front Door 的速率限制?

本文介绍如何在 Azure Front Door 标准和高级层上配置 Web 应用程序防火墙 (WAF) 速率限制规则。

方案

假设你负责管理一个公共网站。 你刚刚添加了一个页面,其中包含有关组织促销活动的信息。 你担心在客户端频繁访问该页面的情况下,某些后端服务可能无法快速扩展,并且应用程序出现性能问题。

你决定创建一个速率限制规则,限制每个源 IP 地址每分钟最多只能发出 1,000 个请求。 你只将此规则应用于请求 URL 中包含 */promo* 的请求。

提示

如果没有 Azure 订阅,请在开始之前创建一个免费帐户

创建 Azure Front Door 配置文件和 WAF 策略

  1. 在 Azure 门户中,选择“创建资源”。

    显示主页上“创建资源”按钮的屏幕截图。

  2. 搜索“Front Door”,然后选择“Front Door 和 CDN 配置文件”。

    显示市场的屏幕截图,其中突出显示了 Front Door。

  3. 选择“创建”。

    显示 Front Door 和 CDN 配置文件的屏幕截图,其中突出显示了“创建”按钮。

  4. 选择“继续创建 Front Door”以使用“快速创建”门户创建过程。

    显示 Azure Front Door 产品的屏幕截图,其中选择了“快速创建”选项,并突出显示了“继续创建 Front Door”按钮。

  5. 在“基本信息”页上输入所需的信息:

    • 资源组:选择现有的资源组,或者为 Azure Front Door 和 WAF 资源创建新的资源组。
    • 名称:输入 Azure Front Door 配置文件的名称。
    • 层级:选择“标准”或“高级”。 对于此方案,这两个层都支持速率限制。
    • 终结点名称:为终结点提供唯一的名称,因为 Azure Front Door 终结点必须具有全局唯一的名称。
    • 源类型源主机名:选择要使用速率限制规则保护的源应用程序。
  6. 在“WAF 策略”旁边选择“新建”。

    显示 Azure Front Door 创建工作流的屏幕截图,其中突出显示了 WAF 策略“新建”按钮。

  7. 输入 WAF 策略的名称并选择“创建”。

    显示 WAF 策略创建提示的屏幕截图,其中突出显示了“创建”按钮。

  8. 选择“查看 + 创建”>“创建”。

    显示已完成的 Azure Front Door 配置文件配置的屏幕截图。

  9. 部署完成后,选择“转到资源”。

创建速率限制规则

  1. 选择“自定义规则”>“添加自定义规则”。

    显示 WAF 策略的自定义规则页面的屏幕截图。

  2. 输入创建速率限制规则所需的信息:

    • 自定义规则名称:输入自定义规则的名称,例如“rateLimitRule”。
    • 规则类型:选择“速率限制”。
    • 优先级:输入规则的优先级,例如“1”。
    • 速率限制持续时间:选择“1 分钟”。
    • 速率限制阈值(请求数):输入“1000”。
  3. 在“条件”中,输入指定匹配条件所需的信息,以识别其中的 URL 包含字符串 */promo* 的请求:

    • 匹配类型:选择“字符串”。
    • 匹配变量:输入“RequestUri”。
    • 操作:选择“”。
    • 运算符:选择“包含”。
    • 匹配值:输入“/promo”。
  4. 对于“操作”,选择“记录”或“阻止”。

    速率限制规则仅支持 LogBlock 操作。 不支持 Allow

    显示自定义规则配置的屏幕截图。

  5. 选择 添加

  6. 选择“保存”。

    显示自定义规则列表的屏幕截图,其中包括新的速率限制规则。

在 WAF 上使用防护模式

Azure 门户默认会在检测模式下创建 WAF 策略。 此设置意味着 WAF 不会阻止请求。 有关详细信息,请参阅 WAF 模式

在使用防护模式之前优化 WAF。 优化有助于避免误报检测。 它还有助于防止 WAF 阻止合法请求。

在此处,将 WAF 重新配置为使用防护模式。

  1. 打开 WAF 策略。

    请注意,“策略模式”设置为“检测”。

    显示 WAF 策略的屏幕截图,其中突出显示了策略模式和“切换到防护模式”按钮。

  2. 选择“切换到防护模式”。

先决条件

在开始设置速率限制策略之前,请先创建 PowerShell 环境和 Azure Front Door 配置文件。

设置 PowerShell 环境

Azure PowerShell 提供一组可以使用 Azure 资源管理器模型管理 Azure 资源的 cmdlet。

可以在本地计算机上安装 Azure PowerShell 并在任何 PowerShell 会话中使用它。 在此处,使用你的 Azure 凭据登录并安装适用于 Azure Front Door 标准版或高级版的 Azure PowerShell 模块。

使用交互式登录对话框连接到 Azure

通过运行以下命令登录到 Azure:

Connect-AzAccount

安装 PowerShellGet

确保已安装当前版本的 PowerShellGet。 运行下面的命令:

Install-Module PowerShellGet -Force -AllowClobber

然后,重启 PowerShell 以确保使用最新版本。

安装 Azure Front Door PowerShell 模块

安装 Az.FrontDoorAz.Cdn PowerShell 模块模块以通过 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 'westus'

创建 Azure Front Door 配置文件

使用 New-AzFrontDoorCdnProfile cmdlet 创建新的 Azure Front Door 配置文件。

此示例创建名为 MyFrontDoorProfile 的 Azure Front Door 标准配置文件:

$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 创建匹配条件,以识别应该应用速率限制的请求。

以下示例匹配其 RequestUri 变量包含字符串 /promo 的请求:

$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 westus

创建 Azure Front Door 配置文件

使用 az afd profile create 命令创建新的 Azure Front Door 配置文件。

此示例创建名为 MyFrontDoorProfile 的 Azure Front Door 标准配置文件:

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 命令将匹配条件添加到自定义规则。 匹配条件标识应该应用速率限制的请求。

以下示例匹配其 RequestUri 变量包含字符串 /promo 的请求:

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 配置文件,请参阅使用速率限制的 Azure Front Door 标准版或高级版 Bicep 快速入门。

后续步骤

了解 Azure Front Door