阿里云DDoS高防 - 访问与攻击日志实时分析(二)

摘要: 本文介绍了如何配置DDoS日志分析功能,结合实际场景详细介绍了如何使用日志对DDoS访问与攻击日志进行分析与图形化操作。

概述

本文介绍了如何配置DDoS日志分析功能,结合实际场景详细介绍了如何使用日志对DDoS访问与攻击日志进行分析与图形化操作。

前提配置

刚进入DDoS高防控制台的全量日志下,在界面引导下开通日志服务并授权操作后。就可以给特定的网站启用日志分析功能了。


分析界面介绍

当选择某一个网站点击日志分析时,会展示基于这个网站的日志分析界面:

这个查询界面大致可以划分为如下几个功能区域:

1. 日志库与项目信息

当为特定DDoS的防护网站打开了日志分析的功能时, DDoS会实时将相关网站的访问和防护日志导入到您拥有的日志服务的专属日志库中。默认打开日志分析的网站的日志都会集中放到这一个日志库中。
专属的日志库名字是ddos-pro-logstore,存放于日志服务的项目ddos-pro-project-阿里云账户ID中。国内项目在杭州区域,国外项目在香港区域。

当选择特定网站时,区域#4查询框会自动填入特定的查询语句,如:

matched_host: aliyun.com

来展示属于这个网站的日志。关于查询语句框的具体信息可以参考后面内容。

2. 日志时间范围选择器

点击这里可以选择要分析的日志的时间范围,可以是相对时间,也可以使整点时间,或者特定时间:


注意:可以查询的最久日志由日志库的周期决定,日志库默认的周期是3天(3天前的日志会自动删除),默认情况下只能查询到过去3*24小时的日志。如果需要查询更长时间的日志,可以参考这里。

对于选择器的每个选项的更详细的介绍,可以参考这里

3. 辅助配置工具栏

这里是查询操作后的一些辅助工具。包括:
另存为快速查询:将当前区域#4查询框的内容保存并赋予名字,以便复用(如何如何需要在日志服务的高级管理界面中操作)。也可以用于配置告警时使用。
另存为告警:这里是配置告警的控制界面,基于某一个已经保存的快速查询进行报警配置,具体请参考这里。

4. 查询语句输入框

这里基于已经配置的时间范围内,对日志进行搜索。如果保留空白或者输入*表示不做任何过滤,查询选择时间范围内的所有日志。

默认选择一个网站的分析日志时,会自动输入当前选择的网站(例如aliyun.com)的查询条件:

matched_host: aliyun.com

这里可以按照语法自由输入,进行全文搜索或者基于字段的搜索,查询框支持换行(Ctrl + Enter)、语法高亮和提示功能等。

4.1 全文搜索

全文搜索,不需要指定特定的字段,直接输入关键字(可以用双引号括起来),多个关键字以空格(或and)分隔即可,

示例1:多关键字查询

这里搜索包含所有www.aliyun.comerror的日志。例如:

www.aliyun.com error

也可以是:

www.aliyun.com and error

示例2:多关键字条件查询

这里搜索所有包含www.aliyun.com并且包含error或者404的日志。例如:

www.aliyun.com and (error or 404)

示例3:前缀查询

这里搜索所有包含www.aliyun.com并且包含failed_开头关键字。例如:

www.aliyun.com and failed_*

注意:查询只支持后缀加*,不支持前缀*,如:*_error

4.2 字段搜索

基于特定字段的更精准的搜索,并且支持数值类型字段的比较,主要形式是字段:值或者字段 >= 值这种形式,之间用andor等进行组合。也可以和全文搜索组合使用(也是通过andor等连接)。

示例1:多字段查询

这里搜索所有www.aliyun.com被CC攻击的日志:

matched_host: www.aliyun.com and cc_blocks: 1

如果要搜索某个客户端1.2.3.4对网站www.aliyun.com的所有错误404的访问日志,可以这样:

real_client_ip: 1.2.3.4 and matched_host: www.aliyun.com and status: 404

注意:这里使用的字段matched_hostcc_blocksreal_client_ipstatus等都是DDoS访问与攻击日志的字段,详细的字段列表和信息,可以参考这里

