APP下载

基于云平台的网络安全试验管理系统

2020-08-10贾坤鹏王晓锋刘渊

现代计算机 2020年17期
关键词:部署节点监控

贾坤鹏,王晓锋,刘渊

(1.江南大学物联网工程学院,无锡214122;2.江南大学数字媒体学院,无锡214122)

0 引言

近年来,随着互联网的蓬勃发展,“互联网+”已经延伸到生产生活的各个方面,但与此同时网络与信息安全面临严峻的挑战[1]。网络空间是一个多维、跨域、大尺度的空间,体系复杂多样。为了应对日益严苛的网络安全挑战,有必要进行专业的网络安全人才的培养。然而,由于在真实的网络环境中进行网络安全试验成本高,且可能会造成严重的后果,甚至导致网络瘫痪[1]。因此,网络安全试验大多在放在独立的网络环境中,进行攻防演练,新技术的验证[2]。

由于OpenStack[3]平台的开源性,大量的开发者涌入到社区开发中来,推动了OpenStack技术的发展。OpenStack采用模块化设计,各模块之间通过Rabbit-MQ消息队列进行交互,降低了系统耦合性,提高了系统的响应速度和稳定性。OpenStack通过不同模块间的协同合作,根据用户需求实现对基础设施资源即计算、存储、网络资源的弹性分配。OpenStack支持KVM、Docker、Xen、LXC 等多种虚拟化方式,被广泛运用于云平台的构建[4,7,12]。

但是,由于试验环境创建、配置的复杂性,试验人员浪费了大量时间。试验拓扑规模有限,试验效果不是很直观且不支持实时查看[4,7]。如何快速、有效、方便地进行网络安全试验成为当前研究的热点话题。我们基于OpenStack云平台,调用jTopo开源网络拓扑编辑器,通过图元拖拽生成试验场景。试验人员可基于该场景进行快速部署,部署完成以后可在该场景中进行各类典型网络安全试验验证,并通过Zabbix实现了虚拟机状态的分布式监控。重点研究了试验场景可视化展示与操作、自动部署与释放、分布式虚拟机状态监控等问题。

1 相关工作

目前,基于云平台的网络安全试验平台引起了广泛的关注,相关开发者给出了不同的解决方案。文献[4]基于云平台和虚拟化技术,搭建了OpenStack平台,并在平台上基于Glance组件创建了多个攻防试验主机模板,基于该模板实现了不同功能主机的快速创建。主机创建好以后,可进行DoS攻击、端口扫描测试、远程控制攻击等常见网络安全试验。然而,试验过程中虚拟机状态无法进行实时监控,试验场景也过于单薄。

文献[7]采用B/S架构,在平台上集成了VMware虚拟机技术,通过定制和分发试验模板的方式,完成攻防试验的自动配置和快速恢复。实现了用户的管理,不同角色用户具有对应的权限。教师可以对学生的试验结果进行评分。但是,VMware对虚拟网络的支持并不好,只支持VLAN方式组网,拓扑规模受限,不能进行大规模的网络仿真试验,并不能达到理想效果。

文献[8]基于OpenStack平台,设计并实现了云平台资源监控系统,并通过Libvirt中间层提供的API对平台上虚拟机的关键资源数据进行采集存储,并进行可视化展示。然而由于其可视化展示曲线不能实时查看,用户无法实时关注当前虚拟机的状态,且不支持分布式部署,不能自动发现服务器上的虚拟机。

文献[12]收集了目前主流脆弱操作系统,建立了两种镜像库,设计了符合真实场景的网络架构,进行网络攻防。并基于OpenStack的Dashboard实现镜像的管理,虚拟机的创建等功能。利用经典的LAMP架构,提供相关信息渗透工具的下载。并且建立了知识体系库,方便用户对相关知识进行了解。然而,繁杂的试验场景,复杂的操作步骤,可能让用户也无从下手,无法独立进行试验从而进行网络安全知识的学习。

针对上述问题,本文基于OpenStack云平台,采用前后端分离的设计方法,前端融合jTopo、Bootstrap-table、jQquery等框架,实现了拓扑的生成与管理功能。后端接口采用RESTFUL风格的API,分别实现了场景部署、释放、删除等功能。并基于Zabbix实现了分布式虚拟机状态监控,有效解决了试验场景创建以及虚拟机状态实时监控等问题。

