# Como criar um WAF rule set

import Tabs from '~/components/tabs/Tabs'
import Code from '~/components/Code/Code.astro'

[Web Application Firewall (WAF)](/pt-br/documentacao/produtos/secure/firewall/web-application-firewall/) permite que você crie conjuntos de regras (rule set) referentes a possíveis [tipos de ameaças](/pt-br/documentacao/produtos/secure/firewall/web-application-firewall/#waf-main-settings). Você pode definir esses conjuntos de regras no Rules Engine para o Firewall executar seus comportamentos.

Este guia criará um conjunto de regras para bloquear ameaças da família **SQL Injection** para prevenir ataques que tentam uma consulta `select`, por exemplo. Após [criar um firewall](/pt-br/documentacao/produtos/guias/secure/firewall-definir-main-settings/) e [ativar o módulo WAF](/pt-br/documentacao/produtos/guias/secure/firewall-definir-main-settings/#modulos), siga os passos descritos a seguir.

---

<Tabs client:visible>
    <Fragment slot="tab.console">Console</Fragment>
    <Fragment slot="tab.api">API</Fragment>

<Fragment slot="panel.console">
1. Acesse o [Azion Console](/pt-br/documentacao/produtos/guias/como-acessar-o-azion-console/) > **WAF Rules**.
2. Clique no botão **+ WAF Rule**.
3. No campo **Name**, dê um nome único e fácil de lembrar para o seu conjunto de regras WAF. Neste caso, `Conjunto de regras SQL Injection`.
4. Na seção **Threat Type Configuration**, procure pela opção **SQL Injection**.
5. Escolha a opção **Sensitivity** **High** para esta ameaça, para que o WAF não permita requisições consideradas como uma ameaça de SQL Injection.
6. Certifique-se de que o switch **Active** esteja habilitado.
7. Clique no botão **Save**.

Repita este processo com outros tipos de ameaças para os quais você deseja criar um conjunto de regras.

Agora, você precisa aplicar o conjunto de regras que criou no **Rules Engine**. Para fazer isso:

1. Ainda no Azion Console, vá para **Firewall**.
2. Selecione o firewall no qual você deseja aplicar a nova regra.
3. Selecione a aba **Rules Engine**.
4. Clique no botão **+ Rule**.
5. Dê um nome para sua regra e, opcionalmente, uma descrição.
6. Na seção **Criteria**, selecione a variável `Request Args`.
7. Como operador de comparação, selecione `matches`.
8. Como argumento, adicione `content-type=select`.
9. Na seção **Behaviors**, selecione **Set WAF Rule Set**.
10. Como argumentos:
    - No primeiro menu suspenso, selecione o conjunto de regras que deseja usar. Neste caso, `SQL Injection rule set`.
    - No segundo menu suspenso, selecione o modo que você deseja que o firewall opere: **Learning** ou **Blocking**. Neste caso, **Blocking**.
11. Clique no botão **Save**.
</Fragment>

<Fragment slot="panel.api">
1. Execute a seguinte requisição `POST` para criar uma regra, substituindo `[TOKEN VALUE]` pelo seu [personal token](/pt-br/documentacao/produtos/guias/personal-tokens/):

<Code lang="bash" code={`
curl --request POST \
  --url https://api.azion.com/v4/edge_firewall/wafs \
  --header 'Accept: application/json' \
  --header 'Authorization: Token [TOKEN]' \
  --header 'Content-Type: application/json' \
  --data '{
    "active": true,
    "name": "My WAF",
    "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. Copie o valor de `id`.
3. Execute a seguinte requisição `POST` para criar uma regra, substituindo `[TOKEN VALUE]` pelo seu [personal token](/pt-br/documentacao/produtos/guias/personal-tokens/), a variável `<edge_firewall_id>>` com o [ID do firewall](https://api.azion.com/#015cb4a3-8fa2-4625-9792-2cc271e184eb) e `<id_conjunto_regras_waf>` com o ID que você copiou:

<Code lang="bash" code={`
curl --request POST \
  --url https://api.azion.com/v4/edge_firewall/firewalls/<edge_firewall_id>/request_rules \
  --header 'Accept: application/json' \
  --header 'Authorization: Token [TOKEN]' \
  --header 'Content-Type: application/json' \
  --data '{
    "name": "SQL Injection rule",
    "active": true,
    "criteria": [
      [
        {
          "conditional": "if",
          "variable": "\${request_args}",
          "operator": "matches",
          "argument": "content-type=select"
        }
      ]
    ],
    "behaviors": [
      {
        "type": "set_waf",
        "attributes": {
          "waf_id": <waf_id>
        }
      }
    ]
  }'
`} />

| Chave | Descrição |
| --- | --- |
| `name` | Nome da regra |
| `comportamentos` | Array que armazena objetos que definem comportamentos |
| `criterios` | Array que armazena objetos que definem critérios |

Consulte a [documentação da API da Azion](https://api.azion.com/#ae9cdca8-3949-4b25-b1e6-2e071cd193fc) para saber mais sobre critérios e objetos de comportamento.

Aguarde alguns minutos para que as alterações se propaguem.

:::dica
Confira a [documentação da API da Azion](https://api.azion.com/) para saber mais sobre todos os recursos disponíveis via API.
:::
</Fragment>

</Tabs>

---