示例2:数值字段查询

这里搜索所有慢请求日志(响应时间超过5秒):

request_time_msec > 5000

也支持区间查询,查询响应时间大于5秒且小于等于10秒(左开右闭)的日志:

request_time_msec in (5000 10000]

等价于:

request_time_msec > 5000 and request_time_msec <= 10000

示例3:字段存在与否查询

针对特定字段的存在与否进行查询:

  • 查询存在ua_browser字段的日志:ua_browser: *
  • 查询不能存在ua_browser字段的日志:not ua_browser: *

4.3 完整字段

DDoS网站访问日志和攻击日志具体有哪些字段可以进行查询,它们的含义、类型、格式以及可能的值有哪些,可以参考这里

4.4 详细的查询语法

关于完整的查询语法,例如操作符关键字、优先级、如何查询包含引号的字符等,可以参考这里

5. 符合条件的日志分布

这里一目了然的展示了符合查询时间和查询语句的日志的时间分布。以时间为横轴,数量纵轴的柱状图形式展示。下方展示了查询的日志总数。

注意:可以在柱状图上滑动以选择更小范围的时间区域,时间选择器会自动更新为选择的时间范围,并刷新结果。

6. 分页的日志详细信息

这里以分页的形式展示了每一条日志的详细内容,包括时间、内容以及其中的各个字段。可以对列进行排序、对当前页进行下载,也可以点击#6.1 下载与展示列调整中齿轮按钮,选择特定的字段进行展示等。

注意:可以在页面中点击相应字段的值(或者分词),那么会自动在#4 查询语句输入框中自动加入相应的搜索条件。

例如鼠标点击request_method: GET中的值GET,会自动给搜索框加入如下语句:

原来的搜索语句 and request_method:  GET

7. 字段列表

字段列表展示了日志库的所有字段,它们的含义、类型、格式以及可能的值有哪些,可以参考这里。

点击每一个字段旁的眼睛按钮,可以展开对这个字段的各个值的分布。例如点击content_type将会展示来自当前查询下请求内容类型的分布:

可以点击链接approx_distinct,展示这个字段有多少个唯一的值。也可以点击上图的小图标,展示具体的分布信息。

如果选择的是数值型的字段,如status,则提供最大最小等值的快捷统计方式:

注意:以上操作会切换查询界面为统计界面并展示结果,我们会在后面内容介绍。

统计界面介绍

当在查询界面中的#7. 字段列表中点击某一个字段的快捷统计,会将当前查询界面切换为统计界面,同时注意到,#4. 查询语句输入框也会动被修改一个较长的语句。

以查询界面中的#6. 字段列表中选择某一列如content_type点击approx_distinct链接展示的统计为例,如下:

这个统计界面大致可以划分为如下几个功能区域:
v2

可以看到,与查询界面相比,主要的变化部分就是:#4. 查询与统计语句与输入框以及6#. 统计工具栏#7. 统计图表展示区

其他部分并没有变化。

查询与统计语句输入框

以查询界面中的#6. 字段列表中选择某一列如content_type点击approx_distinct链接展示的统计为例。查询语句会从原来的查询语句如:

matched_host: "www.aliyun.com"

变成:

matched_host: "www.aliyun.com" | select  count(1) as pv , content_type from log group by content_type order by pv desc limit 10

换行展示为:

matched_host: "www.aliyun.com"  | 
select  count(1) as pv , content_typegroup by content_typeorder by pv desc limit 10

可以看到,这里用一个|进行分割,前面部分是查询,后面部分是统计。这里的逻辑是:先对选择时间范围内的日志进行查询,满足条件的日志再会根据统计语句的进行统计。
其中查询的部分的用法可以参考前面的内容。这里着重介绍统计的部分。

这里统计的语法其实是一个近乎标准的SQL/92语法。以这里的例子为例,其实就是对字段content_type进行分组group by,计算各种值的总数,按照个数排序,并展示前10个。

统计SQL的一些特殊约定

约定1:from log

这里可以看到,并没有SQL标准里面的from 表格名语句,其实可以写上:from log,但一般省略:

