上期介绍了使用WAF服务来应对应对频繁访问的攻击,这期为大家再推荐一款好用的无服务日志分析工具– Athena。
回顾上期,我们通过使用WAF实现了对恶意访问的 IP 地址的暂时屏蔽,然而这种只是短期的限制,在一定时候后,AWS会将这些IP地址重新释放,为什么会是这样处理呢?因为这些 IP 会有由于用户误操作而被关进“小黑屋”的 IP 地址,同时也夹杂着恶意攻击的 IP 地址。要实现进一步的判断这些恶意的攻击,还需要分析出这些真实的恶意访问 IP,再把这些 IP 直接写入到 WAF 的黑名单中,而把那些因为误操作的 IP 短时间惩罚限制其访问,在一定时间后释放掉这部分 IP,使其可以正常访问您的 web。
我们的 Web 在经历过一天的访问后,会有大量的访问记录被记录在日志文件中,同样保护我们 Web 的 Amazon WAF 也会有大量的日志文件产生,对这些日志文件进行查询分析会是一项艰巨的工作。因此我们向您隆重推出AWS的Athena服务。
Amazon Athena 是什么?
Amazon Athena 是一种交互式查询服务,让您能够使用标准 SQL 直接在 Amazon Simple Storage Service (Amazon S3) 中轻松分析数据。只需在Amazon Web Services 管理控制台中执行几项操作,即可将 Athena 指向 Amazon S3 中存储的数据,并开始使用标准 SQL 运行临时查询,然后在几秒钟内获得结果。
Athena 无服务器,无需设置或管理基础设施,您只能支付运行的查询。 Athena 自动扩展—并行运行查询—因此,即使是大型数据集和复杂查询,结果也很快。
话不多说,直接上干货。
相信大家一定都有使用过 WAF,WAF 的日志是这样的:
这里我们需要关注几个重要的字段“timestamp”,这代表发生及记录的时间戳,利用在线转换工具可以把时间转换为常见的时间。
这里可以看到请求的 IP 来源。
要实现对日志文件的查询分析,我们可以通过使用 Athena 来帮助我们。
从 Consloe 中进入 Athena 界面。
选择默认的数据库或创建一个新的数据库,之后开启一个新的窗口。
Location 这里要输入WAF log 文件在 S3 中的路径。
只需要写出文件的上一级目录,不需要写出文件名称。
这里进行“运行查询”,Athena会将S3中的WAF日志文件按照上述建表语句生成一张名为:waf_logs的表,保存在Athena的数据库中供后续查询分析。这里执行完会显示执行结果及执行所花费的时间。
建表语句为(仅供参考):
CREATE EXTERNAL TABLE waf_logs (
`timestamp` bigint ,
`formatversion` int ,
`webaclid` string ,
`terminatingruleid` string ,
`terminatingruletype` string ,
`action` string ,
`httpsourcename` string ,
`httpsourceid` string ,
`rulegrouplist` array<string> ,
`ratebasedrulelist` array<struct<ratebasedruleid:string,limitkey:string,maxrateallowed:int>> ,
`nonterminatingmatchingrules` array<string> ,
`httprequest` struct<clientip:string,country:string,headers:array<struct<name:string,value:string>>,uri:string,args:string,httpversion:string,httpmethod:string,requestid:string> )
ROW FORMAT SERDE
'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
'paths'='action,formatVersion,httpRequest,httpSourceId,httpSourceName,nonTerminatingMatchingRules,rateBasedRuleList,ruleGroupList,terminatingRuleId,terminatingRuleType,timestamp,webaclId')
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
's3:// '
完成上一步,我们的 WAF 日志就已经被传入 Athena 中,下面我们借助Athena 开始查询分析 WAF 日志。
分析目标:对 WAF 日志进行检索,从指定的时间点开始到之后的1小时内,每5分钟为一个检查的周期(共12个周期),查出 IP 在不同检查周期内各被阻挡的次数。
开启一个新的查询窗口。
同样的,我们还可以查询日志中所有的 IP 的各检查周期中被阻挡的次数。
查询所有IP的语句:
SELECT
FROM_UNIXTIME(
FLOOR(timestamp / 1000 / 300) * 300
) AS window,
httprequest.clientip AS ip,
COUNT(*) AS count
FROM waf_logs
WHERE from_unixtime("timestamp"/1000) < (TIMESTAMP '2020-06-30 22:55:00.000' + interval '1' hour)
GROUP BY 1,2
ORDER BY 1,2
执行后,我们可以看到日志中所有 IP 在不同检查周期中被阻挡的情况。这里发现37.x.x.x这个 IP 多次出现,下面可对这个 IP 被阻挡的情况再做分析。
输入查询语句:
SELECT
FROM_UNIXTIME(
FLOOR(timestamp / 1000 / 300) * 300
) AS window,
COUNT(*) AS count
FROM waf_logs
WHERE httprequest.clientip = '这里写指定要查询的IP地址 '
AND from_unixtime("timestamp"/1000) < (TIMESTAMP ' 2020-06-30 22:55:00.000' + interval '1' hour)
GROUP BY 1
ORDER BY window
进行查询后,会显示出查询扫描的数据大小及花费的时间,在结果中可以看到划分出的时间周期中,37.x.x.x这个Ip地址在各检查周期中被阻挡的次数。可以判定这个ip地址有异常的请求行为,可以将其列入WAF的黑名单中。
通过使用Athena得出上述查询的结果,可以帮助我们轻松在waf日志中找出多次被阻挡的可疑IP,并查询其具体的请求时段,帮助我们判定是否需要将其列入您网站的黑名单中,减少外部的恶意请求。
此外, 关于Athena的定价费用,使用 Amazon Athena您只需为您执行的查询付费。Amazon Athena 直接从 Amazon S3 中查询数据。使用 Athena 查询数据无需额外支付存储费用。您将按标准 S3 费率支付存储、请求和数据传输费用。默认情况下,查询结果存储在您选择的 S3 存储桶中,也按标准 Amazon S3 费率计费。因此,通过使用Athena来处理日志分析业务,可以极大的帮您节约实际的费用成本,避免闲置资源产生的成本浪费。