# Identifique IPs de ataque com a API GraphQL

Você pode usar informações do conjunto de dados `workloadEvents` para monitorar padrões de tráfego, detectar anomalias e analisar potenciais ameaças. Este guia explica como filtrar os 5 IPs que geraram o maior número de requisições identificadas pelo WAF como ataques.

---

## Consulte os dados

Para consultar os 5 principais IPs gerando tráfego de ataque, de acordo com o WAF, siga os passos abaixo:

1. Acesse o GraphiQL Playground neste link: `https://api.azion.com/v4/metrics/graphql`.
    - Você deve estar logado na sua conta Azion. Caso contrário, você receberá uma mensagem de erro.
2. Envie uma consulta seguindo este formato:

```graphql
query TOP5IPsWAFRequests {
  workloadEvents(
    limit: 5
    filter: {
      tsRange: {
        begin:"2025-01-15T00:00:00"
        end:"2025-01-15T20:00:00"
      },
      wafMatchNe: "-"
      wafAttackFamilyNe: "-"
    }
    aggregate: {
      count: rows
    }
    groupBy:[remoteAddress, wafAttackFamily]
    orderBy:[count_DESC]
  )
  {
    remoteAddress
    wafAttackFamily
    count
  }
}
```

Onde:

| Campo | Descrição |
|----------|----------|
| `limit` | Especifica o número máximo de resultados a serem retornados. Neste caso, `5` |
| `filter` | Define os critérios usados para filtrar os dados retornados pela consulta |
| `tsRange` | Um subcampo de `filter`. Especifica um intervalo de tempo para filtrar os dados. Inclui campos `begin` e `end` para definir a data e hora de início e fim. Formato: `"YYYY-MM-DDTHH:mm:ss"`; exemplo: `"2024-04-11T00:00:00"` |
| `wafMatchNe` | Filtra entradas onde o campo `wafMatch` é igual a "-", significando que inclui apenas eventos com correspondências válidas do WAF |
| `wafAttackFamilyNe` | Filtra entradas onde o campo `wafAttackFamily` é igual a "-", garantindo que apenas eventos com famílias de ataque do WAF identificadas sejam incluídos |
| `count: rows` | Como um subcampo de `aggregate`, conta o número de eventos que correspondem aos filtros da consulta e agrupa |
| `orderBy` | Especifica a ordem em que os resultados devem ser retornados. Exemplos: `[count_DESC]`, para ordem decrescente, e `[count_ASC]`, para ordem crescente |
| `groupBy` | Especifica os campos pelos quais os resultados da consulta devem ser agrupados. No exemplo: `[remoteAddress, wafAttackFamily]` para agrupar por IP e pela família de ataques detectados pelo WAF |

:::note
Este exemplo recupera dados para `remoteAddress` e o total (count) de requisições identificadas pelo WAF como ataques dentro do intervalo de tempo especificado, agrupados primeiro por IPs e depois pela família de ataques. Para saber mais sobre os campos disponíveis, consulte a documentação sobre os [Campos da API GraphQL do Real-Time Events](/pt-br/documentacao/devtools/graphql-api/recursos/campos-gql-real-time-events/#httpevents-edge-applications-waf).
:::

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

```graphql
{
  "data": {
    "workloadEvents": [
      {
        "remoteAddress": "123.456.789.123",
        "wafAttackFamily": "$SQL, $XSS",
       "count": 1384
      },
       {
        "remoteAddress": "987.654.321.123",
        "wafAttackFamily": "$TRAVERSAL",
       "count": 1224
      },
      {
        "remoteAddress": "12.123.1.123",
        "wafAttackFamily": "$SQL, $XSS",
       "count": 1194
      },
       {
        "remoteAddress": "123.321.123.321",
        "wafAttackFamily": "$OTHERS",
       "count": 690
      },
      {
        "remoteAddress": "123.456.456.000",
        "wafAttackFamily": "$RFI",
       "count": 363
      }
    ]
  }
}
```

Onde: 

| Campo | Descrição |
|----------|----------|
| `remoteAddress` | Endereço IP da origem que gerou as requisições. Exemplo: 127.0.0.1 |
| `wafAttackFamily` | Categoria ou tipo de ataque detectado pelo Web Application Firewall (WAF), com base em suas características. Exemplo: `$SQL`, `$RFI`, `$SQL`, `$XSS`, `$OTHERS` |
| `count` | Requisições identificadas pelo WAF como ataques. Exemplo: `1194` |

:::tip
Para saber mais sobre os campos disponíveis, consulte a documentação sobre os [Campos da API GraphQL do Real-Time Events](/pt-br/documentacao/devtools/graphql-api/recursos/campos-gql-real-time-events/#httpevents-edge-applications-waf).
:::