matched_host: "www.aliyun.com"  | 
select  count(1) as pv , content_typefrom log     -- 一般这行可以不写group by content_typeorder by pv desc limit 10

约定2:limit 100

这里可以看到有一个limit 10,表示获取前10条,如果不写,那么默认其实是返回前100条,也就相当于自动写上了limit 100

日志时间的操作

每一条DDoS日志都有一个字段time表示日志的时间,其格式如2018-05-31T20:11:58+08:00。分别是年-月-日T时:分:秒+时区,这里的时区是UTC+8区,也就是北京时间。
同时,每条日志都有一个内置字段:__time__,也表示这条日志的时间,以便在统计时进行基于时间的计算。其格式为Unix时间戳,本质是一个自从1970-1-1 0:0:0 UTC时间开始的累计过去的秒数。因此实际使用时,经过可选的计算后,还是要经过格式化才可以展示。

示例1:选择并展示时间

这里在特定时间范围内,选择网站www.aliyun.com被CC攻击的最新10条日志,展示其中时间、来源IP以及访问客户端,直接使用字段time

matched_host: www.aliyun.com and cc_blocks: 1 
|  select time, real_client_ip, http_user_agentorder by time desclimit 10


示例2:计算时间

如果想要知道CC攻击已经过去几天了,可以使用__time__进行计算:

matched_host: www.aliyun.com  and cc_blocks: 1 
|  select time, round((to_unixtime(now()) - __time__)/86400, 1) as "days_passed",             real_client_ip, http_user_agentorder by time desclimit 10

结果如下:

SQL说明:这里用round((to_unixtime(now()) - __time__)/86400, 1),先用to_unixtimenow()获取的时间转化为Unix时间戳,再与内置时间字段__time__相减,获得已经过去的时间秒数,最后/86400(一天的总秒数),再用函数round(data, 1)圆整为小数点后1位数的值。就得到了每条攻击日志,距离现在已经过去了几天。

示例3:基于特定时间分组统计

如果想知道特定时间范围内,某个网站每天被CC攻击的趋势如何,使用如下SQL:

matched_host: www.aliyun.com  and cc_blocks: 1 
| select date_trunc('day', __time__) as dt, count(1) as PV group by dt order by dt 

得到如下的结果:

然后可以在图标工具栏中选择线图将结果以折线图的形式展示:
v2

SQL说明:这里使用计算的内置时间字段__time__,传给函数date_trunc('day', ..)进行时间按天对齐,将每条日志分组到了其所属的天的分区中进行统计总数(count(1)),并按照分区时间块排序。
函数date_trunc第一个参数提供更多其他单位进行对齐,包括secondminiutehourweekmonthyear等,更多请参考这里

图表说明:这里配置分组的时间为X轴,各个分组内总数的值为Y轴即可。

示例4:基于时间分组统计

如果想知道更灵活的分组下时间规律,例如某个网站每5分钟被CC攻击的趋势如何,就需要进行数学计算,可以使用如下SQL:

matched_host: www.aliyun.com  and cc_blocks: 1 
| select from_unixtime(__time__ - __time__% 300) as dt, count(1) as PV group by dt order by dt limit 1000

得到如下的结果:
v1

然后可以在图标工具栏中选择线图将结果以折线图的形式展示:
v2

SQL说明:这里使用计算的内置时间字段计算__time__ - __time__% 300(同时使用函数from_unixtime做了格式化),将每条日志分组到了一个5分钟(300秒)的分区中进行统计总数(count(1)),并按照分区时间块排序,获得前1000条(相当于选择时间内的前83小时的数据)。

图表说明:这里配置分组的时间为X轴,各个分组内总数的值为Y轴即可。

更多时间相关的函数

更多关于时间解析的函数,例如将一个时间格式转化为另外一个格式,需要使用date_parsedate_format,可以参考这里

客户端IP相关的统计

DDoS日志中有反映真实客户端IP的字段real_client_ip,但某些情况下无法拿到用户真实IP时(例如用户通过代理并跳转头中IP有误的情况),可以直接使用直连客户端IP的字段remote_addr来代替。

示例1:攻击者国家分布

这里对某个网站进行CC攻击的来源国家分布:

