# Como bloquear endereços IP de exit nodes Tor

import DocButton from '~/components/webkit/DocButton.vue';
import Tabs from '~/components/tabs/Tabs'
import Code from '~/components/Code/Code.astro'

**Tor exit nodes** representam o ponto final para a conexão da **rede Tor** com a internet. Já que o tráfego da rede Tor não é mais criptografado, os dados acessados podem se tornar visíveis para o nó, resultando em preocupações com a segurança ou até mesmo em tráfego malicioso.

A Azion disponibiliza a network list **Azion IP Tor Exit Nodes** para todos os usuários registrados na plataforma. Essa lista pode ser utilizada para configurar um comportamento usando Rules Engine para bloquear todas as requisições vindas dos IPs contidos na network list.

<DocButton href="/pt-br/documentacao/produtos/secure/firewall/network-shield/network-lists/" label="saiba mais sobre Network Lists" kind="secondary" size="medium" />

---

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

<Fragment slot="panel.console">
Para criar uma regra:

1. Acesse o [Azion Console](/pt-br/documentacao/produtos/guias/como-acessar-o-azion-console/) > **Firewall**.
2. Selecione o firewall no qual deseja configurar a regra.
3. Clique na aba **Rules Engine**.
4. Clique no botão **+ Rule**.
5. Dê um nome à sua regra e, opcionalmente, uma descrição.
6. Na seção **Criteria**, selecione a variável `Network`.
7. Como operador de comparação, selecione **matches**.
8. Como argumento, selecione a lista `Azion IP Tor Exit Nodes`.
9. Na seção **Behavior**, selecione **Drop (Close Without Response)** na lista de comportamentos.
10. Clique no botão **Save**.

Se a sua aplicação receber uma requisição gerada a partir de um IP que está na lista, o firewall recusará a requisição.
</Fragment>

<Fragment slot="panel.api">
1. Execute a seguinte requisição `GET` para obter o `id` da lista **Azion IP Tor Exit Nodes**:

<Code lang="bash" code={`
curl --request GET \
  --url https://api.azion.com/v4/workspace/network_lists \
  --header 'Accept: application/json' \
  --header 'Authorization: Token [TOKEN VALUE]
`} />

2. Você receberá uma resposta semelhante a esta:

<Code lang="json" code={`
{
  "count": 1,
  "total_pages": 1,
  "schema_version": 3,
  "links": {
    "previous": null,
    "next": null
  },
  "results": [
    {
      "id": 2,
      "last_editor": "user@email.com",
      "last_modified": "2023-11-14T21:35:39.808175Z",
      "list_type": "ip_cidr",
      "name": "Azion IP Tor Exit Nodes",
      "country_list": [],
      "ip_list": [
        "192.168.0.5"
      ]
    }
  ]
}
`} />


3. Execute a seguinte requisição `POST` no seu terminal, substituindo `[TOKEN VALUE]` pelo seu [personal token](/pt-br/documentacao/produtos/guias/personal-tokens/), a variável `<edge_firewall_id>` pelo seu [ID do firewall](https://api.azion.com/#015cb4a3-8fa2-4625-9792-2cc271e184eb), e o valor `<network_list_id>` pelo ID da lista de nós de saída do Tor:

<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 VALUE]' \
  --header 'Content-Type: application/json' \
  --data '{
    "name": "Block Tor Exit Nodes",
    "active": true,
    "criteria": [
      [
        {
          "conditional": "if",
          "variable": "\${network}",
          "operator": "is_in_list",
          "argument": <network_list_id>
        }
      ]
    ],
    "behaviors": [
      { "type": "drop" }
    ]
  }'
`} />

| Chave | Descrição |
| --- | --- |
| `name` | Nome da regra |
| `behaviors` | Array que armazena objetos que definem comportamentos |
| `criteria` | 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 obter mais informações sobre critérios e objetos de comportamento.

4. Você receberá a seguinte resposta:

<Code lang="json" code={`
{
  "results": {
    "name": "Block Tor Exit Nodes",
    "is_active": true,
    "behaviors": [
      {
        "name": "drop"
      }
    ],
    "criteria": [
      [
        {
          "variable": "network",
          "operator": "is_in_list",
          "conditional": "if",
          "argument": "2"
        }
      ]
    ],
    "last_modified": "2023-12-12T21:36:20.114073Z",
    "last_editor": "user@email.com",
    "id": 29268,
    "order": 5
  },
  "schema_version": 3
}
`} />

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

Se a sua aplicação receber uma requisição gerada a partir de um IP que está na lista, o firewall recusará a requisição.

:::tip
Confira a [documentação da API da Azion](https://api.azion.com/) para obter mais informações sobre todas as funcionalidades disponíveis via API.
:::
</Fragment>

</Tabs>

---