Traffic Mirroring

Traffic Mirroring用于将一个ENI上的流量拷贝到另一处应用,用于:

  • 持续的流量监控
  • 威胁检测
  • 故障排查

这些安全和监控的应用可以部署在单独的EC2实例上,也可以部署在NLB/GWLB后的一个集群上, 使用UDP协议监听。

例如部署在单独的EC2上:

image-20220912113823820

或者部署在NLB后面:

image-20220912113911306

Traffic Mirroring支持过滤,只提取出所关注的流量

Traffic Mirroring简化了操作,不用往EC2上再安装额外的agent

多说无益,动手玩一下

Traffic Mirroring实验

流程如下:

  1. 创建两台EC2, 一台作为source, 一台作为target。两者能互相通讯

  2. 创建Mirror Target

  3. 定义Traffic Filter

  4. 创建Mirror Session

创建两台EC2

创建两台EC2, 满足以下条件:

  1. Nitro机型,只有Nitro机型才支持traffic mirroring。这里选择了t3.large
  2. 两台EC2在同一个VPC。如果不在同一个VPC,则需要通过Transit Gateway或Peering打通
  3. 为了方便区分,两台机器分别命名为source_instancetarget_instance, source_instance将把流量镜像到target_instance

image-20220912135440038

  1. target_instance的UDP 4789端口要允许source_instance访问:

image-20220912120125022

创建Mirror Target

进入VPC页面,创建mirror target:

image-20220912115144720

这里我们要选择target-instance的ENI作为Mirror target,从EC2页面里找到id:

image-20220912115303946

选择这个ENI作为target:

image-20220912115513843

点击创建。

定义Traffic Filter

点击Create mirror filter:

image-20220912115444974

我们不关注SSH流量,所以把SSH流量进行过滤:

image-20220912115705286

image-20220912115720062

点击创建。

创建Mirror Session

点击Create traffic mirror session:

image-20220912115757303

我们需要source_instance的ENI作为流量镜像的源,从EC2页面中找到这个ENI id:

image-20220912115835010

Mirror source选择这个id,Mirror target在上一步已创建:

image-20220912115913999

Filter在上一步也已创建,选择这个filter:

image-20220912120221312

最后点击创建。

测试

此时两台EC2已经搭建好Traffic Mirroring, 我们分别SSH登录上去

image-20220912140227979

target instance,执行tcpdump,监控流量:

sudo tcpdump -i eth0 port not 22

source instance, 执行一些访问网络的命名:

curl google.com
curl baidu.com
...

此时在target instance,能实时观测到镜像过来的流量:

image-20220912140436854


在这个页面只能看到有限的信息,不够爽。如果想看到包详细的信息,可以将其保存为pcap格式:

sudo tcpdump -i eth0 port not 22 -w session1.pcap

收集完成后拉到本地,使用wireshark来分析:

image-20220912141220949

此时我们看到,所有http请求的详细信息都被记录下来