2 基于云平台的网络安全试验管理系统体系架构

2.1 基于云平台的网络安全试验管理系统体系架构

如图1所示,基于云平台的网络安全试验管理系统,搭建了一台控制节点、一台网络节点以及三台计算节点的Mitaka版本的OpenStack云平台,每台节点均安装了NTP服务进行时钟同步。实现了试验场景可视化展示与操作,试验场景自动部署与释放以及分布式虚拟机状态监控等关键技术。

图1 系统体系架构

其中,控制节点的jTopo组件负责试验场景的拖拽生成,Bootstrap-table表格组件用于试验场景的渲染以及管理,Zabbix-server组件用来收集网络节点中的Zabbix-proxy发来的各计算节点中Zabbix-agent监控的虚拟机的状态信息。各计算节点中的Zabbix-agent通过调用KVM提供的Libvirt虚拟机管理工具,获取虚拟机的CPU、内存、网卡信息,并调用Zabbix-web组件进行前端展示。

用户可通过拖拽生成场景文件或自行上传场景文件,可在前端选择所需场景文件进行试验环境的自动部署与释放。本文通过在KVM虚拟机中搭载Quagga路由软件,实现了动态路由的配置[14],依托内核命令实现了链路带宽、时延的设置[15],从而提高了试验场景的逼真性。此外,通过修改内核参数,提高了虚拟机创建速度,缩短了试验场景的创建时间。试验场景部署好以后,用户可进行各类网络安全试验,试验过程中各虚拟机的状态信息可实时监控,并支持虚拟机的自动发现功能。

2.2 关键技术分析

2.2.1 试验场景可视化展示与操作

本文通过jTopo开源网络拓扑编辑器融合jQuery前端框架,实现了试验拓扑可视化生成。通过Boot-strap-table表格插件异步调用存储在MySQL数据库中的试验场景信息,并对其中的关键信息进行可视化展示。采用前后端分离的设计模式,用户在前台的各种操作通过AJAX调用后端的REST API接口,进行数据交互。下对其做简要描述。

(1)试验拓扑可视化生成:jTopo网络拓扑编辑器基于 HTML5,提供了 Stage、Scene、Node、Container,相对于当下其他图形开发软件具备兼容性高、接口设计简单、传输效率高等特点[5]。然而其Node属性只有text、visible、dragable 等信息,并没有 image、flavor、port等网络信息,需要对其默认属性进行添加。jQuery是一款优秀的JavaScript框架,操作轻巧便捷,功能强大。

本文使用jQuery调用HTML5原生的drag、drop方法实现图元的拖动。通过jTopo Stage的frames属性,定义了画布的重画频率为1000/frams,所以我们拖动图元到画布以后会通过ondragstart()方法传递底图以及必要参数到Canvas并刷新界面,更新图元信息从而实现拖拽效果。

图2 试验拓扑可视化

如图2所示,jQuery通过监听鼠标移动事件,将节点拖拽到Canvas画布,Canvas获取节点信息,调用JTopo.Node()方法初始化节点,并通过serializedProperties()方法设置自定义属性。节点之间通过连线表示连接关系,鼠标单击节点设置节点信息,即部署该节点使用镜像的image值、节点规格大小flavor值、该节点的网卡信息等。用户可基于拖拽生成的场景进行导出,导出文件包含上述关键信息,可基于该文件进行部署。

(2)试验场景可视化管理:Bootstrap-table是一款基于Bootstrap的jQuery插件,具备扁平化、轻量级的特点,因其与Bootstrap其它标签无缝结合,被专门用来显示数据表格。使用该插件应首先在网页中需引入JavaScript脚本以及CSS样式文件,然后在HTML中声明表格对象,最终通过JavaScript脚本完成表格数据初始化,用户也可根据个人需求通过bootstrapTable方法实现分页、排序、导出、查找等功能。

然而由于静态脚本的局限性,用户对表格数据的修改无法及时反馈到数据库中,这就严重影响了时效性与直观性。

图3 Bootstrap-table数据交互

如图3所示,本系统通过PHP脚本实时查询数据库中的试验信息表中的关键信息,并封装成JSON格式反馈到Bootstrap-table框架,最终渲染前端用户界面,实现表格的异步更新。

