Configuración del Firewall de aplicaciones web V2 en Application Gateway con una regla personalizada con Azure PowerShell

Las reglas personalizadas permiten crear reglas propias que se evalúan en cada solicitud que pasa por el firewall de aplicaciones web (WAF) v2. Estas reglas tienen una prioridad mayor que el resto de las reglas de los conjuntos de reglas administrados. Las reglas personalizadas incluyen una acción (para permitir o bloquear), una condición de coincidencia y un operador para permitir la personalización completa.

En este artículo se crea un firewall de aplicaciones web v2 de Application Gateway en el que se usa una regla personalizada. La regla personalizada bloqueará el tráfico si el encabezado de la solicitud contiene User-Agent evilbot.

Para ver más ejemplos de reglas personalizadas, consulte Creación y uso de reglas personalizadas del firewall de aplicaciones web.

Si quiere ejecutar la instancia de Azure PowerShell de este artículo en un script continuo que puede copiar, pegar y ejecutar, consulte Ejemplos de Azure PowerShell con Azure Application Gateway.

Prerrequisitos

Módulo de Azure PowerShell

Si decide instalar y usar Azure PowerShell localmente, este script requiere la versión 2.1.0 del módulo de Azure PowerShell o cualquier versión posterior.

  1. Para encontrar la versión, ejecute Get-Module -ListAvailable Az. Si necesita actualizarla, consulte Instalación del módulo de Azure PowerShell.
  2. Ejecute Connect-AzAccount para crear una conexión con Azure.

Si no tiene una suscripción a Azure, cree una cuenta gratuita de Azure antes de empezar.

Script de ejemplo

Configurar las variables

$rgname = "CustomRulesTest"

$location = "East US"

$appgwName = "WAFCustomRules"

Crear un grupo de recursos

$resourceGroup = New-AzResourceGroup -Name $rgname -Location $location

Creación de una red virtual

$sub1 = New-AzVirtualNetworkSubnetConfig -Name "appgwSubnet" -AddressPrefix "10.0.0.0/24"

$sub2 = New-AzVirtualNetworkSubnetConfig -Name "backendSubnet" -AddressPrefix "10.0.1.0/24"

$vnet = New-AzvirtualNetwork -Name "Vnet1" -ResourceGroupName $rgname -Location $location `
  -AddressPrefix "10.0.0.0/16" -Subnet @($sub1, $sub2)

Creación de una IP pública estática

$publicip = New-AzPublicIpAddress -ResourceGroupName $rgname -name "AppGwIP" `
  -location $location -AllocationMethod Static -Sku Standard

Creación de un grupo y un puerto de front-end

$gwSubnet = Get-AzVirtualNetworkSubnetConfig -Name "appgwSubnet" -VirtualNetwork $vnet

$gipconfig = New-AzApplicationGatewayIPConfiguration -Name "AppGwIpConfig" -Subnet $gwSubnet

$fipconfig01 = New-AzApplicationGatewayFrontendIPConfig -Name "fipconfig" -PublicIPAddress $publicip

$pool = New-AzApplicationGatewayBackendAddressPool -Name "pool1" `
  -BackendIPAddresses testbackend1.westus.cloudapp.azure.com, testbackend2.westus.cloudapp.azure.com

$fp01 = New-AzApplicationGatewayFrontendPort -Name "port1" -Port 80

Creación de un agente de escucha, una configuración de http, una regla y escalado automático

$listener01 = New-AzApplicationGatewayHttpListener -Name "listener1" -Protocol Http `
  -FrontendIPConfiguration $fipconfig01 -FrontendPort $fp01

$poolSetting01 = New-AzApplicationGatewayBackendHttpSettings -Name "setting1" -Port 80 `
  -Protocol Http -CookieBasedAffinity Disabled

$rule01 = New-AzApplicationGatewayRequestRoutingRule -Name "rule1" -RuleType basic `
  -BackendHttpSettings $poolSetting01 -HttpListener $listener01 -BackendAddressPool $pool -Priority 1000

$autoscaleConfig = New-AzApplicationGatewayAutoscaleConfiguration -MinCapacity 3

$sku = New-AzApplicationGatewaySku -Name WAF_v2 -Tier WAF_v2

Creación de dos reglas personalizadas y aplicación a la directiva del WAF

# Create a User-Agent header custom rule 
$variable = New-AzApplicationGatewayFirewallMatchVariable -VariableName RequestHeaders -Selector User-Agent
$condition = New-AzApplicationGatewayFirewallCondition -MatchVariable $variable -Operator Contains -MatchValue "evilbot" -Transform Lowercase -NegationCondition $False  
$rule = New-AzApplicationGatewayFirewallCustomRule -Name blockEvilBot -Priority 2 -RuleType MatchRule -MatchCondition $condition -Action Block -State Enabled
 
# Create a geo-match custom rule
$var2 = New-AzApplicationGatewayFirewallMatchVariable -VariableName RemoteAddr
$condition2 = New-AzApplicationGatewayFirewallCondition -MatchVariable $var2 -Operator GeoMatch -MatchValue "US"  -NegationCondition $False
$rule2 = New-AzApplicationGatewayFirewallCustomRule -Name allowUS -Priority 14 -RuleType MatchRule -MatchCondition $condition2 -Action Allow -State Enabled

# Create a firewall policy
$policySetting = New-AzApplicationGatewayFirewallPolicySetting -Mode Prevention -State Enabled
$wafPolicy = New-AzApplicationGatewayFirewallPolicy -Name wafpolicyNew -ResourceGroup $rgname -Location $location -PolicySetting $PolicySetting -CustomRule $rule,$rule2

Creación de Application Gateway

$appgw = New-AzApplicationGateway -Name $appgwName -ResourceGroupName $rgname `
  -Location $location -BackendAddressPools $pool `
  -BackendHttpSettingsCollection  $poolSetting01 `
  -GatewayIpConfigurations $gipconfig -FrontendIpConfigurations $fipconfig01 `
  -FrontendPorts $fp01 -HttpListeners $listener01 `
  -RequestRoutingRules $rule01 -Sku $sku -AutoscaleConfiguration $autoscaleConfig `
  -FirewallPolicy $wafPolicy

Actualización del firewall de aplicaciones web

Después de crear el firewall de aplicaciones web, puede actualizarlo mediante un procedimiento similar al código siguiente:

# Get the existing policy
$policy = Get-AzApplicationGatewayFirewallPolicy -Name $policyName -ResourceGroupName $RGname
# Add an existing rule named $rule
$policy.CustomRules.Add($rule)
# Update the policy
Set-AzApplicationGatewayFirewallPolicy -InputObject $policy

Pasos siguientes

Más información sobre el Firewall de aplicaciones web en Application Gateway