Cloudflare Docs
Support
Support
Visit Support on GitHub
Set theme to dark (⇧+D)

Uso do Cloudflare Logs (ELS) para investigar o tráfego DDoS (somente Enterprise)

Aprenda a identificar fontes de tráfego mal-intencionado classificando efetivamente o Cloudflare Logs (antigo ELS).

​​ Neste artigo


​​ Visão geral

Com o Cloudflare Logs (antigo ELS), você tem acesso a dados úteis para analisar o tráfego que pode mostrar padrões associados a um ataque de DDoS. Você pode executar esse tipo de análise, classificando os dados do Cloudflare Logs. Para começar, siga as etapas descritas abaixo e revise o exemplo de fluxo de trabalho fornecido.

Antes de seguir estas instruções, você precisa:


​​ Etapa 1: Reunir as informações necessárias antes de consultar os Cloudflare Logs

Reúna as seguintes informações:

  1. Endereço de email do administrador da zona
  2. ID da zona (encontrado em Visão geral > ID da zona )
  3. Chave da API do cliente
  4. Hora de início (formato de exemplo: 1529171100)
  5. Hora de término (formato de exemplo: 1529171100)

​​ 1ª etapa: Baixe e salve os logs

O endpoint do Cloudflare tem um limite de faixa de tempo de 1 hora e o tamanho do arquivo de logs deve estar abaixo de 1 GB por solicitação. Se o tamanho do arquivo exceder 1 GB, o download será cortado em 1 GB, mesmo que os eventos registrados a partir do momento solicitado não estejam incluídos. Para evitar truncar seus logs, diminua o tempo de 1 hora para 45 minutos e assim por diante até que o tamanho do arquivo de log esteja abaixo de 1 GB.

​​ Opção 1:

Faça o download de *todos* os campos do Cloudflare Logs, salve em els.txt:

Modelo:

curl -sv -o els.txt -H "X-Auth-Email: email" -H "X-Auth-Key: api key" "https://api.cloudflare.com/client/v4/zones/zone id/logs/received?start=starttime&end=endtime&fields=(curl -s -H "X-Auth-Email: email" -H "X-Auth-Key: api key" "https://api.cloudflare.com/client/v4/zones/zone id/logs/received/fields" | jq '. | to_entries[] | .key' -r | paste -sd "," -)"

Exemplo (com valores):

curl -sv -o els.txt-H "X-Auth-Email:monkey@bannana.com" -H "X-Auth-Key: api key" "https://api.cloudflare.com/client/v4/zones/5b5f0xxxcbfbaxxxxxx0416d22f7b/logs/received?start=1529171100&end=1529171100&fields=(curl -s -H "X-Auth-Email: monkey@bannana.com" -H "X-Auth-Key: api key" "https://api.cloudflare.com/client/v4/zones/zone id/logs/received/fields" | jq '. | to_entries[] | .key' -r | paste -sd "," -)"

​​ Opção 2:

Faça o download de campos *específicos* do Cloudflare Logs, salve em els.txt:

Este comando incluirá apenas os seguintes campos nos logs solicitados: CacheCacheStatus, CacheResponseBytes, CacheResponseStatus, CacheTieredFill, ClientASN .

Veja a lista completa dos campos do Cloudflare Logs aqui . Modelo:

curl -sv -o els.txt-H "X-Auth-Email:email" -H "X-Auth-Key:api key" "https://api.cloudflare.com/client/v4/zones/zone id/logs/received?start=starttime&end=endtime&fields=CacheCacheStatus,CacheResponseBytes,CacheResponseStatus,CacheTieredFill,ClientASN”

Exemplo (com valores):

curl -sv -o els.txt-H "X-Auth-Email:monkey@bannana.com" -H "X-Auth-Key:api key" "https://api.cloudflare.com/client/v4/zones/xx5x0xxxc45baxxxxxx0x6d23fxx/logs/received?start=1529171100&end=1529171100&fields=CacheCacheStatus,CacheResponseBytes,CacheResponseStatus,CacheTieredFill,ClientASN”

​​ Etapa 3: classificar os logs

Classifique os logs pelo valor do campo e envie-os para um arquivo.

  • Classifique pela resposta HTTP 200, com saída para o arquivo chamado els-200.txt
~ $ cat els.txt | grep " : 200, " > els-200.txt
  • Classifique pela resposta HTTP 525, com saída para o arquivo chamado els-525.txt