matched_host: www.aliyun.com  and cc_blocks: 1 
| SELECT ip_to_country(if(real_client_ip='-', remote_addr, real_client_ip)) as country, count(1) as "攻击次数" group by country

得到结果:
v1

在图标工具栏中选择地图,并配置好域后,可以得到一张基于世界地图的分布图:
v2

SQL说明:这里先用函数if(condition, option1, option2)来选择字段real_client_ip或者real_client_ip(当real_client_ip-时)。然后对结果IP传给函数ip_to_country得到这个IP对应的国家信息。

图表说明:这里选择世界地图,并配置国家对应的统计结果字段为country,反应颜色深度的列是攻击次数即可。

示例2:访问者省份分布

如果期望获得更细腻度的基于省份的分布,可以使用另外一个函数ip_to_province,例如:

matched_host: www.aliyun.com  and cc_blocks: 1 
| SELECT ip_to_province(if(real_client_ip='-', remote_addr, real_client_ip)) as province, count(1) as "攻击次数" group by province

得到结果:
v1

在图标工具栏中选择地图后选中国地图,可以得到:
v2

SQL说明:这里使用了另外一个IP函数ip_to_province来获得一个IP的所属省份。注意:如果是国外的IP,依然会尝试转化为其国家所属省份(州),但在选择中国地图展示时,会无法展示出来。

示例3:攻击者热力分布

如果期望获得一张攻击者的热力图,可以使用另外一个函数ip_to_geo,例如:

matched_host: www.aliyun.com  and cc_blocks: 1 
| SELECT ip_to_geo(if(real_client_ip='-', remote_addr, real_client_ip)) as geo, count(1) as "攻击次数" group by geolimit 10000

得到结果:
v1
然后配置地图可以得到:
v2

SQL:这里使用了另外一个IP函数ip_to_geo来获得一个IP的所在经纬度,并获取前1万条。
图表说明:这里选择地图后选高德地图,配置对应属性后,选择显示热力图即可。

更多IP地理函数

基于IP的更多解析功能,例如获得IP所属运营商ip_to_provider、判断IP是内网还是外网ip_to_domain等,可以参考这里。

更多SQL统计操作

更多关于SQL的统计操作,例如更多SQL函数(字符串、正则表达式等)、分组(group by)、分组后查询(having)等,可以参考这里。

图表操作介绍

上面已经介绍如何在SQL统计结果上,选择表格(默认)展示结果;选择线图展示趋势;选择地图展示分布。日志服务还提供更多丰富的图表进行展示,包括如下:
v1

关于每个图表如何具体配置,可以参考这里

日志字段

字段名称例子备注
__topic__主题 固定为ddos_access_log
body_bytes_sent请求发送Body的大小(字节)2 
content_type内容类型application/x-www-form-urlencoded 
host源网站api.zhihu.com 
http_cookie请求cookiek1=v1;k2=v2 
http_referer请求refererhttp://xyz.com没有则为-
http_user_agent请求User AgentDalvik/2.1.0 (Linux; U; Android 7.0; EDI-AL10 Build/HUAWEIEDISON-AL10) 
http_x_forwarded_for通过代理跳转IP- 
https是否httpstrue可能值:true、false
matched_host匹配的配置的源站(可能是泛域名)*.zhihu.com未匹配则为-
real_client_ip访问客户的真实IP1.2.3.4获取不到时为-
isp_line线路信息电信BGP、电信、联通等
remote_addr请求连接的客户端IP1.2.3.4 
remote_port请求连接的客户端端口号23713 
request_length请求长度(字节)123 
request_method请求的HTTP方法GET 
request_time_msec请求时间(微秒)44 
request_uri请求路径/answers/377971214/banner 
server_name匹配到的host名api.abc.com没有匹配到则为default
statusHTTP状态200 
time时间2018-05-02T16:03:59+08:00 
cc_actionCC防护策略行为close可能的值: none、challenge、pass、close、captcha、wait、login、n等
cc_blocks表示CC防护是否阻止11-阻止,其他表示通过
cc_phaseCC防护策略server_ip_blacklist可能的值:seccookie、server_ip_blacklist、static_whitelist、 server_header_blacklist、server_cookie_blacklist、server_args_blacklist、qps_overmax等
ua_browser浏览器ie9 
ua_browser_family浏览器系列internet explorer 
ua_browser_type浏览器类型web_browser 
ua_browser_version浏览器版本9.0 
ua_device_type客户端设备类型computer 
ua_os客户端操作系统windows_7 
ua_os_family windows 
upstream_addr回源地址列表1.2.3.4:443IP:Port,多个地址用逗号分隔
upstream_ip实际回源地址IP1.2.3.4 
upstream_response_time回源响应时间(秒)0.044 
upstream_status回源请求HTTP状态200 
user_id 12345678 

