---
name: azion-crie-e-aplique-um-waf-rule-set
description: >-
  Crie um WAF rule set com as famílias de ameaças e a sensibilidade que você escolher e aplique-o a um firewall com um behavior Set WAF.
---

# Crie e aplique um WAF rule set

Crie um rule set do [Web Application Firewall (WAF)](/pt-br/documentacao/plataforma/firewall/#waf) e aplique-o a um firewall com uma regra do Rules Engine. As duas tarefas rodam a partir do Azion Console, da Azion CLI ou da API.

Para uma primeira execução que termina em uma requisição bloqueada, consulte [Primeiros passos com WAF](/pt-br/documentacao/plataforma/firewall/waf/primeiros-passos/). Aquela página fixa cada opção do caminho. Esta as deixa em aberto: você escolhe as famílias de ameaças, a sensibilidade de cada uma e o modo.

---

Selecione uma interface. Os pré-requisitos e as duas tarefas seguem essa escolha.

## Pré-requisitos

- Uma conta Azion. Para criar uma, consulte [Como criar uma conta na Azion](/pt-br/documentacao/fundamentos/criar-uma-conta/).
- Um firewall com o módulo WAF habilitado. O WAF é o único módulo que um firewall deixa desabilitado por padrão. Consulte [Defina as configurações principais de um firewall](/pt-br/documentacao/guias/seguranca-de-aplicacoes/firewall-e-waf/firewall-definir-main-settings/).
- Um workload vinculado a esse firewall, para que a regra que você criar receba tráfego. Consulte [Vincule um firewall a um workload](/pt-br/documentacao/guias/seguranca-de-aplicacoes/firewall-e-waf/proteja-seu-dominio/).

**Console**

- Acesso ao Azion Console. Para entrar, consulte [Como acessar o Azion Console](/pt-br/documentacao/guias/plataforma/conta-e-billing/como-acessar-o-azion-console/).

**CLI**

- A [Azion CLI](/pt-br/documentacao/devtools/cli/), instalada e autorizada.

**API**

- Um personal token e o `curl` para enviar as requisições. Para criar um token, consulte [Personal Tokens](/pt-br/documentacao/fundamentos/personal-tokens/).

---

## Crie o rule set

Um rule set carrega até oito famílias de ameaças, e cada família tem a sua própria sensibilidade. A sensibilidade fixa o score que uma requisição precisa alcançar para que essa família a bloqueie. Toda família começa em `medium`. Uma sensibilidade maior bloqueia em um score menor: ela pega ataques que carregam menos evidência e, junto com eles, recusa mais tráfego legítimo. Para o que cada família detecta e o que cada nível custa, consulte [WAF Rule Sets](/pt-br/documentacao/plataforma/firewall/waf/rule-sets/).

**Console**

O formulário lista as oito famílias, então toda sensibilidade é definida em um só lugar. Para criar o rule set no Azion Console:

1. **Abra a página WAF Rules**

   Acesse o [Azion Console](https://console.azion.com/) > **Edge Libraries** > **WAF Rules**.

2. **Selecione + WAF Rule**

3. **Nomeie o rule set**

   Na seção **General**, informe um **Name**. Por exemplo: `checkout-waf`.

4. **Defina a sensibilidade de cada família de ameaças**

   A seção **Threat Type Configuration** lista oito famílias, cada uma abrindo em *Sensitivity Medium*. Por exemplo, defina **SQL Injection** como *Sensitivity High*.

5. **Habilite o switch Active**

6. **Salve o rule set**

O rule set aparece em **WAF Rules**, com o seu **Threat Type Configuration** e o seu **Status**. Ele não pontua nada enquanto uma regra do Rules Engine não o nomear.

**CLI**

O `--thresholds` recebe pares `threat=sensitivity` separados por vírgula. Uma criação que omite a flag carrega as oito famílias em `medium`. Para criar o rule set com a Azion CLI:

1. **Execute o comando de criação**

   ```bash
   azion create waf --name "checkout-waf" --active true --rulesets 1 \
     --thresholds "sql_injection=medium,cross_site_scripting=medium,directory_traversal=medium,evading_tricks=medium,file_upload=medium,identified_attack=medium,remote_file_inclusion=medium,unwanted_access=medium"
   ```

2. **Leia a saída**

   O comando imprime o id do rule set:

   ```text
   Created WAF with ID 12350
   ```

O rule set está ativo e roda no ruleset `1`. Anote o id: a regra da próxima seção o nomeia.

**API**

Cada entrada de `thresholds` nomeia uma família de ameaças e a sensibilidade que ela carrega. Para criar o rule set:

1. **Envie a requisição de criação**

   Substitua `[TOKEN VALUE]` pelo seu personal token:

   ```bash
   curl --request POST \
     --url https://api.azion.com/v4/workspace/wafs \
     --header 'Accept: application/json' \
     --header 'Authorization: Token [TOKEN VALUE]' \
     --header 'Content-Type: application/json' \
     --data '{
     "name": "checkout-waf",
     "active": true,
     "product_version": "1.0",
     "engine_settings": {
       "engine_version": "2021-Q3",
       "type": "score",
       "attributes": {
         "rulesets": [1],
         "thresholds": [
           { "threat": "cross_site_scripting", "sensitivity": "medium" },
           { "threat": "directory_traversal", "sensitivity": "medium" },
           { "threat": "evading_tricks", "sensitivity": "medium" },
           { "threat": "file_upload", "sensitivity": "medium" },
           { "threat": "identified_attack", "sensitivity": "medium" },
           { "threat": "remote_file_inclusion", "sensitivity": "medium" },
           { "threat": "sql_injection", "sensitivity": "medium" },
           { "threat": "unwanted_access", "sensitivity": "medium" }
         ]
       }
     }
   }'
   ```

2. **Leia a resposta**

   O status é `202`, e `"state": "pending"` diz que a Azion aceitou o rule set e ainda está propagando-o:

   ```json
   {
     "state": "pending",
     "data": {
       "id": 12349,
       "active": true,
       "name": "checkout-waf",
       "last_editor": "user@example.com",
       "last_modified": "2026-01-01T12:00:00.000000Z",
       "product_version": "1.0",
       "engine_settings": {
         "engine_version": "2021-Q3",
         "type": "score",
         "attributes": {
           "rulesets": [1],
           "thresholds": [
             { "threat": "cross_site_scripting", "sensitivity": "medium" },
             { "threat": "directory_traversal", "sensitivity": "medium" },
             { "threat": "evading_tricks", "sensitivity": "medium" },
             { "threat": "file_upload", "sensitivity": "medium" },
             { "threat": "identified_attack", "sensitivity": "medium" },
             { "threat": "remote_file_inclusion", "sensitivity": "medium" },
             { "threat": "sql_injection", "sensitivity": "medium" },
             { "threat": "unwanted_access", "sensitivity": "medium" }
           ]
         }
       },
       "version_id": null,
       "version_state": null,
       "is_versioned": false,
       "version": null
     }
   }
   ```

Anote o `id`. A regra da próxima seção o nomeia.

> **nota**
>
> Um array `thresholds` com menos de oito entradas é aceito. O rule set então carrega apenas as famílias que você enviou. Um `threat` repetido não é aceito: ele responde `500` com `10067 Internal Server Error`.

---

## Aplique o rule set a um firewall

Uma regra do [Rules Engine for Firewall](/pt-br/documentacao/plataforma/firewall/rules-engine/) seleciona requisições pelos seus próprios critérios e executa behaviors sobre elas. O behavior `Set WAF` nomeia um rule set e um modo. Uma regra carrega no máximo um behavior `Set WAF`.

O modo pertence ao behavior, e não ao rule set, e é obrigatório. O `Logging` pontua uma requisição, registra-a e a entrega. O `Blocking` recusa uma requisição cujo score alcança um limiar da sua família. Para a ordem em que passar de um para o outro, consulte [Boas práticas de Firewall](/pt-br/documentacao/plataforma/firewall/boas-praticas/#waf).

> **Atenção**
>
> Um critério baseado em `${request_args}` corresponde apenas a uma requisição que carrega uma query string. Todo `POST` que mantém o seu payload no body passa então sem ser pontuado. Baseie o critério em `${request_uri}`.

**Console**

Para aplicar o rule set no Azion Console:

1. **Abra o firewall**

   Acesse o [Azion Console](https://console.azion.com/) > **Firewalls** e selecione o firewall vinculado ao seu workload.

2. **Selecione a aba Rules Engine**

3. **Selecione + Rule**

4. **Nomeie a regra**

   Informe um nome para a regra. Por exemplo: `Apply checkout-waf`.

5. **Defina o critério**

   Na seção **Criteria**, selecione a variável `Request Uri`, o operador *starts with* e `/` como argumento.

6. **Adicione o behavior Set WAF**

   Na seção **Behaviors**, selecione **Set WAF** e então selecione `checkout-waf` como o rule set.

7. **Defina o modo como Blocking**

8. **Salve a regra**

O firewall pontua contra o rule set todas as requisições que recebe.

**CLI**

O `azion create firewall-rule` recebe apenas `--firewall-id` e `--file`, então o behavior e o modo viajam no JSON. Para aplicar o rule set com a Azion CLI:

1. **Escreva a regra em um arquivo**

   Salve o seguinte como `fw-rule.json`, com o id do seu rule set em `waf_id`:

   ```json
   {
     "name": "Apply checkout-waf",
     "active": true,
     "description": "",
     "criteria": [
       [
         {
           "conditional": "if",
           "variable": "${request_uri}",
           "operator": "starts_with",
           "argument": "/"
         }
       ]
     ],
     "behaviors": [
       {
         "type": "set_waf",
         "attributes": {
           "waf_id": 12350,
           "mode": "blocking"
         }
       }
     ]
   }
   ```

2. **Crie a regra**

   Substitua `<firewall-id>` pelo id do seu firewall:

   ```bash
   azion create firewall-rule --firewall-id <firewall-id> --file fw-rule.json
   ```

3. **Leia a saída**

   O comando imprime o id da regra:

   ```text
   Created Firewall Rule with ID 123457
   ```

O firewall pontua contra o rule set todas as requisições que recebe.

**API**

O shell expande `${request_uri}`, então o body viaja em um arquivo, e não inline. Para aplicar o rule set:

1. **Escreva a regra em um arquivo**

   Salve o seguinte como `rule.json`, com o id do seu rule set em `waf_id`:

   ```json
   {
     "name": "Apply checkout-waf",
     "active": true,
     "criteria": [
       [
         {
           "conditional": "if",
           "variable": "${request_uri}",
           "operator": "starts_with",
           "argument": "/"
         }
       ]
     ],
     "behaviors": [
       {
         "type": "set_waf",
         "attributes": {
           "waf_id": 12349,
           "mode": "blocking"
         }
       }
     ]
   }
   ```

2. **Envie a requisição de criação**

   Substitua `<firewall-id>` pelo id do seu firewall:

   ```bash
   curl --request POST \
     --url https://api.azion.com/v4/workspace/firewalls/<firewall-id>/request_rules \
     --header 'Accept: application/json' \
     --header 'Authorization: Token [TOKEN VALUE]' \
     --header 'Content-Type: application/json' \
     --data @rule.json
   ```

3. **Leia a resposta**

   O `202` ecoa a regra e acrescenta dois campos que a API atribui, `description` e `order`:

   ```json
   {
     "state": "pending",
     "data": {
       "id": 123456,
       "name": "Apply checkout-waf",
       "last_editor": "user@example.com",
       "last_modified": "2026-01-01T12:00:00.000000Z",
       "created_at": "2026-01-01T12:00:00.000000Z",
       "active": true,
       "criteria": [
         [
           {
             "conditional": "if",
             "variable": "${request_uri}",
             "operator": "starts_with",
             "argument": "/"
           }
         ]
       ],
       "behaviors": [
         {
           "type": "set_waf",
           "attributes": {
             "waf_id": 12349,
             "mode": "blocking"
           }
         }
       ],
       "description": "",
       "order": 1
     }
   }
   ```

O firewall pontua contra o rule set todas as requisições que recebe.

Um body que omite `mode` é recusado com `400`:

```json
{"errors":[{"code":"10059","title":"Required Field","detail":"This field is required.","status":"400","source":{"pointer":"/data/behaviors/0/attributes/mode"}}]}
```

O campo aceita `logging` ou `blocking`. Qualquer outro valor responde `400` com `10039 Invalid Choice`.

Uma nova regra leva alguns minutos para alcançar a infraestrutura distribuída da Azion. Até que isso aconteça, uma requisição ainda pode ser respondida como era antes de a regra existir.

---

## Próximos passos

- [WAF Rule Sets](/pt-br/documentacao/plataforma/firewall/waf/rule-sets.md): Os campos de um rule set, as oito famílias de ameaças e os cinco níveis de sensibilidade.
- [Score e modos](/pt-br/documentacao/plataforma/firewall/waf/score-e-modos.md): Como um score é construído, o que uma sensibilidade custa e o que cada modo faz.
- [Ajuste um WAF rule set](/pt-br/documentacao/guias/seguranca-de-aplicacoes/firewall-e-waf/tune-waf.md): Leia o que o rule set correspondeu e transforme um falso positivo em uma exceção.
- [Boas práticas de Firewall](/pt-br/documentacao/plataforma/firewall/boas-praticas.md#waf): Quando mover um rule set de Logging para Blocking e até onde aumentar uma família.
