使用 Cloudflare Logs(ELS)调查 DDoS 流量(仅限 Enterprise)

了解如何通过有效整理 Cloudflare Logs(过去称为 ELS)来辨别恶意流量的来源。 


概述

借助 Cloudflare Logs(以前称为 ELS),您可以访问实用的数据来分析可能呈现出 DDoS 攻击相关模式的流量。您可以通过整理 Cloudflare Logs 数据来进行这种分析。要开始操作,请按照下述步骤操作,并查看提供的示例工作流程。

在按照这些说明操作前,您需要:


第 1 步:查询 Cloudflare Logs 前先收集所需的信息

收集下列信息:

  1. 区域管理员电子邮件地址
  2. 区域 ID(可在 Overview > Zone ID 下找到)
  3. 客户端 API 密钥
  4. 开始时间(示例格式:1529171100)
  5. 结束时间(示例格式:1529171100)

为满足本教程需要,您可以使用以下网站将时间转换为 Unix 时间:https://www.epochconverter.com/

第 2 步:下载并保存日志

注意:Cloudflare 端点具有 1 小时范围限值,每次请求的日志文件大小也必须小于 1GB。如果文件大小超过 1GB,下载会在 1GB 处截断,即使所请求时间的日志事件未能包含在内。为避免截断日志,请将时间从 1 小时缩短到 45 分钟之类的时长,直到日志文件大小小于 1GB。

选项 1:

下载 Cloudflare Logs 中的 *所以* 字段,并保存到 els.txt:

模板:

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 "," -)"

示例(以及值):

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 "," -)"

选项 2:

下载 Cloudflare Logs 中的 *特定* 字段,并保存到 els.txt:

此命令仅在您请求的日志中包含以下字段:CacheCacheStatus、CacheResponseBytes、CacheResponseStatus、CacheTieredFill 和 ClientASN

请从此处查看 Cloudflare Logs 的完整列表。 

模板:

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

示例(以及值):

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

第 3 步:整理日志

按照字段值整理日志,并输出到文件中。

按 HTTP 200 响应整理并输出到 els-200.txt 文件:

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

按 HTTP 525 响应整理并输出到 els-525.txt 文件

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

字段值“:525,”源于何处?

模式 :525,(冒号、状态代码、逗号)是 EdgeResponseStatus 字段独有的。如果简单地搜索 HTTP 状态代码 525 而不加冒号和结尾逗号,则也会包含其他字段(例如 EdgeStartTimeStamp)中的模式 525,包括许多数字并且也可能包含数字序列 525

注意:原样的输出文件(els-200.txt 和 els-525.txt)非常不易读。若要以更易读的格式查看,请在以下命令中使用 jq:

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

按字段统计请求并输出到文件

在本例中,我们统计 SSL 协议版本的请求数,这在 Cloudflare Logs 中用 ClientSSLProtocol 字段表示(注意以下以下名称名称前的句点)。

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

示例输出:

ClientRequestURI、ClientIP、ClientRequestUserAgent、ClientCountryClientRequestHost 字段通常在这些日志中查找攻击模式时最有帮助的字段。

  • 按照 ClientRequestUserAgent 整理可以设置 User Agent Blocking 规则。
  • 按照 ClientCountry 整理可以基于国家/地区设置防火墙规则。
  • 按照 ClientRequestURI 整理可以为请求数最多的页面设置 Rate Limiting 规则。


示例工作流程

通常,您需要按照多个字段来整理,以分析和辨别攻击的来源。例如,请查看以下工作流程:

操作 1:按照 HTTP 200 响应整理您下载的 Cloudflare Logs,并输出到 els-200.txt。

原因:您不关心 Cloudflare 已阻止的响应;即,导致 HTTP 响应 503403 的请求。在我们边缘网络导致 200 HTTP 响应的请求不会被 Cloudflare 阻止,有可能会一路通达源站(如果它未在 Cloudflare 边缘缓存)。具有恶意目的人可专门设计此类请求,使源站负担过重。

操作方法

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


操作 2
:按照 URI 整理“仅 HTTP 200”日志,并输出到 els-200-URI.txt。

原因:在 200 响应中,您想要查看被请求次数最多的页面。

操作方法

查找排名最前的 URI:

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

从此列表中挑一个 URI 并将含有该 URI 的日志条目输出到单独的文件。为此,可将以下命令中的 /ClientRequestURI/path/to/something/ 替换您选择的 URI:

~$ cat els-200.txt| grep "/ClientRequestURI/path/to/something/" > els-200-URI-1.txt


操作 3
:按照 IP 地址统计特定 URI 的“仅 HTTP 200”响应,并输出到 els-200-URI-1-Top-IP.txt

原因:您想要查看请求该 URI 并导致 200 响应的排名最前的 IP 地址。

操作方法:

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

输出文件的内容:

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

您可以按照请求 URI 和请求这些 URI 的 IP 来缩小 200 HTTP 响应的范围。也可以通过相反的方式整理日志,按照排名最前的 IP 地址缩小日志条目范围,再查看各个 IP 地址请求最多的 URI 是哪些。

 
需要注意的是,有大量请求来自单个用户代理或 IP 并不一定表示请求者具有恶意目的。 
Not finding what you need?

95% of questions can be answered using the search tool. This is the quickest way to get a response.