背景介绍

因为VPC的Flow log不是实时的, VPC flow log在聚合工夫距离内捕捉数据后,须要额定的工夫来解决数据并将其公布到 CloudWatch Logs 或 Amazon S3。此额定工夫,对于公布到 CloudWatch Logs 约为 5 分钟,对于公布到 Amazon S3 约为 10 分钟。流日志服务在此额定的工夫内以最大限度提供。在某些状况下,您的日志可能会提早超过后面提到的 5 到 10 分钟的额定工夫,无奈满足一些客户对于流量剖析的实时性要求,因而客户会询问咱们是否反对一些第三方的流量剖析零碎来对流量进行实时的监控与剖析。

在2021年的2月23日,亚马逊云中国区发表了VPC Traffic Mirroring的性能落地[1],应用此性能,能够联合一些第三方的流量剖析零碎,解决客户对于流量剖析的实时性需要。在文档[2]中,列出了联合应用Suricata进行流量剖析的实例,在此篇文档中进行测试与扩大。

依据文档[3]如下测试步骤,只能在log中看到Vxlan的镜像报文,无奈对报文内内容(例如HTTP申请)进行记录与剖析:
Step 1: Install the Suricata software on the EC2 instance target
Step 2: Create a traffic mirror target
Step 3: Create a traffic mirror filter
Step 4: Create a traffic mirror session

依据下列配置与测试,可能胜利记录客户的HTTP申请。

  1. 应用下列命令更新Suricata Rule sudo suricata-update
  2. 通过查看更新后的rule,能够看到http相干的rule检测前会先应用“http $HOME_NET any -> $EXTERNAL_NET any”匹配数据报文的源目IP,$HOME_NET和$EXTERNAL_NET是在Suricata的配置文件/etc/suricata/suricata.yaml中做的定义,因而更改其配置文件,设置$HOME_NET和$EXTERNAL_NET均为any,配置后如下: HOME_NET: "any" EXTERNAL_NET: "any"
  3. 因为通过Traffic Mirror镜像过去的报文是具备Vxlan封装的,因而须要Suricata对报文进行Vxlan的解封装,更改配置文件/etc/suricata/suricata.yaml使其对报文进行Vxlan的解封装,配置后如下: decoder: vxlan: enabled: true ports: $VXLAN_PORTS # syntax: '8472, 4789'
  4. 更改配置文件/etc/suricata/suricata.yaml开启HTTP Log,配置后如下: - http-log: enabled: yes filename: http.log append: yes
  5. 重启Suricata过程使更改后的配置失效 (须要先kill掉以后suricata过程,删除rm -rf /var/run/suricata.pid文件,而后再次运行命令“suricata -c /etc/suricata/suricata.yaml -k none -i eth0 -D”启动过程),重启过程不会删除之前曾经生成的日志.
  6. 进行测试,在镜像流量的源设施上拜访www.baidu.com curl www.baidu.com 在镜像流量的指标设施上(装置了Suricata的设施)查看/var/log/suricata/http.log,能够看到申请被胜利记录: 03/15/2021-07:04:00.347144 www.baidu.com[]/[]curl/7.61.1**GET[]HTTP/1.1[]200[]2381 bytes[]172.31.27.94:39626 -> 220.181.38.15

补充阐明:

1.Suricata报文解决流程图

2.Suricate应用特色检测的形式来辨认异样流量,其特色库存储在文件/var/lib/suricata/rules/suricata.rules中

3.更多对于Suricata的信息,能够参考[4]

参考文档:

[1]https://www.amazonaws.cn/en/n...
[2]https://docs.amazonaws.cn/vpc...
[3]https://docs.amazonaws.cn/vpc...
[4]https://suricata-ids.org/feat...