(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa

Cómo configurar el Azure Application Gateway con WAF: paso a paso

João Barros 14 de August de 2026 4 min de lectura

Esta guía muestra cómo configurar un Azure Application Gateway con WAF (Web Application Firewall) para proteger una aplicación web pública. Es útil porque el Application Gateway con WAF ofrece inspección a nivel HTTP(S), protege contra vulnerabilidades conocidas (OWASP) y realiza offload TLS.

Requisitos previos

  • Cuenta Azure con permisos para crear recursos (Network Contributor y Contributor).
  • Azure CLI instalada o acceso al Portal de Azure.
  • Una Web App o VM pública de prueba (HTTP/HTTPS) — puede usar una página de prueba simple.

Paso 1: Crear un Resource Group

Es buena práctica crear un Resource Group dedicado. Aquí usamos la Azure CLI; alternativamente hágalo desde el Portal.

az group create --name rg-appgw-waf --location westeurope

Paso 2: Crear la VNet y las subnets necesarias

El Application Gateway necesita una subnet propia. Cree también una subnet para la aplicación si es VM.

az network vnet create \
  --resource-group rg-appgw-waf \
  --name vnet-app \
  --address-prefix 10.0.0.0/16 \
  --subnet-name app-subnet --subnet-prefix 10.0.1.0/24

az network vnet subnet create \
  --resource-group rg-appgw-waf \
  --vnet-name vnet-app \
  --name appgw-subnet --address-prefix 10.0.2.0/24

Paso 3: Crear una IP pública para el Application Gateway

El Application Gateway necesita una Public IP (se recomienda estática) para servir tráfico público.

az network public-ip create \
  --resource-group rg-appgw-waf \
  --name appgw-pip \
  --allocation-method Static \
  --sku Standard

Paso 4: Crear un Backend Pool apuntando a su aplicación

El backend puede ser una IP pública, FQDN o recurso interno. Aquí usamos un FQDN de ejemplo: mywebapp.example.com.

az network application-gateway create \
  --name appgw-waf \
  --location westeurope \
  --resource-group rg-appgw-waf \
  --sku WAF_v2 \
  --capacity 2 \
  --vnet-name vnet-app \
  --subnet appgw-subnet \
  --public-ip-address appgw-pip \
  --http-settings-cookie-based-affinity Disabled \
  --backend-pool-name backendPool \
  --backend-port 80 \
  --servers mywebapp.example.com

Paso 5: Configurar Listener HTTPS (TLS) — opcional pero recomendado

Para TLS necesita un certificado PFX almacenado en Key Vault o cargado. Aquí ejemplo con certificado local vía Portal/Key Vault; por CLI es más complejo. Si usa solo HTTP, puede omitir este paso.

# Este paso normalmente hecho en el Portal: crear HTTPS listener y asociar certificado PFX
# O usar az network application-gateway ssl-cert create para cargar un PFX
az network application-gateway ssl-cert create \
  --resource-group rg-appgw-waf \
  --gateway-name appgw-waf \
  --name sslCert \
  --cert-file /path/to/cert.pfx \
  --cert-password 'S3nh4!'

az network application-gateway http-listener create \
  --resource-group rg-appgw-waf \
  --gateway-name appgw-waf \
  --name httpsListener \
  --frontend-port 443 \
  --ssl-cert sslCert

Paso 6: Activar y configurar la WAF Policy

Cre E una WAF Policy para gestionar reglas OWASP, modos de detección/block y excepciones. Por defecto use OWASP 3.2 y bloqueo en producción.

az network application-gateway waf-policy create \
  --resource-group rg-appgw-waf \
  --name waf-policy-prod \
  --mode Prevention \
  --policy-settings file-upload-limit-in-mb=100

# Asociar la policy al Application Gateway
az network application-gateway update \
  --resource-group rg-appgw-waf \
  --name appgw-waf \
  --set wafConfiguration.enabled=true wafConfiguration.firewallMode=Prevention

# O asociar la policy creada
az network application-gateway waf-policy update \
  --resource-group rg-appgw-waf \
  --name waf-policy-prod \
  --set policySettings.requestBodyCheck=true

Paso 7: Probar reglas personalizadas y excepciones

Puede crear exclusiones de regla (por ejemplo para campos de upload) o reglas personalizadas si es necesario. Utilice pruebas con payloads OWASP para validar el bloqueo.

az network application-gateway waf-policy managed-rule rule-set add \
  --resource-group rg-appgw-waf \
  --policy-name waf-policy-prod \
  --type OWASP --version 3.2

# Para crear una exclusion (ejemplo: excluir campo JSON 'token')
az network application-gateway waf-policy custom-rule create \
  --resource-group rg-appgw-waf \
  --policy-name waf-policy-prod \
  --name AllowTokenField \
  --priority 100 \
  --rule-type MatchRule \
  --match-conditions "[{'matchVariables':[{'variableName':'RequestBody' }],'operator':'Contains','matchValues':['\"token\"']} ]" \
  --action Allow

Verificar el resultado

1) Acceda a la Public IP del Application Gateway y cargue su aplicación. 2) Pruebe con payloads OWASP (ej.: SQLi) para confirmar que el WAF bloquea cuando está en Prevention. 3) En el Portal, verifique los logs en Diagnostics (activar diagnostics para enviar a Log Analytics) y confirme blockedRequests.

Conclusión

Ya tiene un Azure Application Gateway con WAF básico protegiendo su aplicación, con TLS opcional y una WAF Policy en modo Prevention. Siguientes pasos recomendados: integrar logs con Log Analytics, automatizar con ARM/Bicep y ajustar reglas gestionadas según falsos positivos. Consejo: empiece en modo Detection antes de pasar a Prevention para afinar las reglas y evitar bloqueos indeseados.