本文說明如何使用 Azure 入口網站、Azure CLI、Azure PowerShell 或 Azure Resource Manager 範本,在適用於 Azure Front Door 的 Web 應用程式防火牆 (WAF) 中設定 IP 限制規則。
IP 位址型存取控制規則是一種自訂 WAF 規則,可讓您控制 Web 應用程式的存取。 此規則會以無類別網域間路由選擇 (CIDR) 格式指定 IP 位址或 IP 位址範圍的清單。
根據預設,Web 應用程式可從網際網路存取。 如果您想要限制從已知 IP 位址或 IP 位址範圍清單存取用戶端,則可建立 IP 比對規則,其中包含 IP 位址清單做為相符值,並將運算子設定為「Not
」(否定值為 true ) 並將動作設定為 Block
。 套用 IP 限制規則之後,來自此允許清單外部地址的要求會收到「403 禁止」回應。
請遵循下列步驟,使用 Azure 入口網站設定 WAF 原則。
必要條件
請遵循快速入門:建立高可用性全域 Web 應用程式的 Azure Front Door 執行個體設定檔中所述的指示來建立 Azure Front Door 設定檔。
建立 WAF 原則
在 Azure 入口網站中,選取 [建立資源]。 在 [搜尋服務和市集] 搜尋方塊中輸入「Web 應用程式防火牆」 ,然後選取 Enter。 然後選取 [Web 應用程式防火牆 (WAF)]。
選取 建立。
在 [建立 WAF 原則] 頁面上,使用下列值來完成 [基本] 索引標籤。
設定 |
值 |
原則適用對象 |
全域 WAF (Front Door)。 |
Front Door 分層 |
選取 [進階] 或 [標準] 以符合您的 Azure Front Door 分層。 |
訂用帳戶 |
選取您的訂用帳戶。 |
資源群組 |
選取 Azure Front Door 執行個體所在的資源群組。 |
原則名稱 |
輸入原則的名稱。 |
原則狀態 |
Selected |
原則模式 |
預護 |
選取 [下一步:受控規則]。
選取 [下一步:原則設定]。
在 [原則設定] 索引標籤上,針對 [封鎖回應本文] 輸入「您已遭封鎖!」,使您可以看到自訂規則已經生效。
選取 [下一步:自訂規則]。
選取 [新增自訂規則]。
在 [新增自訂規則] 頁面上,請使用下列測試值來建立自訂規則。
設定 |
值 |
自訂規則名稱 |
FdWafCustRule |
狀態 |
已啟用 |
規則類型 |
比對 |
優先順序 |
100 |
比對類型 |
IP 位址 |
比對變數 |
SocketAddr |
作業 |
不包含 |
IP 位址或範圍 |
10.10.10.0/24 |
結果為 |
拒絕流量 |
選取 [新增]。
選取 [下一步:關聯]。
選取 [與 Front Door 設定檔建立關聯]。
針對 [前端設定檔],選取您的前端設定檔。
針對 [網域],選取網域。
選取 [新增]。
選取 [檢閱 + 建立]。
原則驗證完成後,選取 [建立]。
測試 WAF 原則
WAF 原則部署完成之後,瀏覽至 Azure Front Door 前端主機名稱。
您應會看見自訂封鎖訊息。
注意
自訂規則中會刻意使用私人 IP 位址,以確保觸發規則。 在實際部署中,針對您的特定情況,使用 IP 位址建立「允許」和「拒絕」規則。
請遵循下列步驟,使用 Azure CLI 設定 WAF 原則。
必要條件
開始設定 IP 限制原則之前,請先設定 CLI 環境並建立 Azure Front Door 設定檔。
設定 Azure CLI 環境
- 安裝 Azure CLI 或使用 Azure Cloud Shell。 Azure Cloud Shell 是免費的 Bash Shell,您可以直接在 Azure 入口網站內執行。 它具有預先安裝和設定的 Azure CLI,可與您的帳戶搭配使用。 在接下來的 CLI 命令中,選取 [試用] 按鈕。 然後在開啟的 Cloud Shell 工作階段中登入您的 Azure 帳戶。 工作階段啟動之後,輸入
az extension add --name front-door
以新增 Azure Front Door 延伸模組。
- 如果在 Bash 中使用本機 CLI,請使用
az login
登入 Azure。
建立 Azure Front Door 設定檔
請遵循快速入門:建立高可用性全域 Web 應用程式的 Azure Front Door 執行個體設定檔中所述的指示來建立 Azure Front Door 設定檔。
建立 WAF 原則
使用 az network front-door waf-policy create 命令建立 WAF 原則。
在接下來的範例中以唯一原則名稱取代「IPAllowPolicyExampleCLI」原則名稱。
az network front-door waf-policy create \
--resource-group <resource-group-name> \
--subscription <subscription ID> \
--name IPAllowPolicyExampleCLI
新增自訂 IP 存取控制規則
使用 az network front-door waf-policy custom-rule create 命令為您所建立的 WAF 原則新增自訂 IP 存取控制規則。
在下列範例中:
- 以稍早建立的唯一原則取代「IPAllowPolicyExampleCLI」。
- 以您自己的範圍取代 ip-address-range-1、ip-address-range-2。
首先,為上一個步驟建立的原則建立 IP 允許規則。
注意
必須有 --defer
,因為規則必須有比對條件,才能在下一個步驟中新增。
az network front-door waf-policy rule create \
--name IPAllowListRule \
--priority 1 \
--rule-type MatchRule \
--action Block \
--resource-group <resource-group-name> \
--policy-name IPAllowPolicyExampleCLI --defer
然後,將比對條件新增至規則:
az network front-door waf-policy rule match-condition add \
--match-variable SocketAddr \
--operator IPMatch \
--values "ip-address-range-1" "ip-address-range-2" \
--negate true \
--name IPAllowListRule \
--resource-group <resource-group-name> \
--policy-name IPAllowPolicyExampleCLI
尋找 WAF 原則的識別碼
使用 az network front-door waf-policy show 命令尋找 WAF 原則。 將下列範例中的「IPAllowPolicyExampleCLI」以您稍早建立的唯一原則取代。
az network front-door waf-policy show \
--resource-group <resource-group-name> \
--name IPAllowPolicyExampleCLI
將 WAF 原則連結至 Azure Front Door 前端主機
使用 az network front-door update 命令,將 Azure Front Door 的 「WebApplicationFirewallPolicyLink」識別碼設定為原則識別碼。 以稍早建立的唯一原則取代「IPAllowPolicyExampleCLI」。
az network front-door update \
--set FrontendEndpoints[0].WebApplicationFirewallPolicyLink.id=/subscriptions/<subscription ID>/resourcegroups/resource-group-name/providers/Microsoft.Network/frontdoorwebapplicationfirewallpolicies/IPAllowPolicyExampleCLI \
--name <frontdoor-name> \
--resource-group <resource-group-name>
在此範例中,WAF 原則會套用至 FrontendEndpoints[0]
。 您可以將 WAF 原則連結至任何前端。
注意
您只需要設定 WebApplicationFirewallPolicyLink
屬性一次,即可將 WAF 原則連結至 Azure Front Door 前端。 後續原則更新會自動套用至前端。
請遵循下列步驟,使用 Azure PowerShell 設定 WAF 原則。
必要條件
開始設定 IP 限制原則之前,請先設定 PowerShell 環境並建立 Azure Front Door 設定檔。
設定 PowerShell 環境
Azure PowerShell 提供了一組 Cmdlet,會使用 Azure Resource Manager 模型來管理 Azure 資源。
您可以在本機電腦上安裝 Azure PowerShell,並將其用於任何 PowerShell 工作階段。 請遵循頁面上的指示,使用您的 Azure 認證登入 PowerShell,然後安裝 AZ PowerShell 模組模組。
使用下列命令連線至 Azure,並使用互動式對話方塊登入。
Connect-AzAccount
在安裝 Azure Front Door 模組之前,請確定您已安裝最新版的 PowerShellGet 模組。 執行下列命令,並重新開啟 PowerShell。
Install-Module PowerShellGet -Force -AllowClobber
使用下列命令安裝 Az.FrontDoor 模組:
Install-Module -Name Az.FrontDoor
建立 Azure Front Door 設定檔
請遵循快速入門:建立高可用性全域 Web 應用程式的 Front Door 設定檔中所述的指示來建立 Azure Front Door 設定檔。
定義 IP 比對條件
使用 New-AzFrontDoorWafMatchConditionObject 命令來定義 IP 比對條件。
在下列範例中,以您自己的範圍取代 ip-address-range-1、ip-address-range-2。
$IPMatchCondition = New-AzFrontDoorWafMatchConditionObject `
-MatchVariable SocketAddr `
-OperatorProperty IPMatch `
-MatchValue "ip-address-range-1", "ip-address-range-2"
-NegateCondition 1
建立自訂 IP 允許規則
使用 New-AzFrontDoorWafCustomRuleObject 命令來定義動作並設定優先順序。 在下列範例中,非來自符合清單用戶端 IP 的要求將會遭到封鎖。
$IPAllowRule = New-AzFrontDoorWafCustomRuleObject `
-Name "IPAllowRule" `
-RuleType MatchRule `
-MatchCondition $IPMatchCondition `
-Action Block -Priority 1
使用 Get-AzResourceGroup
尋找包含 Azure Front Door 設定檔的資源群組名稱。 接下來,使用 New-AzFrontDoorWafPolicy 設定具有 IP 規則的 WAF 原則。
$IPAllowPolicyExamplePS = New-AzFrontDoorWafPolicy `
-Name "IPRestrictionExamplePS" `
-resourceGroupName <resource-group-name> `
-Customrule $IPAllowRule`
-Mode Prevention `
-EnabledState Enabled
將 WAF 原則連結至 Azure Front Door 前端主機
將 WAF 原則物件連結至現有的前端主機,並更新 Azure Front Door 屬性。 請先使用 Get-AzFrontDoor 擷取 Azure Front Door 物件。 接下來,使用 Set-AzFrontDoor 命令,將 WebApplicationFirewallPolicyLink
屬性設定為在上一個步驟中所建立的 $IPAllowPolicyExamplePS
資源識別碼。
$FrontDoorObjectExample = Get-AzFrontDoor `
-ResourceGroupName <resource-group-name> `
-Name $frontDoorName
$FrontDoorObjectExample[0].FrontendEndpoints[0].WebApplicationFirewallPolicyLink = $IPBlockPolicy.Id
Set-AzFrontDoor -InputObject $FrontDoorObjectExample[0]
注意
在此範例中,WAF 原則會套用至 FrontendEndpoints[0]
。 您可以將 WAF 原則連結至任何前端。 您只需要設定 WebApplicationFirewallPolicyLink
屬性一次,即可將 WAF 原則連結至 Azure Front Door 前端。 後續原則更新會自動套用至前端。
若要檢視建立 Azure Front Door 原則的 Resource Manager 範本和具有自訂 IP 限制規則的 WAF 原則,請移至 GitHub。