原文链接

本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/521477.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【面试妥了】史上最全Spark面试题

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 游骑小兵责编 | 阿秃Spark问题精华Q&#xff1a;什么是Spark&#xff1f;A&#xff1a;简单理解&#xff0c;Spark是在Hadoop基础上的改进&#xff0c;是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架…

RabbitMQ的5种队列_订阅模式_入门试炼_第7篇

解读&#xff1a; 1、1个生产者&#xff0c;多个消费者 2、每一个消费者都有自己的一个队列 3、生产者没有将消息直接发送到队列&#xff0c;而是发送到了交换机 4、每个队列都要绑定到交换机 5、生产者发送的消息&#xff0c;经过交换机&#xff0c;到达队列&#xff0c;实现&…

python定期自动运行_干货分享 | 适合 Python 入门的 8 款强大工具,不会就你还不知道吧!...

点击上方“人工智能Corner”&#xff0c;“星标或置顶公众号”干货分享&#xff0c;第一时间送达Python是一种开源的编程语言&#xff0c;可用于Web编程、数据科学、人工智能以及许多科学应用。学习Python可以让程序员专注于解决问题&#xff0c;而不是语法。由于Python相对较小…

图解 Python 算法

普通程序员&#xff0c;不学算法&#xff0c;也可以成为大神吗&#xff1f;对不起&#xff0c;这个&#xff0c;绝对不可以。可是算法好难啊~~看两页书就想睡觉……所以就不学了吗&#xff1f;就一直当普通程序员吗&#xff1f;如果有一本算法书&#xff0c;看着很轻松……又有…

阿里技术人的第一节课

摘要&#xff1a; 本期的分享我们邀请到了阿里巴巴研发效能事业部的董越老师&#xff0c;他是阿里巴巴内部培训百年技术课堂的著名讲师&#xff0c;他讲的《百技课程-代码服务》是每一位入职技术童鞋必修的一门课&#xff0c;我们也将这种阿里内训技术首次面向业界公开&#xf…

RabbitMQ的5种队列_路由模式_入门试炼_第8篇

生产者 5.8.3.费者1(前台系统) 消费2&#xff08;搜索系统&#xff09;

ios安装python的步骤_如何利用 Python 爬虫实现给微信群发新闻早报?(详细)

点击上方“AirPython”&#xff0c;选择“加为星标”第一时间关注 Python 技术干货&#xff01;1. 场景经常有小伙伴在交流群问我&#xff0c;每天的早报新闻是怎么获取的&#xff1f;其实&#xff0c;早期使用的方案&#xff0c;是利用爬虫获取到一些新闻网站的标题&#xff0…

阿里云AI如何助攻世界杯?视频集锦背后的技术实践

摘要&#xff1a; 本届世界杯互联网直播的顺利进行&#xff0c;离不开各大云计算厂商的支持。在这其中&#xff0c;阿里云是当之无愧的“C位“&#xff0c;除了优酷外&#xff0c;阿里云还支撑了CNTV、CCTV5客户端&#xff0c;为全网70%的世界杯直播流量保驾护航。 对于世界杯这…

h3c交换机划分vlan配置_华为、H3C、锐捷三家交换机配置命令详解

一、华为交换机基础配置命令1、创建vlan&#xff1a;//用户视图&#xff0c;也就是在Quidway模式下运行命令。system-view //进入配置视图 [Quidway] vlan 10 //创建vlan 10&#xff0c;并进入vlan10配置视图&#xff0c;如果vlan10存在就直接进入vlan10配置视图 [Q…

