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

Como configurar o Azure Application Gateway com WAF: passo a passo

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

Este guia mostra como configurar um Azure Application Gateway com WAF (Web Application Firewall) para proteger uma aplicação web pública. É útil porque o Application Gateway com WAF oferece inspeção ao nível HTTP(S), protege contra vulnerabilidades conhecidas (OWASP) e faz offload TLS.

Pré-requisitos

  • Conta Azure com permissões para criar recursos (Network Contributor e Contributor).
  • Azure CLI instalada ou acesso ao Portal do Azure.
  • Uma Web App ou VM pública de teste (HTTP/HTTPS) — pode usar uma página de teste simples.

Passo 1: Criar um Resource Group

É boa prática criar um Resource Group dedicado. Aqui usamos a Azure CLI; alternativamente faça pelo Portal.

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

Passo 2: Criar a VNet e subnets necessárias

O Application Gateway precisa de uma subnet própria. Crie também uma subnet para a aplicação se for 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

Passo 3: Criar um Public IP para o Application Gateway

O Application Gateway precisa de um Public IP (estático recomendado) para servir tráfego público.

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

Passo 4: Criar um Backend Pool apontando para a sua aplicação

O backend pode ser um IP público, FQDN ou recurso interno. Aqui usamos um FQDN de exemplo: 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

Passo 5: Configurar Listener HTTPS (TLS) — opcional mas recomendado

Para TLS precisa de um certificado PFX armazenado no Key Vault ou carregado. Aqui exemplo com certificado local via Portal/Key Vault; pela CLI é mais complexo. Se usar apenas HTTP, pode omitir este passo.

# Este passo normalmente feito no Portal: criar HTTPS listener e associar certificado PFX
# Ou usar az network application-gateway ssl-cert create para carregar um 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

Passo 6: Ativar e configurar a WAF Policy

Crie uma WAF Policy para gerir regras OWASP, modos de deteção/block e exceções. Por defeito use o OWASP 3.2 e bloqueio em produção.

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

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

# Ou associar a policy criada
az network application-gateway waf-policy update \
  --resource-group rg-appgw-waf \
  --name waf-policy-prod \
  --set policySettings.requestBodyCheck=true

Passo 7: Testar regras personalizadas e exceções

Pode criar exclusões de regra (por exemplo para campos de upload) ou regras personalizadas se necessário. Utilize testes com payloads OWASP para validar o bloqueio.

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 criar uma exclusion (exemplo: 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 o resultado

1) Aceda ao Public IP do Application Gateway e carregue a sua aplicação. 2) Teste com payloads OWASP (ex.: SQLi) para confirmar que o WAF bloqueia quando em Prevention. 3) No Portal, verifique os logs em Diagnostics (ativar diagnostics para enviar para o Log Analytics) e confirme blockedRequests.

Conclusão

Já tem um Azure Application Gateway com WAF básico a proteger a sua aplicação, com TLS opcional e uma WAF Policy em modo Prevention. Próximos passos recomendados: integrar logs com o Log Analytics, automatizar com ARM/Bicep e ajustar regras geridas conforme falsos positivos. Dica: comece em modo Detection antes de passar para Prevention para afinar as regras e evitar bloqueios indesejados.