~ $ cat els.txt | grep " : 525, " > els-525.txt

​​ De onde vem o valor do campo " : 525, " ?

O padrão : 525, (dois pontos, código de status, vírgula) é exclusivo para o campo EdgeResponseStatus . A simples pesquisa no código de status HTTP 525 sem dois pontos e vírgula à direita também incluiria entradas de log com o padrão 525 em outros campos como EdgeStartTimeStamp , por exemplo, que contém muitos números e também pode conter a sequência numérica 525 .

captura de tela dos arquivos de saída com o campo EdgeResponseStatus realçado

Os arquivos de saída (els-200.txt e els-525.txt) não são muito legíveis como estão. Para visualizá-los em um formato mais legível, use jq no seguinte comando:

~ $ cat els-525.txt | jq '.'

​​ Contar as solicitações por campo e enviá-las para um arquivo

Neste exemplo, contamos solicitações por versão do protocolo SSL, que é indicado pelo campo ClientSSLProtocol no Cloudflare Logs (observe o período antes do nome do campo abaixo).

~ $ jq -r .ClientSSLProtocol els-200.txt | sort -n | uniq -c | sort -n > ClientSSLProtocol.txt
~ $ cat ClientSSLProtocol.txt

​​ Saída de exemplo:

captura de tela da saída de exemplo ao classificar logs do ELS

Os campos ClientRequestURI, ClientIP, ClientRequestUserAgent, ClientCountry e ClientRequestHost geralmente são os mais úteis para encontrar padrões de ataque nesses logs.

  • Classificar por ClientRequestUserAgent permite definir regras de bloqueio do User-Agent.
  • Classificando por ClientCountry permite definir regras de firewall com base no país.
  • Classificar por ClientRequestURI permitirá definir regras de limitação de taxa para as páginas com o maior número de solicitações.

​​ Exemplo de fluxo de trabalho

Freqüentemente, você precisará classificar por vários campos para analisar e identificar a origem de um ataque. Por exemplo, dê uma olhada no seguinte fluxo de trabalho:

Ação 1 : Classifique seus Cloudflare Logs baixados por respostas HTTP 200 , com saída para els-200.txt.

Reason: você não está interessado em respostas que já estão sendo bloqueadas pelo Cloudflare; ou seja, solicitações que resultam em uma resposta HTTP 503 ou 403. Uma solicitação que resulta em uma resposta 200 HTTP em nossa borda não é bloqueada pelo Cloudflare e provavelmente está indo até a origem se o ativo não estiver em cache na borda do Cloudflare. Tais solicitações, quando mal-intencionadas, são projetadas especificamente para sobrecarregar a origem.

How to:

~ $ cat els.txt | grep " : 200, " > els-200.txt

Ação 2 : Classifique seus " HTTP 200 apenas " logs por URI, com saída para els-200-URI.txt.

Reason: dentre 200 respostas, você deseja ver as páginas que estão sendo mais solicitadas. How to:

Encontre os principais URIs:

~ $ jq -r .ClientRequestURI els-200.txt | sort -n | uniq -c | sort -n > els-200-top-URIs.txt
~ $ cat els-200-top-URIs.txt

Escolha um URI dessa lista e envie as entradas de log com esse URI para seu próprio arquivo. Para fazer isso, substitua /ClientRequestURI/path/to/something/ no comando abaixo pelo URI de sua escolha:

~ $ cat els-200.txt | grep " /ClientRequestURI/caminho/para/algo/ " > els-200-URI-1.txt

Ação 3 : Contagem específica de URI, " HTTP 200 apenas " respostas por endereço IP, saída para els-200-URI-1-Top-IP.txt

Motivo : você deseja ver os principais endereços IP que estão solicitando o URI e resultando em uma resposta 200.

Como:

~$ jq -r .ClientIP els-200-URI-1.txt |sort -n |uniq -c |sort -n > els-200-URI-1-Top-IP.txt

Saída do conteúdo do arquivo:

~$ cat els-200-URI-1-Top-IP.txt

Você pode restringir 200 respostas HTTP pelo URI da solicitação e pelos IPs que estão solicitando esses URIs. Você também pode classificar os logs ao contrário, restringindo as entradas de log pelos principais endereços IP e vendo qual URI é mais solicitado por endereço IP.