1. 背景
流量镜像提供流量采集服务,可将指定采集范围的流量按不同过滤条件过滤,并复制转发至私有网络 VPC 下的 VM 上,适用于安全审计、风险监测、故障排查、业务分析等场景。
1.1 工作流程
流量镜像关键组成为采集源和接收端,具体工作流程如下图所示。
采集源:VPC 中指定弹性网卡,可按所属网络、采集范围、采集类型和流量过滤等规则条件进行过滤。
接收端:采集流量将被复制转发至接收 IP 中。
1.2 使用场景
安全审计
在系统运行过程中,由于系统软件处理异常、网络设备硬件故障、计算机病毒或用户不正常使用等原因,造成网络流量异常或产生错误报文。通过流量镜像可以分析网络报文,定位故障产生的原因。
入侵检测
为保证网络系统资源机密性、完整性和可用性,可以使用流量镜像功能将流量复制转发到云服务器集群上,进行实时分析。
业务分析
使用流量镜像功能对业务流量进行镜像,可以清晰可视企业内部业务流量模型。
2. 方案设计
2.1 基本概念
流量采集
采集的源是某个虚机的网卡
采集类型
根据业务类型选择采集流量方向,支持“全部流量”、“出流量”和“入流量”。
流量过滤
不过滤:采集配置的全部流量。
五元组:采集满足五元组条件的流量。选择“五元组”后,需设置“协议”、“源网段”、“目的网段”、“源端口”和“目的端口”。
流量接收
通常要求采集流量的 IP 与流量接收 IP 在同一个 VPC 内,我们的设计可以允许跨VPC不跨地域
流量接收端可以为虚机添加弹性网卡,专门来接收和处理镜像的流量
2.2 方案选择
流量镜像需要依次经过采集、过滤、接收三个阶段的处理。
对于采集来说,可以在采集端计算节点使用ovs自带的mirror功能,对采集端port添加mirror相关配置来实现。
对于接收来说,需要有办法在接收端计算节点识别出镜像的流量,下发流表规则来转发给接收端port。由于镜像流量一定是从采集端port发出或接收的,所以在接收端可以通过采集端port的IP或MAC地址来识别这些流量。考虑port IP有可能有多个而且可能经常会变更,所以通过采集端port的MAC地址来匹配比较合适。
另外由于镜像流量的目的MAC不是接收端虚机网卡的MAC,接收端虚机需要打开网卡的混杂模式才能正常接收到镜像流量。
打开混杂模式: ifconfig eth0 promisc 关闭混杂模式: ifconfig eth0 -promisc
对于过滤来说,前期可以采用不过滤的方式来实现,后期增加五元组过滤的功能。过滤方式有两种可供选择:
分布式:在采集端计算节点上使用流表进行流量过滤。
集中式:使用网关在采集和接收之间进行流量过滤。
分布式 | 集中式 | |
---|---|---|
优点 | 流量路径简单。采集端虚机->采集端计算节点->接收端计算节点->接收端虚机 代码开发的工作量较小 | 配置管理方便。网关统一管理过滤规则,方便管理和故障排查 网关上有全量虚机的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-int:
ovs-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之间的流量镜像,扩展了此功能的使用场景。