基于OpenFlow 流表的云网络异常行为主动监测和处理 龚燕波,刘瑛,陈健林
(中国移动通信集团广东有限公司,广州 510000)
摘 要 云数据中心的网络异常行为不仅对网络设备造成严重业务负荷,同时也显著影响云用户使用体验。云计算环 境中的共享资源模式和云用户迥然不同的业务形态,使得网络分析和异常行为定位变得更加困难。本文针对云数据中心的网络异常行为进行特征提取和分析,并基于SDN云数据中心的网络架构和原理进行深度剖析,总结出基于OpenFlow流表的网络异常行为判定方法。同时采用自动化运维手段,制定了一套网络异常行为自动化检测和封堵的智能系统,实现对网络异常行为的快速处理。
关键词 SDN;网络异常行为;OpenFlow流表
中图分类号 TP39 文献标识码 A 文章编号 1008-5599(2019)07-0034-06
收稿日期:2019-03-11
1 云数据中心的网络特点
云计算数据中心提供虚拟资源服务的方式具有自助、弹性、灵活和按需的特点,云网络也作为服务提供给客户。为满足多样化的业务服务需求,云网络应为不同用户和应用提供动态、按需、隔离的网络环境,并支持自定义网络业务链的连接服务。
rc延时电路
云计算是一种多用户共享一个基础设施的技术模式,即在一台物理服务器上通过虚拟化技术虚拟出多台虚拟机,相应的网络服务需要通过物理服务器上的虚拟交换机和硬件网络设备来实现网络虚拟化。图1是一个典型的云数据中心业务平面的网络流量图,涉及到的设备有物理服务器、虚拟机、虚拟交换机、硬件网络设备等,其中同样颜的虚拟机属于同一个云用户。可以看出,从服务器的物理网卡至交换机的物理链路,所有用
户的真实网络流量拓扑交融在一起,很难区分。随着服务器数量增多,数据中心网络复杂度呈指数增长。在如此复杂的网络架构下,面对用户形态各异的业务,想要从网络层面分析客户的流量与业务行为,愈发困难。
在云网络环境中倘若没有及时发现并封堵某个虚拟机的网络异常行为,不仅会导致同一区域内的其它虚拟机有感染病毒的风险,还会给数据中心的网络设备带来较重的业务负荷。云数据中心往往出现过虚拟机发出大量小分组攻击导致出口云防火墙达到处理性能瓶颈而引发设备个别模块异常宕机,虚拟机发出大量无效填充数据分组导致相应网络链路达到流量转发瓶颈等多起网络故障。网络异常行为的 连锁影响,会降低数据中心提供的网络服务质量,在行业和客户中带来负面印象。及时发现并有效封堵这类网络异常行为,是云网络运维人员需要尽快解决的难题。
2 基于OpenFlow流表的SDN云数据中心
2.1 云数据中心的SDN架构
采用SDN(软件定义网络)来提供云数据中心网络服务是业界技术发展趋势,也是研究热点。SDN是一种新型网络架构,其核心技术就是把网络设备的控制平面和转发平面分离,采用控制器集中控制的方式来替代原本分散在各个网络设备上的控制引擎功能,通过定义开放的可编程接口实现业务的灵活定制。SDN架构分为业务编排层、控制层和设备转发层3个层面。在云数据中心的SDN解决方案,其业务编排层通常为openstack,控制层为SDN控制器,设备转发层为虚拟交换机和SDN硬件网关。其中SDN控制器是整个架构的核心,负责统一管理和配置转发层的网络资源与设备。
为实现灵活的业务配置,云数据中心的SDN解决方案在网络管理平面引入了OpenFlow流表,实现控制器对虚拟交换机的灵活控制;在网络业务平面引入了VxLAN技术,即在原有underlay网络上构建了一层overlay网络,从而摆脱VLAN数量制约,并同时为更多的云用户提供网络服务。
2.2 OpenFlow流表的工作机制
在SDN云数据中心内,最常订购的网络产品就是虚拟子网和端口,其中端口用于绑定在虚拟机上。简而言之,同一虚拟机子网的两个端口之间通信,类似于传统网络的二层网络数据交互。下面我们用一个案例来剖析下云数据中心内OpenFlow流表的工作机制。
某司业务主管在云数据中心订购了一个私网地址为192.168.100.0/24虚拟子网以及两台虚拟机,两台虚拟机分别对应两个端口。这两台虚拟机分别是用于部署Web应用的192.168.100.2和部署后端Mysql数据库的192.168.100.3,网关则是192.168.100.1,如图2所示。基于云数据中心的资源调度机制,我们可以查询到Web虚拟机位于物理服务器10.0.4.2上,Mysql虚拟机位于物理服务器10.0.4.3上。这两台物理机上都已安装OVS
(虚拟交换机),OVS就是前文提到的SDN转发设备。
OVS与硬件交换机类似,具备多个虚拟端口。在本案例中,
虚拟交换机通过2号端口与虚拟机相连接,通过1号端
口与物理服务器相连接,从而将虚拟机与物理服务器连图1 典型的云数据中心业务平面的网络流量图
接起来。虚拟机的流量经过OVS 转发和封装后,发往物理服务器外部。以上就是我们接下来讲解的整体环境。
业务主管分别在这两台云主机上部署了Web 应用和后端数据库后,需要实现两者之间的通信。下面我们通过一个ping icmp 请求数据分组的经历来解剖SDN 是如何将两台虚拟机连接起来的,整个过程包括3处数据分组分析和2处流表解剖。
业务主管在Web 虚拟机192.168.100.2上ping 数据库虚拟机时,Web 虚拟机会先通过ARP 广播获取到192.168.100.3对应的MAC 地址,再向这个IP 发出ping 请求数据分组。在虚拟机与OVS 的接口上抓取到此时的icmp 请求分组。其数据分组头的原IP 地址是192.168.100.2,目的IP 地址是192.168.100.3,且MAC 地址与两台虚拟机一一对应。从虚拟机上看该数据分组与非SDN 环境是一样的,以此保证SDN 对虚拟机业务无影响,如表1所示。
SDN 控制器通过OpenFlow 流表来控制虚拟机流量转发。Web 虚拟机的宿主机OVS 根据控制器下发的流表对Web 虚拟机发出来的数据分组进行相应处理。此时,OVS 上的对应流表信息如下。
skb_priority(0),in_port(2),eth(src=fa:16:3e:eb: 2b:1e,dst=fa:16:3e:15:44:4d),eth_type(0x0800), ip
v4(src=192.168.100.2/0.0.0.0,dst=192.168.100. 3/0.0.0.0,proto=1/0xff,tos=0/0x3,ttl=64/0,fra g=no/0xff), packets:3, bytes:294, used:0.210s, actions:set(tunnel(tun_id=0xd33d57,src=0.0.0.0,ds t=10.0.4.3,tos=0x0,ttl=64,flags(key))),1。
该流表中的第一项为匹配项:in_port=2(匹配从2号端口进入OVS),源/目的MAC 地址与两台云主机一一对应,使用IP 协议,源/目的IP 地址为192.168.100.2/192.168.100.3。则能匹配到的Web 虚拟机发给Mysql 虚拟机的icmp 请求数据分组。匹配到这一类数据分组后,流表根据后面的内容,指导数据分
组进行处理及转发。该流表中的第二项为行动项,即激活的内容,将匹配到的数据分组进行隧道封装。在该案例中使用VxLAN 隧道,隧道ID 为16进制的d33d57。以0.0.0.0作为该数据的源IP,表示这个数据分组的源IP 将转换为这台物理服务器网卡的IP。目的IP 地址则是数据库虚拟机所在物理服务器(10.0.4.3)的IP 地址。完成封装后的数据分组会通过与物理服务器相连接的1号端口转发出去。
OpenFlow 流表和MAC 表/路由表的相似之处在于,事先定义好规则,并将匹配到的数据分组定义的内容进行转发。不同之处在于,OpenFlow 流表通过老化时间来定义何时老化过期。
在物理机外部链路上抓取到此时的VxLAN 数据分组。数据分组头的源IP 地址为10.0.4.2,目的IP 地址为10.0.4.3,在VxLAN 数据分组的数据字段里面封装着原来的icmp 请求数据分组内容。具体的VxLAN 数据分组格式如表2所示。
这个VxLAN 数据分组经过underlay 网络到达10.0.4.3物理服务器后,同样需要OVS 基于OpenFlow 流表进行处理和转发。具体流表内容如下。
水松纸激光打孔机
skb_priority(0),tunnel(tun_id=0xd33d57/0xfff
fffffffffffff,src=10.0.4.2/255.255.255.
255,dst=10.0.4.3/255.255.255.255,
tos=0/0xff,ttl=64/0xff,flags(key)),
图2 云用户的组网拓扑示例图
源MAC 地址目的MAC 地址源IP
目的IP fa:16:3e:eb:2b:1e
fa:16:3e:15:44:4d
192.168.100.2
192.168.100.3
表1 Web应用虚拟机侧的分组抓取数据分析
抗氧化植物素in_port(1),skb_mark(0),eth(src=fa:16:3e:eb:2b:1e, dst=fa:16:3e:15:44:4d),eth_type(0x0800),ipv4(src=1 92.168.100.2/255.255.255.255,dst=192.168.100.3/ 0.0.0.0,proto=1/0xff,tos=0/0,ttl=64/0,frag=no/0x ff), packets:3, bytes:294, used:0.210s, actions:2。
该OpenFlow流表的匹配项中,有3个匹配内容。第一是匹配VxLAN ID为d33d57,从物理服务器10.0.4.2发给10.0.4.3的VxLAN数据分组。第二是匹配从物理机与OVS连接的1号端口发过来的数据分组。第三是匹配的数据分组内容为Web虚拟机发给数据库虚拟机的icmp请求分组。根据OpenFlow流表激活,行动项的内容,将匹配到以上规则的数据分组进行VxLAN解封,并通过与虚拟机相连接的2号端口发送出去。此时的数据分组内容与Web虚拟机发出时一样,并最终送到数据库虚拟机。
综上分析,在两台虚拟机的交互过程中经历了从VLAN数据分组到VxLAN数据分组、再到VLAN数据分组的转换。其中触发这一数据分组变换的是两条OpenFlow流表,一个进行数据封装,一个进行数据解封。SDN控制器就是通过OpenFlow流表来实现对转发网络设备的控制,进而实现虚拟网络数据交互的能力。
3 基于OpenFlow流表来分析网络异常行为
3.1 OpenFlow流表表征网络行为
在传统网络设备中,若是2层运行生成树协议,则转发依据是MAC地址表;若是3层运行路由协议,则转发依据是路由表。数据分组基于网络设备中MAC 表和路由表来完成数据转发。通过前面的云数据中心OpenFlow流表的工作机制分析,在SDN云数据中心的云网络服务中,不论是2层或3层的网络场景都是使用OpenFlow流表作为控制转发依据。简而言之,数据中心的网络交互行为都是由OpenFlow流表来控制的。若是要分析云数据中心的网络异常行为,可以从OpenFlow流表入手。
SDN云数据中心最典型的网络设备就是OVS。SDN控制器会基于业务需求给虚拟交换机下发对应的流表。按照OpenFlow的协议标准,流表由很多个流表项组成,每个流表项就是一个转发规则。每个流表项由匹配字段、优先级、计数器、指令、超时、cookie这6个部分组成。流表项中关键的2个内容是匹配字段和指令。匹配字段包括虚拟交换机的入向端口、数据报文的12元组信息(协议、源目的端口、源目的IP地址,源目的MAC地址)等。指令是用来描述OpenFlow的处理方式,修改数据分组的行动集或触发流表的流水线处理。
两条流表是一个典型的虚拟机通过22端口建立SSH访问连接通道的示例。在这个场景中,来自221.176.X.X的SSH请求访问到112.33.X.X,并由流表NAT转化为云主机的内网地址192.168.202.13,且SSH请求的响应分组能根据第一条流表转发出去。通过这个例子可得出,虚拟机的每一个实时会话会以一对流表项的方式呈现出来。只要针对流表项进行深度分析,就能真实复原云主机的会话详情。
skb_priority(0),in_port(15),eth(src=fa:16:3e:2 a:ed:ae,dst=68:54:ed:00:00:0d),eth_type(0x0800), ipv4(src=192.168.202.13,dst=221.176.X.X,proto= 6,tos=0,ttl=64,frag=no),tcp(src=22,dst=12912), packets:3, bytes:183, used:0.291s,flags:FP.,actio ns:set(eth(src=02:a2:0e:8c:04:00,dst=a4:7b:2c:27: 7d:42)),set(ipv4(src=112.33.X.X,dst=221.176.X. X,proto=6,tos=0,ttl=63,frag=no)),3。
skb_priority(0),tunnel(tun_id=0x3b5d04/0
VXLAN分组头
源MAC地址目的MAC地址源IP目的IP VxLAN ID 66:16:3e:eb:2b:1177:16:3e:eb:2b:2210.0.4.210.0.4.3d33d57
VXLAN内部数据fa:16:3e:eb:2b:1e fa:16:3e:15:44:4d192.168.100.2192.168.100.3
表2 Web应用虚拟机所在物理服务器侧的分组抓取数据分析
xffffffffffffffff,src=10.0.3.41/255.255.255.255, dst=10.0.4.226/255.255.255.255,tos=0/0xff, ttl=254/ 0xff,flags(key)),in_port(6),skb_mark (0),eth(src=a4:7b:2c:27:45:42,dst=00:00:0a: 00:04:e2),eth_type(0x0800),ipv4(src=221.176. X.X,dst=112.33.X.X,proto=6,tos=0,ttl=116,frag= no),tcp(src=12912,dst=22), packets:3, bytes:162, used:0.287s,flags:F., actions:set(eth(src=68:54: ed:
00:00:0d,dst=fa:16:3e:2a:ed:ae)),set(ipv4(s rc=221.176.X.X,dst=192.168.202.13,proto=6,tos= 0,ttl=115,frag=no)),set(skb_mark(0xf0f200)),15。3.2 部分典型网络异常行为的流表特征
虚拟交换机的全局流表表征着其所在物理机上全量虚拟机的网络行为。虚拟交换机的下联端口与虚拟机一一关联,若是虚拟交换机某个下联端口的流表提取特征有异常,则可以判断出该端口对应的虚拟机有可能存在网络异常行为。流表异常行为有以下几类。
(1)物理服务器上OVS流表数量过大:单台物理服务器对应的OVS的流表数量超出每秒200 000条。
(2)虚拟机流表数量过大:单台虚拟机对应的流表数量超出每秒100 000条。
(3)虚拟机流表方向不对称:单台虚拟机对应的出方向流表数量大于每秒2 000条,且入方向流表小于每秒50条。正常通信过程中,通信双发的数据会维持在特定的收发比例,即下载数据过程中,数个下载数据分组后总会有一个ACK分组维持通信过程。云内部不正常的SYN扫描总伴随着安全攻击和泛洪攻击。根据云数据中心的历史基准,正常的云端主机的TCP连接行为会维持在一个稳定水平,定义符合“单台虚拟机对应的出方向流表数量大于每秒2 000条,且入方向流表小于每秒50条”的条件时,是泛洪攻击的网络异常行为。
(4)虚拟机特征流表数量过大:单台虚拟机特征流表数量超出每秒10 000条。例如特征流表是目的
线粒体基因组测序端口是3389或者22的流表数量超过每秒10 000条,通常表明外部有大量机器在尝试以远程登录的方式来破解密码或者发起攻击。
4 云网络异常行为的智能处理
在云数据中心流程化自动化处理网络异常行为,是抑制网络异常行为负面影响,也是彻底刨除问题源头的重要环节。结合开源监控软件及自行开发的运维平台,本文提出了一套“自动化采集实时流表数据,智能化告警监控,定制化开发异常流量封堵脚本”的智能处理系统技术方案,实现对异常流量的主动发现和快速处理,实现了从被动投诉到主动运维的质量提升。
uv转印胶4.1 监控和预警
我们采用了开源监控工具zabbix来实现对OpenFlow流表的监控和预警。zabbix是一套具备分布式系统监控及网络监控功能的开源软件。为解决云环境下,客户虚拟机动态创建,端口流表数据采集无法提前配置的问题,我们采用zabbix自动发现规则,在物理机上配置好密钥,并结合OVS,实时发现新创建的虚拟机及对应的虚拟端口,定时收集每台虚拟机的流表数量、数据收发等关键数据。依据提炼出来的网络异常行为的OVS流表特征来设置zabbix的告警规则,包括某段时间内的平均流表数量、某段时间内的流表变化速率、收发比阈值等告警条件。在某一台虚拟机或物理服务器流表数据匹配规则时,zabbix会主动发出相应的告警并智能上报产生该网络异常行为的虚拟机和公网IP。
电子玻璃
4.2 定制化封堵
在SDN云数据中心,端口分为内网端口和外网端口两种类型。虚拟机对外访问的流量先经内网端口转发到外网端口后才会到达外网。为保证网络异常行为不影响数据中心内部网络环境,我们需在内网端口进行流量封堵。同时,为保证客户能有特殊通道进入虚拟机进行安全整改,我们使用安全组放通特定流量。调用openstack API及监控系统API,在云管理平台定制化开发行为异常封堵功能。在发生行为异常告警时,可由云管理平台直接完成流量封堵并通知客户,如图3所示。