# Web Application Firewall

import DocButton from '~/components/webkit/DocButton.vue';

**Web Application Firewall (WAF)** é um módulo do Azion **Firewall** desenvolvido para proteger applications contra ameaças do tipo *SQL Injections*, *Remote File Inclusion (RFI)*, *Cross-Site Scripting (XSS)*, *Cross-Site Request Forgery (CSRF)*, *violações de protocolo* (como body vazio em POST), *Code Injection* e outras vulnerabilidades da web, incluindo as [ameaças cibernéticas mais comuns](https://www.azion.com/pt-br/learning/websec/como-waf-protege-contra-ameacas-ciberneticas/#quais-sao-as-ameacas-ciberneticas-mais-comuns). O WAF analisa requisições HTTP e HTTPS, detecta e bloqueia atividades maliciosas, antes que elas cheguem à sua infraestrutura, origem ou servidor.

O WAF opera na sétima camada do modelo OSI, a camada da aplicação, onde ocorre o relacionamento entre as aplicações web, seus respectivos serviços de rede e dados de usuários. Funciona também como uma barreira para filtrar e monitorar o tráfego entre sua aplicação e as requisições da internet.

O **Web Application Firewall** se baseia em uma metodologia de *pontuação* por requisição. Cada requisição HTTP/HTTPS é comparada a um conjunto rigoroso e detalhado de padrões de aplicações e recebe uma *pontuação* associada a determinada família de ameaças. De acordo com a *pontuação* recebida pela requisição, ela pode ser liberada ou bloqueada diretamente nos edge nodes da Azion, antes que a ameaça atinja sua origem ou cause qualquer tipo de dano. O nível de sensibilidade para cada família de ameaças pode ser customizado a qualquer momento.

O WAF pode operar em dois modos: **Learning** ou **Blocking**. Você pode definir o modo em uma regra no [Rules Engine](/pt-br/documentacao/produtos/secure/firewall/rules-engine/) com o comportamento **Set WAF Rule Set** ou via [API da Azion](https://api.azion.com/#ae9cdca8-3949-4b25-b1e6-2e071cd193fc).

Você pode usar o modo **Learning** para evitar o bloqueio de requisições legítimas e mau funcionamento de sua aplicação. Nesta etapa, o WAF identifica os comportamentos legítimos de sua aplicação, colocando-os em uma *allowlist*.

Se tráfego interno, testes e falsos positivos estiverem sendo bloqueados pelo WAF, você também pode ajustar suas configurações com o recurso **Tuning**, disponível dentro de uma configuração do WAF.

### Requisições POST e tipos de conteúdo suportados

Ao analisar requisições `POST`, o WAF interpreta o corpo da requisição apenas quando o cabeçalho `Content-Type` utiliza um dos tipos a seguir:

- `application/x-www-form-urlencoded`
- `multipart/form-data`
- `application/json`
- `application/vnd.api+json`
- `application/csp-report`

Quando o `Content-Type` não é um dos suportados, o corpo da requisição pode ser considerado não analisável pelo WAF, o que impacta a forma como algumas regras de validação de protocolo são aplicadas, incluindo regras relacionadas à validação de formato de `POST`.

## Implementação

| Escopo | Fonte |
| ------ | ----- |
| Criar WAF rule set | [Como criar um WAF rule set](/pt-br/documentacao/produtos/guias/secure/criar-waf-rule-set/) |
| Modo WAF | [Como verificar o modo do seu WAF](/pt-br/documentacao/produtos/guias/como-verificar-modo-do-seu-waf/) |
| Score WAF | [Como encontrar o score de requisições bloqueadas pelo WAF](/pt-br/documentacao/produtos/guias/como-encontrar-score-de-requisicoes-bloqueadas-pelo-waf/) |
| Integrar WAF com SIEMs | [Como integrar WAF com SIEMs](/pt-br/documentacao/produtos/secure/automatizar/integrar-siems/) |

## Pré-requisitos

Para configurar um **WAF Rule Set**, que é como uma configuração de WAF é chamada, você precisa ter uma configuração de Firewall com o módulo **Web Application Firewall** ativado.

:::tip[dica]
Saiba mais sobre os [módulos do Firewall](/pt-br/documentacao/produtos/secure/firewall/) e o [Rules Engine para o Firewall](/pt-br/documentacao/produtos/secure/firewall/rules-engine/).
:::

<DocButton href="/pt-br/documentacao/produtos/guias/secure/firewall-definir-main-settings/" label="consulte o guia configurar firewall" kind="secondary" size="medium" />

## WAF Main Settings

A seção de **Main Settings** é configurada ativando a proteção contra famílias específicas de ameaças: SQL Injection, Remote File Inclusions (RFI), Directory Traversal, Cross-Site Scripting (XSS), File upload, Evading tricks, Unwanted Access e Identified Attack, e definindo um nível de sensibilidade: Lowest, Low, Medium, High e Highest.

A tabela de **Threat Type Configuration** categoriza as ameaças em famílias, de acordo com o propósito do ataque.

<DocButton href="/pt-br/documentacao/produtos/secure/firewall/web-application-firewall/rule-sets/#tipos-de-ameacas" label="saiba mais sobre os tipos de ameaça" kind="secondary" size="medium" /> <br></br>

<DocButton href="/pt-br/documentacao/produtos/guias/secure/criar-waf-rule-set/" label="consulte o guia sobre criar rule set" kind="secondary" size="medium" />

Você também pode ativar ou desativar a proteção para cada família de ameaças individualmente através do switch **Active**.

Os níveis de **Sensitivity** define o rigor com o qual o WAF considera uma requisição como uma ameaça. 

Cada nível de sensibilidade tolera um número definido de indícios de ameaças e o score do WAF representa essa quantidade de indícios de ameaças. Quanto mais flexível é o nível de sensibilidade, maior é o score do WAF que ela aceita. Já as sensibilidades mais rígidas aceitam apenas requisições que somaram poucos indícios de ameaças.

<DocButton href="/pt-br/documentacao/produtos/secure/firewall/web-application-firewall/rule-sets/#niveis-de-sensibilidade" label="saiba mais sobre níveis de sensibilidade" kind="secondary" size="medium" />

## Rule IDs do WAF

Cada regra do WAF possui um identificador numérico único, chamado `Rule ID`. 

- **Visualização:** os `Rule IDs` aparecem nas telas de **WAF Tuning** e **Allowed Rules**.
- **Uso:** você pode usar o `Rule ID` para identificar, filtrar e permitir/bloquear comportamentos específicos da aplicação.
- **Lista completa:** consulte a descrição das famílias de regras e seus `Rule IDs` em [WAF Rule Sets](/pt-br/documentacao/produtos/secure/firewall/web-application-firewall/rule-sets/).

### Regra 13: validação de formato de POST

A **regra 13** do WAF está relacionada à validação de formato de requisições `POST`, garantindo que o corpo da requisição esteja em conformidade com os formatos de mensagem definidos pelos padrões HTTP.

Ela considera, entre outros fatores:

- O método utilizado (`POST`).
- O `Content-Type` configurado.
- A forma como o corpo é serializado (por exemplo, `application/x-www-form-urlencoded`, `multipart/form-data`, `application/json`).

Para entender os formatos esperados e a semântica de requisições `POST`, consulte:

- [RFC 7231 – Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content](https://datatracker.ietf.org/doc/html/rfc7231)
- [RFC 2388 – Returning Values from Forms: multipart/form-data](https://datatracker.ietf.org/doc/html/rfc2388)

A descrição detalhada da regra 13 e de seus parâmetros está disponível na página de [WAF Rule Sets](/pt-br/documentacao/produtos/secure/firewall/web-application-firewall/rule-sets/).

## WAF Tuning

**WAF Tuning** é uma ferramenta analítica que exibe as requisições detectadas para cada regra do WAF. Todas as correspondências são exibidas agrupadas pelo **rule ID**, juntamente com informações adicionais para auxiliar na identificação, como **total de hits**, **número de URIs**, **IPs únicos** e outros dados que ajudam na configuração das **Allowed Rules**, garantindo a melhor calibração do WAF para sua aplicação. Você pode filtrar por **Domínio**, **Data**, **Network Lists**, **IP** e **Países**.

<DocButton href="/pt-br/documentacao/produtos/guias/secure/tune-waf/" label="consulte o guia fazer tuning do WAF" kind="secondary" size="medium" /> 

Ao selecionar uma Regra listada nos resultados, você pode acessar a tela de **More Details** para visualizar ocorrências relacionadas ao Rule ID selecionado. Isso permite entender e identificar exatamente os casos que devem ser adicionados às **Allowed Rules**, com o suporte de filtros como **Network List**, **País**, **IP** e **Path**.

Nos filtros abaixo, informe o **domínio** (obrigatório), a **data**, quais **Network Lists** prefere utilizar, quais **IPs** está investigando e o **país** de origem da requisição. 

:::note[nota]
Para visualizar as requisições identificadas pelo WAF, é necessário informar, no mínimo, o domínio (ou os domínios) da sua aplicação.
:::

Ao clicar no botão **Apply filter**, uma lista de **Possible Attacks** será exibida. Essa lista conta com os campos **Rule ID**, **Description**, **Hits**, **IPs**, **Countries**, **Top 10 IPs Address** e **Top 10 Countries**. Agora você pode selecionar os que precisar e clicar em **Allow Rules** para adicioná-los às Allowed Rules deste WAF.

<DocButton href="/pt-br/documentacao/produtos/secure/firewall/web-application-firewall/custom-allowed-rules/" label="saiba mais sobre Custom Allowed Rules do WAF" kind="secondary" size="medium" />

## Allowed Rules

Essa aba permite a criação, edição e deleção de *Allowed Rules* (também referenciadas como **Exceções** na API).

:::note
**Exceções** é a terminologia utilizada na API da Azion. Na interface do Console, você verá **Allowed Rules**. Ambos os termos se referem à mesma funcionalidade.
:::

Allowed Rules são compostas pelos seguintes campos:

| Campo | Descrição |
| ----- | --------- |
| `Rule ID` | ID numérico exclusivo da regra WAF. Consulte a lista de regras em [WAF Rule Sets](/pt-br/documentacao/produtos/secure/firewall/web-application-firewall/rule-sets/). |
| `Rule Description` | Descrição automática do que a regra é/faz |
| `Reason` | Campo de descrição textual alternativa |
| `URI` | *Uniform Resource Identifier (URI)* é o caminho (*path*) após o domínio na URL |
| `Path` | Delimita o escopo de atuação da regra. Se especificado, restringe a aplicação da `Match Zone` somente ao `path` definido |
| `Match Zone` | Partes ou campos da requisição que serão comparados com o `match pattern`. Saiba mais sobre cada opção na [tabela de Match Zones](#opcoes-de-match-zone) abaixo |
| `Active` | Switch de ativação da Allowed Rule |

### Opções de Match Zone

O menu suspenso da **Match Zone** abre as opções disponíveis para preencher este campo. Cada opção tem um comportamento específico, conforme explicado na tabela abaixo.

:::note[nota]
As opções que começam com **Specific** requerem que você informe um valor no campo **Name** para especificar qual elemento deseja comparar.
:::

| Campo | Descrição | Exemplo de uso |
| ----- | ---------- | -------------- |
| `Any HTTP Header Value` | `Match pattern` será comparado com o valor de qualquer cabeçalho HTTP da requisição |  Compara com valores como `Mozilla/5.0`, `application/json`, etc. |
| `Any HTTP Header Name` | `Match pattern` será comparado com o nome de qualquer cabeçalho HTTP da requisição |  Compara com nomes como `User-Agent`, `Content-Type`, `Authorization`, etc. |
| `Specific HTTP Header Value` | `Match pattern` será comparado com o valor de um cabeçalho HTTP específico da requisição | Name: `User-Agent` — compara apenas o valor do header User-Agent |
| `Specific HTTP Header Name` | `Match pattern` será comparado com o nome de um cabeçalho HTTP específico da requisição | Name: `X-Custom-Header` — verifica se existe um header com esse nome |
| `Any Query String Value` | `Match pattern` será comparado com o valor de qualquer parâmetro da query string |  Em `?id=123&user=admin`, compara com `123` e `admin` |
| `Any Query String Name` | `Match pattern` será comparado com o nome de qualquer parâmetro da query string |  Em `?id=123&user=admin`, compara com `id` e `user` |
| `Specific Query String Value` | `Match pattern` será comparado com o valor de um parâmetro específico da query string | Name: `session_id` — compara apenas o valor do parâmetro `session_id` |
| `Specific Query String Name` | `Match pattern` será comparado com o nome de um parâmetro específico da query string | Name: `token` — verifica se existe um parâmetro chamado `token` |
| `Body Form Field Value` | `Match pattern` será comparado com o valor de qualquer campo do formulário no body da requisição |  Compara valores de campos como `username`, `password`, etc. |
| `Body Form Field Name` | `Match pattern` será comparado com o nome de qualquer campo do formulário no body da requisição |  Compara nomes de campos do formulário |
| `Specific Body Form Field Value` | `Match pattern` será comparado com o valor de um campo específico do formulário no body da requisição | Name: `password` — compara apenas o valor do campo `password` |
| `Specific Body Form Field Name` | `Match pattern` será comparado com o nome de um campo específico do formulário no body da requisição | Name: `api_key` — verifica se existe um campo com esse nome |
| `Any URL` | `Match pattern` será comparado com qualquer parte da URL da requisição |  Compara com a URL completa ou partes dela |
| `Raw Body` | `Match pattern` será comparado ao body não interpretado (*unparsed body*) de uma requisição |  Útil para analisar payloads JSON ou XML brutos |
| `File Extension` | `Match pattern` será comparado com a extensão do arquivo na requisição |  Compara extensões como `.php`, `.exe`, `.sh` |

:::note[nota]
Os campos `Last Editor` e `Last Modified` estão disponíveis apenas pela [API](https://api.azion.com).
:::

### Gerenciando Exceções via API

Você pode gerenciar Allowed Rules (Exceções) programaticamente usando a API da Azion. Isso permite:

- Automatizar a criação de exceções com base na análise do WAF Tuning
- Integrar a calibração do WAF em pipelines de CI/CD
- Construir ferramentas personalizadas para gerenciar configurações de segurança
- Atualizar ou desativar exceções em massa em múltiplos WAF Rule Sets

Para especificações completas da API e exemplos, consulte a [documentação de Exceções do WAF](/pt-br/documentacao/produtos/secure/firewall/web-application-firewall/custom-allowed-rules/#gerenciando-excecoes-via-api) e a [referência da API da Azion](https://api.azion.com/v4#/operations/list_waf_exceptions).

---

## Limites

:::tip
**Aumente limites** <br></br>
Você pode solicitar o aumento dos limites com base no seu plano. Contate o [time de suporte técnico](/pt-br/documentacao/servicos/suporte/) para fazer a solicitação.
:::

Estes são os **limites default**:

| Escopo | Limite |
| ------ | ------ |
| Tamanho de logs de Debug Rules | 1.5 kB |
| Consultas de WAF Tuning | 3 dias |
| Tamanho máximo do payload da requisição | 160 KB |

:::note
**Limite de Tamanho do Payload da Requisição**  
Payloads maiores que 160 KB não serão analisadas pelo WAF e acionarão a regra 2 do WAF.
:::

---