使用 Azure PowerShell 配置 WAF 策略

Web 应用程序防火墙(WAF)策略定义请求到达 Azure Front Door 时所需的检查。

本文展示了如何配置Azure Front Door Standard或Premium的WAF策略,该策略包含一些自定义规则,并启用了Azure管理的默认规则集。 标准版和高级版均适用自定义规则。 托管规则集(例如默认规则集)需要高级层。

自定义规则和默认规则集为可选;根据需求,可以包含其中之一或两者。 你在后续创建策略时设置WAF策略模式(检测或预防)。

先决条件

  • 拥有有效订阅的 Azure 帐户。 创建帐户

  • Azure Front Door 的标准或高级版配置文件。 如果你需要创建一个,请参考快速入门:使用 PowerShell 创建 Azure Front Door 标准/高级配置文件。 本文中的示例使用高级版配置文件,这是因为托管规则集需要高级层级。

  • Azure PowerShell。

    在本地安装 Azure PowerShell 来运行 cmdlet。 如果在本地运行 PowerShell,请使用 Connect-AzAccount cmdlet 登录到 Azure。

  • Az.CdnAz.FrontDoor PowerShell 模块。 使用 Az.Cdn 模块管理 Azure Front Door Standard 和 Premium 资源,并使用 Az.FrontDoor 模块管理 WAF 资源。 通过执行以下命令安装这两个模块:

    Install-Module -Name Az.Cdn
    Install-Module -Name Az.FrontDoor
    

基于 HTTP 参数的自定义规则

以下示例演示如何使用 New-AzFrontDoorWafMatchConditionObject 配置具有两个匹配条件的自定义规则。 请求来自引用方定义的指定站点,查询字符串不包含 password

$referer = New-AzFrontDoorWafMatchConditionObject -MatchVariable RequestHeader -OperatorProperty Equal -Selector "Referer" -MatchValue "www.mytrustedsites.com/referpage.html"
$password = New-AzFrontDoorWafMatchConditionObject -MatchVariable QueryString -OperatorProperty Contains -MatchValue "password"
$AllowFromTrustedSites = New-AzFrontDoorWafCustomRuleObject -Name "AllowFromTrustedSites" -RuleType MatchRule -MatchCondition $referer,$password -Action Allow -Priority 1

基于 HTTP 请求方法的自定义规则

使用 New-AzFrontDoorWafCustomRuleObject 创建阻止 PUT 方法的规则。

$put = New-AzFrontDoorWafMatchConditionObject -MatchVariable RequestMethod -OperatorProperty Equal -MatchValue PUT
$BlockPUT = New-AzFrontDoorWafCustomRuleObject -Name "BlockPUT" -RuleType MatchRule -MatchCondition $put -Action Block -Priority 2

基于大小约束创建自定义规则

以下示例创建了一个规则,通过使用 Azure PowerShell 阻止超过 100 字符的 URL 请求。

$url = New-AzFrontDoorWafMatchConditionObject -MatchVariable RequestUri -OperatorProperty GreaterThanOrEqual -MatchValue 100
$URLOver100 = New-AzFrontDoorWafCustomRuleObject -Name "URLOver100" -RuleType MatchRule -MatchCondition $url -Action Block -Priority 3

添加托管的默认规则集

托管规则集可在 Azure Front Door Premium 中获得。 以下示例通过使用 Azure PowerShell 创建一个托管默认规则集对象。

$managedRules = New-AzFrontDoorWafManagedRuleObject -Type Microsoft_DefaultRuleSet -Version 2.2

注释

受管理规则集需要 Azure Front Door Premium。 Azure Front Door Standard 仅支持自定义规则。 本示例使用 Microsoft_DefaultRuleSet 2.2版本。 关于所有可用版本,请参见 Web 应用程序防火墙 DRS 规则组和规则

创建 WAF 策略

通过使用 New-AzFrontDoorWafPolicy 创建包含前几步自定义规则和托管默认规则集的 WAF 策略。 将 -Sku 设为 Premium_AzureFrontDoor 以包含托管规则,或设为 Standard_AzureFrontDoor 以仅包含自定义规则。

$myWAFPolicy = New-AzFrontDoorWafPolicy -Name $policyName -ResourceGroupName $resourceGroupName -Sku Premium_AzureFrontDoor -CustomRule $AllowFromTrustedSites,$BlockPUT,$URLOver100 -ManagedRule $managedRules -EnabledState Enabled -Mode Prevention

将WAF策略与你的终端关联起来

对于 Azure Front Door Standard 和 Premium,你通过在 Azure Front Door 配置文件上创建安全策略,将 WAF 策略关联到端点。 安全策略将你的WAF策略与你希望WAF保护的域名关联起来。

通过 Get-AzFrontDoorCdnEndpoint 获取你的端点,并将资源组、配置文件和端点名称替换为你自己的。 然后使用 New-AzFrontDoorCdnSecurityPolicy 将端点的默认主机名与你的 WAF 策略关联。

$frontDoorEndpoint = Get-AzFrontDoorCdnEndpoint -ResourceGroupName $resourceGroupName -ProfileName $frontDoorProfileName -EndpointName $frontDoorEndpointName

$securityPolicyAssociation = New-AzFrontDoorCdnSecurityPolicyWebApplicationFirewallAssociationObject `
  -PatternsToMatch @("/*") `
  -Domain @(@{"Id"=$($frontDoorEndpoint.Id)})

$securityPolicyParameters = New-AzFrontDoorCdnSecurityPolicyWebApplicationFirewallParametersObject `
  -Association $securityPolicyAssociation `
  -WafPolicyId $myWAFPolicy.Id

New-AzFrontDoorCdnSecurityPolicy `
  -Name 'MySecurityPolicy' `
  -ProfileName $frontDoorProfileName `
  -ResourceGroupName $resourceGroupName `
  -Parameter $securityPolicyParameters

注释

安全策略适用于关联中的域名。 为了保护更多域名,可以将它们添加到关联中或创建额外的安全策略。