程序员怎么悄无声息迈过36岁大槛?

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 陈树义责编 | 阿秃我们很多时候经常会迷茫、焦虑&#xff0c;总是在想 35 岁的中年危机怎么办&#xff1f;很多时候与其焦虑&#xff0c;还不如想想看应该怎么办。很幸运的是&#xff0c;我在知道上遇到了一位年过中年还从事…

【开源】Tsar——灵活的系统和应用采集软件

摘要&#xff1a; 在开源人的盛会LinuxCon ContainerCon CloudOpen中国&#xff08;简称LC3&#xff09;大会上&#xff0c;阿里云CDN团队的空见&#xff08;花名&#xff09;&#xff0c;为大家分享了开源的系统和应用采集软件Tsar的背景、设计思路和用法、模块开发以及未来…

看不见的战斗——阿里云护航世界杯直播容灾实践

摘要&#xff1a; 1978年&#xff0c;中国人开始在电视机上看到世界杯&#xff0c; 中央电视台对阿根廷队参加的半决赛以及阿根廷和荷兰的决赛进行了录播。1982年世界杯&#xff0c;宋世雄坐在一家香港宾馆的小电视前进行解说&#xff0c;然后央视再把香港这家电视台提供的画面…

树莓派安装python3.5_树莓派 | 04 安装基于python3.5的tensorflow,解决python版本不匹配问题...

创建日期&#xff1a;2019-03-03 系列文章 安装流程 在终端中依次执行 sudo apt install libatlas-base-dev pip3 install tensorflow&#xff08;安装python3的CPU版本tensorflow&#xff0c;目前是不可能正常使用的&#xff0c;因为树莓派自带的Python3是3.5&#xff0c;而用…

使用fastjson工具类json字符串和对象之间的转换

文章目录一、引入依赖二、创建user实体类三、测试一、引入依赖 <!--字符串和对象操作工具类 Start--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.62</version></dependenc…

崩管嵌入式还是单片机,盘就完事了

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 小枣君责编 | 阿秃大家好&#xff0c;我是小枣君。凡是从事计算机或电子信息相关领域工作的童鞋&#xff0c;一定都听说过嵌入式和单片机吧&#xff1f;很多人应该知道&#xff0c;这两个名词和硬件系统有着非常密切的关系。…

DRDS分布式SQL引擎—执行计划介绍

摘要&#xff1a; 本文着重介绍 DRDS 执行计划中各个操作符的含义&#xff0c;以便用户通过查询计划了解 SQL 执行流程&#xff0c;从而有针对性的调优 SQL。DRDS分布式SQL引擎 — 执行计划介绍前言数据库系统中&#xff0c;执行计划是对 SQL 如何执行的形式化表示&#xff0c;…

易商云页面认证失败是什么情况_Serverless 云原生框架 Malagu:认证与授权

认证与授权组件 malagu/security 。Malagu 框架结合传统后台管理系统和云计算平台的认证与授权理念&#xff0c;并借鉴了 Spring Security 设计思想&#xff0c;抽象了一套通用的认证与授权模型。Spring Security 对前后端分离架构支持不是特别友好&#xff0c;Malagu 框架在这…

sharepoint文件夹本地同步_mac文件同步软件-Resilio Sync Home

Resilio Sync Mac版是Mac平台上的一款文件同步软件&#xff0c;Resilio Sync Mac版使用起来非常的简单、方便。你可以通过链接、秘钥或二维码的方式共享你电脑里的任意文件夹&#xff0c;接收方也可以把共享文件存放在任意位置。Resilio Sync Home Pro for mac(文件同步软件)​…

(需求实战_进阶_01)SSM集成RabbitMQ 关键代码讲解、开发、测试

背景&#xff1a; 为了减轻服务器的压力&#xff0c;现在原有项目的基础上集成消息队列来异步处理消息! 此项目是企业真实需求&#xff0c;项目的代码属于线上生产代码&#xff0c;直接用于生产即可&#xff01; 此项目采用MQ发送消息模式为:路由模式&#xff0c;如果对RabbitM…