共用方式為


設定 Web 應用程式防火牆速率限制規則

Azure Front Door 的 Azure Web 應用程式防火牆速率限制規則可控制在速率限制期間,從特定來源 IP 位址到應用程式所允許的要求數目。 如需關於速率限制的詳細資訊,請參閱什麼是 Azure Front Door 的速率限制?

本文說明如何在 Azure Front Door 標準和進階層上設定 Web 應用程式防火牆 (WAF) 速率限制規則。

案例

假設您負責一個公用網站。 您剛剛新增了一個頁面,其中包含組織正在進行的促銷資訊。 您擔心如果用戶端太常瀏覽該頁面,部分後端服務可能無法迅速調整,而且應用程式可能會有效能問題。

您決定建立速率限制規則,將每個來源 IP 位址限制為每分鐘最多 1000 個要求。 您只會將此規則套用至要求 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. 選取 [自訂規則] > [新增自訂規則]

    顯示 AWF 原則的自訂規則頁面的螢幕擷取畫面。

  2. 輸入建立速率限制規則所需的資訊:

    • 自訂規則名稱:輸入自訂規則的名稱,例如 rateLimitRule
    • 規則類型:選取 [速率限制]
    • 優先順序:輸入規則的優先順序,例如 1
    • 速率限制持續時間:選取 [1 分鐘]
    • 速率限制閾值 (要求數):輸入 1000
  3. 在 [條件] 中,輸入指定比對條件所需的資訊,以識別 URL 包含字串 */promo* 的要求:

    • 比對類型:選取 [字串]
    • 比對變數:輸入 RequestUri
    • 作業:選取 [is]
    • 運算子:選取 [Contains]
    • 比對值:輸入 /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 提供了一組 Cmdlet,它們會使用 Azure Resource Manager 模型來管理 Azure 資源。

您可以在本機電腦上安裝 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 位址在一分鐘內傳送超過 1000 個要求時,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 Resource Manager 模型來管理 Azure 資源。

您可以在本機電腦上安裝 Azure CLI,並將其用於任何殼層工作階段。 在此,您會使用 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 命令來建立自訂速率限制規則。 下列範例會將限制設定為每分鐘 1000 個要求。

速率限制規則必須包含您在下一個步驟中建立的比對條件。 在此命令中,您會包含 --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 位址在一分鐘內傳送超過 1000 個要求時,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 設定檔,請參閱 Bicep 的 Azure Front Door 標準或進階速率限制快速入門。

下一步

深入了解 Azure Front Door