cover_image

虚拟机流量镜像介绍

智汇云 360智汇云开发者
2025年03月10日 08:30

1. 背景

流量镜像提供流量采集服务,可将指定采集范围的流量按不同过滤条件过滤,并复制转发至私有网络 VPC 下的 VM 上,适用于安全审计、风险监测、故障排查、业务分析等场景。

1.1 工作流程

流量镜像关键组成为采集源和接收端,具体工作流程如下图所示。

采集源:VPC 中指定弹性网卡,可按所属网络、采集范围、采集类型和流量过滤等规则条件进行过滤。

接收端:采集流量将被复制转发至接收 IP 中。

图片

1.2 使用场景

安全审计

在系统运行过程中,由于系统软件处理异常、网络设备硬件故障、计算机病毒或用户不正常使用等原因,造成网络流量异常或产生错误报文。通过流量镜像可以分析网络报文,定位故障产生的原因。

入侵检测

为保证网络系统资源机密性、完整性和可用性,可以使用流量镜像功能将流量复制转发到云服务器集群上,进行实时分析。

业务分析

使用流量镜像功能对业务流量进行镜像,可以清晰可视企业内部业务流量模型。

2. 方案设计

2.1 基本概念

流量采集

采集的源是某个虚机的网卡

采集类型

根据业务类型选择采集流量方向,支持“全部流量”、“出流量”和“入流量”。

流量过滤

不过滤:采集配置的全部流量。

五元组:采集满足五元组条件的流量。选择“五元组”后,需设置“协议”、“源网段”、“目的网段”、“源端口”和“目的端口”。

流量接收

通常要求采集流量的 IP 与流量接收 IP 在同一个 VPC 内,我们的设计可以允许跨VPC不跨地域

流量接收端可以为虚机添加弹性网卡,专门来接收和处理镜像的流量

2.2 方案选择

流量镜像需要依次经过采集、过滤、接收三个阶段的处理。

  1. 对于采集来说,可以在采集端计算节点使用ovs自带的mirror功能,对采集端port添加mirror相关配置来实现。
  2. 对于接收来说,需要有办法在接收端计算节点识别出镜像的流量,下发流表规则来转发给接收端port。由于镜像流量一定是从采集端port发出或接收的,所以在接收端可以通过采集端port的IP或MAC地址来识别这些流量。考虑port IP有可能有多个而且可能经常会变更,所以通过采集端port的MAC地址来匹配比较合适。
    另外由于镜像流量的目的MAC不是接收端虚机网卡的MAC,接收端虚机需要打开网卡的混杂模式才能正常接收到镜像流量。
    打开混杂模式:ifconfig eth0 promisc关闭混杂模式:ifconfig eth0 -promisc
  3. 对于过滤来说,前期可以采用不过滤的方式来实现,后期增加五元组过滤的功能。过滤方式有两种可供选择:
  • 分布式:在采集端计算节点上使用流表进行流量过滤。
  • 集中式:使用网关在采集和接收之间进行流量过滤。
分布式
集中式

优点
流量路径简单。采集端虚机->采集端计算节点->接收端计算节点->接收端虚机
代码开发的工作量较小
配置管理方便。网关统一管理过滤规则,方便管理和故障排查
网关上有全量虚机的FDB信息,可以方便地进行镜像流量的转发
缺点
配置管理复杂。如过滤规则变更,可能涉及多个计算节点上的流表配置变更

流量路径增加一个网关处理的环节。采集端虚机->采集端计算节点->网关->接收端计算节点->接收端虚机
代码开发的工作量较大
综合考虑优缺点,采用集中式的流量过滤。

网关如何识别镜像流量,有两种方式:
  • 给镜像流量打标签:在采集端计算节点上通过流表给镜像流量的tos打标签,来帮助网关区分镜像流量和普通流量
    图片
  • 使用UDP特殊端口号:当前计算节点和网关之间的vxlan包都是使用UDP 4789端口,可以考虑镜像流量使用UDP 4790端口加以区分
    给镜像流量打标签
    使用UDP 4790端口

    优点
    代码开发的工作量较小
    网关可以直接通过UDP端口号区分收到的包是普通流量还是镜像流量,不需要解析包的内容,方便处理
    缺点
    网关需要解析包的内容来区分收到的包是普通流量还是镜像流量,处理流程较为复杂
    代码开发的工作量较大

    综合考虑优缺点,采用UDP  4800端口来标识镜像流量

2.3 使用限制

一个采集端虚机port只能属于一个流量镜像实例,即一条流量不能镜像给多个虚机。
一个接收端虚机port可以属于多个流量镜像实例,即多条流量可以镜像给一个虚机。

2.4 流程设计

图片

2.5 方案验证

在网关侧功能没有完成开发之前,可以验证计算节点直接转发镜像流量。

采集端

创建目的port为4790的vxlan port和ovs mirror规则进行流量采集,注意创建mirror规则使用“add bridge br-int”把新建的mirror加入bridge中,不能使用“set bridge br-int”,不然会覆盖bridge上原有的mirror。
ovs-vsctl add-port br-int vxlan11 -- set interface vxlan11 type=vxlan \options:local_ip=10.120.64.238 options:remote_ip=10.220.164.238 options:key=100 \options:dst_port=4790
ovs-vsctl -- --id=@qvo6fc32225-a8 get port qvo6fc32225-a8 \-- --id=@vxlan11 get port vxlan11 \-- --id=@m create mirror name=m0 select-src-port=@qvo6fc32225-a8 select-dst-port=@qvo6fc32225-a8 output-port=@vxlan11 \-- add bridge br-int mirrors=@m

接收端

创建目的port为4790的vxlan port用来接收镜像流量,在ovs添加流表规则,从此vxlan port收到的流量全部交给table 63处理,table 63中匹配采集端虚机的MAC地址,把镜像流量导流到目标虚机网卡。由于一个采集端虚机port只能属于一个流量镜像实例,所以根据采集端虚机的MAC地址可以唯一地确定接收端虚机port。
从外部ping采集端虚机的IP,并在接收端虚机内抓包,验证可以收到镜像流量。
ovs-vsctl add-port br-int vxlan11 -- set interface vxlan11 type=vxlan \options:local_ip=10.120.164.238 options:remote_ip=10.220.64.238 options:key=100 \options:dst_port=4790
br-intovs-ofctl add-flow br-int -Oopenflow13 "table=0,priority=200,in_port=vxlan11 actions=resubmit(,63)"ovs-ofctl add-flow br-int -Oopenflow13 "table=63,priority=1,dl_src=fa:16:3e:71:ab:62 actions=output:tap4bd35a8c-a5"ovs-ofctl add-flow br-int -Oopenflow13 "table=63,priority=1,dl_dst=fa:16:3e:71:ab:62 actions=output:tap4bd35a8c-a5"ovs-ofctl add-flow br-int -Oopenflow13 "table=63,priority=0 actions=drop"

3. 总结

虚拟机流量镜像实现了流量复制和转发的功能,帮助用户更好地监控和分析虚机的流量,提升网络安全性,排除入侵风险。具有使用方便的特点,用户可以根据自己的实际需求对流量进行分析,而不只是局限于云平台提供的监控数据。
此功能在利用了NAT网关原有功能的基础上扩展了NAT网关的功能。相对于公有云厂商的流量镜像功能来说,可以实现同地域跨vpc之间的流量镜像,扩展了此功能的使用场景。

继续滑动看下一个
360智汇云开发者
向上滑动看下一个