表1为试验信息表,用户testuser需设置试验编号id、试验名称testname信息,并通过testinfo字段描述试验,可添加试验的注意事项、操作方法、预期结果等信息。testfile字段存储试验场景文件名,真实文件存储在topology目录下。

用户基于试验场景的各种操作需要传递场景文件名称到后台程序,本文通过对表格deploy、edit列设置了 formatter属性,调用 function(value,row,index)方法,获取当前列的row.testname值,并通过AJAX传递给后端RESTFUL API接口,实现了前后端的分离,大大降低了系统的耦合性。

表1 试验信息表

2.2.2 试验场景自动部署与释放

用户在前端界面发起试验部署或释放请求后,通过AJAX传递场景文件名到控制节点,根据参数的不同分别执行deploy()、delete()方法,最终完成试验环境的构建与释放。

针对OpenStack部署生成的虚拟机无法支持动态路由,无法设置链路参数[3]问题进行了优化。并根据Nova体系架构进行了分析,对创建虚拟机过程中涉及到的组件,及其消息传递经过的RabbitMQ消息队列中关键参数,进行了调优,从而提高了虚拟机创建、删除速度,实现了试验环境的快速复现。

(1)试验场景自动部署:如图4所示,前端界面在收到用户对某个场景文件的创建请求后,发送异步消息到控制节点服务器,控制节点首先解析XML配置文件,并下发虚拟机镜像到对应计算节点。

图4 试验场景自动部署

本文采用层次结构分明且语法灵活简单的XML标签来存储网络、主机节点、路由器节点的配置信息,并划分为多层。第1层为根元素,表明该文档作用。第2层分别定义了NetworkInfo、InstanceInfo、RouterInfo、用来存储网络、路由器、主机信息。如表2所示NetworkInfo的第3层定义了name、IP信息。

表2 NeworkInfo标签子元素定义

InstanceInfo 第 3 层定义了 name、image、flavor、networkname、delay、bandwith、az等信息,如表 3 所示。

RouterInfo相对于InstanceInfo增加了BGP配置信息,如表4所示。

表3 InstanceInfo标签子元素定义

表4 NeworkInfo标签子元素定义

配置解析后,Neutron组件根据NetworkInfo值调用neutron.create_network()方法创建虚拟网络,Nova组件调用nova.servers.create()方法创建虚拟机。

然而,由于Neutron组件提供的qrouter软件不支持动态路由,且无法转发非直连网络的流量[3],这严重制约了试验场景的规模。本文通过在虚拟机中搭载Quagga路由软件,设置系统ip_forward值为1开启路由转发,启动zebra服务,进入路由器配置模式后,便可像配置实体路由器一样进行RIP、OSPF、BGP协议配置[14]。

而为了实现路由协议的自动化部署,只需将zebra服务设置为开机自启动,并将网络配置信息写入配置文件,采用sshpass方式由控制节点注入计算节点中的虚拟机即可。

此外,由于OpenStack平台不支持链路性能参数的仿真[3],所以本文采用文献[15]提出的方法,在接收到链路参数时进行带宽、时延的仿真。

在进行大规模场景创建时,如何提高创建虚拟机速度成为当前研究的热点话题。如图5所示,Nova各组件都与RabbitMQ消息队列有交互,其中nova-conductor组件和MySQL直接交互。因此,RabbitMQ消息队列以及nova-conductor组件的性能成为制约创建速度的瓶颈。

本文首先修改系统文件描述符的最大值,然后通过改rabbitmq-server文件中LimitNOFILE值,来提高RabbitMQ最大连接数。并修改nova.conf文件中conductor字段中的worker值用来提升nova-conductor对应的worker数目。这样,在创建大规模场景时,消息队列的压力得以缓解,虚拟机创建速度显著提高。

(2)试验场景自动释放:如图7所示,系统收到释放请求后,首先删除网络信息,接着删除主机信息,最终完成整个试验场景的删除。

图5 Nova架构

图6 试验场景自动释放

2.2.3 分布式虚拟机状态监控

为加强对试验效果的分析,需要对试验过程中各虚拟机的关键资源信息进行监控。由于OpenStack自带的监控组件Ceilometer功能还不够完善,只关注采集未进行存储,当数据量增大时,Ceilometer性能会大幅下降甚至会导致服务崩溃[7]。Zabbix网络监控系统采用分布式部署,并将所有历史数据、趋势和配置信息存储导数据库中,所有逻辑运算都在服务端执行,对被监控对象性能影响很小[10]。本文通过Libvirt虚拟机管理软件获取计算节点中虚拟机的关键信息[8],然后传输到Zabbix中,Zabbix添加自定义参数后并通过Zabbixweb进行可视化展示。当虚拟机数目增多时,通过Zabbix的自动发现功能[11],自动发现被监控计算节点中新加入的虚拟机。

如图7所示,zabbix符合C/S架构,包含服务端zabbix server,客户端 zabbix agent,以及代理端 zabbix proxy三部分组成[11]。本文控制节点中的zabbix server负责与三台计算节中的zabbix agent进行交互、触发器计算、发送告警通知,并进行数据存储。webserver负责图形化展示,并直接与用户进行交互;网络节点的zabbix proxy用于分担计算节点的负载,定时向控制节点提交数据。

图7 zabbix架构

然而,zabbix监控项中仅有被监控的计算节点宿主机信息,不含计算节点机中创建的虚拟机的信息。需添加自定义监控项[11],对虚拟机中的CPU、磁盘、网络等信息进行监控。虽然OpenStack的Hypervisor支持多种虚拟化方式[3],但由于OpenStack是基于KVM开发的,对KVM亲和性比较好。所以,我们可通过KVM提供的Libvirt工具对虚拟机的数据进行采集。

如图8所示,Libvirt通过虚拟机管理器,对虚拟机进行管理,支持对各种虚拟机监控程序,提供了一个应用编程接口(API)库,并集成了对多种编程语言的绑定[12]。我们首先通过命令“libvirt.open("qemu:///system")”建立连接,然后通过虚拟机UUID获取到相关信息并通过zabbix_send发送给zabbix-server。

图8 Libvirt架构

(1)CPU使用率:Libvirt无法直接获得CPU利用率,但可以通过 domain.info()[4]获得当前时刻 cputime_start,以及数秒后的cputime_end,然后通过domain.info()[3]获得 CPU 核数,cputime_diff= 监控结束时间-监控开始时间,最终通过如公式1计算:

(2)内存使用率:调用memoryStats()函数获取内存用量和未用量,通过公式2计算:

(3)网卡流量:通过调用interfaceStats()函数获取该网卡的rx_bytes(接收字节数)、以及tx_bytes(发送字节数)参数。

(4)磁盘 I/O:通过调用 blockStatsFlags()函数获取磁盘的rd_bytes(读取字节数)、以及wr_bytes(写入字节数)。

在获取到这些参数后,我们首先需要对Zabbix服务端配置文件进行修改,设置UnsafeUserParameters=1表示允许用户自定义参数。其中自定义参数格式如下 :UserParameter=kvm.domain.cpu_util[*],/etc/zabbix/zabbix-kvm.py--item cpu--uuid$1,并添加自动发现规则kvm.domain.discover,自动发现计算节点中新增的虚拟机。

3 试验验证与分析

3.1 试验环境

搭建OpenStack集群,由一台控制节点、一台网络节点、三台计算节点组成。控制节点处理器为Intel Xeon E5-2620 v2*4、内存64GB、硬盘1TB;网络节点处理器为 Intel Xeon E5-2609 v2*4、内存32GB、硬盘1TB;计算节点1:处理器为Intel Xeon E5-2620 v3*2、内存64GB、硬盘 512MB;计算节点2:处理器为Intel Xeon E5-2620 v3*2、内存 32GB、硬盘 512MB;计算节点 3:处理器为Intel Xeon E5-2620 v2*4、内存128GB、硬盘1TB;服务器均为DELL R760服务器,操作系统为CentOS 7.5版本,OpenStack为Mitaka版本。

3.2 试验场景验证

3.2.1 典型网络安全试验

用户可选择拖拽生成场景文件,或者自行上传场景文件到场景管理界面进行网络安全试验。以NMAP端口扫描、DoS攻击等典型网络安全试验为例,进行试验平台的验证。如图9所示,用户首先选中左侧菜单相应图标,拖放到右侧画布中,Canvas画布根据图元信息进行Node初始化。然后,选中Node节点,在右侧信息栏设置Node信息并更新。最后,导出场景文件到topology目录。

图9 拓扑编辑

表5 场景信息

如图9所示,拖拽两台主机节点到画布,并采用封装了 Nmap、Hping3、tcpdump等软件的 CentOS镜像,场景信息如表5所示。导出场景文件并上传到场景管理界面。

本文设置Bootstrap-table的striped属性进行隔行变色展示,设置sortable属性允许排序,设置search属性进行搜索,设置pagination属性进行分页展示,并设置url=load_data.php,从数据库实时加载数据。

图10 场景管理

load_data.php通过mysqli_connect()方法连接数据库,通过mysqli_fetch_assoc()查询 task表,并拼接成JSON格式传送到Bootstrap-table进行渲染。

如图10所示,用户可选择对应场景文件进行部署、查看、编辑、删除等操作。接下来对NMAP端口扫描试验进行自动部署。控制节点收到部署请求后,下发镜像到计算节点,计算节点调用Nova相关方法完成网络network10的创建,两个host节点的部署。部署完成以后,我们可通过ping命令进行验证。在完成验证以后,我们可在该场景中进行Nmap试验以及DoS攻击等典型网络安全试验。

host1通过Nmap命令,对host2上敏感端口进行扫描,结果如图11所示,可发现host2上开设了多个敏感端口。

图11 NMAP结果

虚拟机创建完成以后,zabbix会自动检测,并添加cpu%、memory%、磁盘读写、网卡流量等监控项。可在zabbix监控页面依次点击监测中->最新数据->kvm监控项查看对应数据,并查看数据动态曲线。

本文在host2上使用命令对CPU进行加压,如图12所示,发现短时间内CPU使用率飙升至接近100%,这表明我们的状态监控数据真实有效。

为进一步对Zabbix监控的其他指标进行测试,通过hping3工具在host上对host2进行DoS攻击。首先,通过Netperf测量host2的带宽,共测试5组数据取平均值可得其带宽接近800MB。

然后,在host1上执行hping3-c 5000-d 60000-S-w 64-p 80--flood host2命令,对host2进行DoS攻击。如图13所示,在1分钟左右的上升以后,host2网卡流量最终接近800MB,带宽几乎被占满。

图12 CPU压力测试

图13 host2网卡流量

3.2.2 LDDoS试验

LDDoS攻击通过简单、粗暴的网络攻击,占用系统过多的服务资源,对线上环境造成了严重影响。文献[18]重点研究了LDDoS场景的攻击场景配置以及采集与分析,并进行了多组试验进行验证。

用户可通过拖拽生成如图14所示的场景,包括3台路由器以及6台主机。导出场景文件后,然后上传到场景管理界面进行部署。

图14 场景拓扑

自动部署程序会依次进行网络、主机的创建。然后,进行路由协议、链路特性的设置。选择net_1网络中3台主机为攻击主机、net_3网络中3台主机为目标主机,并根据文献[18]设计的策略,进行LDDoS攻击。文献[18]采用手动统计R1与R3产生的Update报文的形式来对试验效果进行评估,本文可直接对虚拟机中的关键数据进行监控,实时观测虚拟机状态。文献[18]设计的基于CAIDA AS Rank拓扑以及大规模网络拓扑均可上传到场景管理界面进行场景部署,

4 结语

本文基于OpenStack云平台,融合了jTopo网络拓扑编辑器以及BooStrap-table表格框架进行前端展示,采用前后端分离的设计模式,实现了试验场景的一键部署与释放。并通过Zabbix实现了对虚拟机的自动发现以及关键状态信息的分布式监控。用户可通过本平台,快速进行各类网络安全试验,试验过程中可对指定虚拟机状态进行实时监控。大大提升了试验人员的工作效率,完美解决了传统网络安全试验平台的可用性、时效性差等问题,值得加以推广。

猜你喜欢

部署节点监控
基于RSSI测距的最大似然估计的节点定位算法
分区域的树型多链的无线传感器网络路由算法
冬奥项目训练监控方法的研究——TRIMP、sRPE在短道速滑训练监控中的应用
基于图连通支配集的子图匹配优化算法
省委安排部署下半年和今后一个时期任务
部署
基于点权的混合K-shell关键节点识别方法
省妇联部署2019年五项重点工作
通信电源监控系统在电力通信中的应用
GPS/DR/GIS技术在基于GSM—R列车监控系统中应用