基于OpenDaylight防火墙的研究与实现

2019-06-14 07:29刘春秋
计算机技术与发展 2019年6期
关键词:用例访问控制调用

费 宁,刘春秋

(南京邮电大学 计算机学院 软件学院,江苏 南京 210003)

0 引 言

软件定义网络(software defined network,SDN)将网络控制与数据转发分离,使用开放的、独立的应用层接口,使得通过软件集中配置和管理设备成为可能。软件定义网络作为一种全新的网络架构给网络安全研究提供了新的方向,SDN在流转发、深度包检查、流量重定向等方面具有优势,基于SDN的网络安全新技术和新应用不断涌现[1-3]。不少学者提出了软件定义网络集中式架构下的安全技术框架,尝试提供更为完善的威胁分析和防御方法[4-5]。文中在深入分析软件定义网络和OpenFlow系统原理和架构设计的基础上,提出了基于OpenDaylight控制器的防火墙,并搭建了实验平台。该软件定义网络有利于新的网络应用的快速部署和实施,并且基于软件定义网络控制器的安全策略切实可行。

1 基于OpenDaylight的安全设计与实现

1.1 OpenDaylight的系统原理和架构设计

OpenDaylight的软件定义网络的架构特性,使其可以方便地实现路由路径优化,大幅度降低网络维护成本,提高网络设备利用率,增加网络设备的可扩展性和稳定性,并能够解决传统网络中的传输性能、流量控制、访问控制等问题。

OpenDaylight通过SAL(service abstraction layer)将底层接口提供的功能封装成具体的服务提供给上层模块应用,屏蔽了多种南向协议之间的差异,为上层模块提供一致的服务,包括数据包服务、拓扑服务、流表编程服务等。

在路由转发部分,模块首先要注册IListenData Packet服务,从SAL收到的数据包呈队列格式存放,并且将数据包IP目的地址放入pendingPacket Destinations集合中,run线程从此集合中取出对象IP。同时主机追踪模块解析数据包的目的主机,获取相关信息后,对交换机进行遍历,得到整个网络的拓扑结构图,再通过Dijkstra最短路径算法得到路由,将路径链路放到rulesDB中,接着将流表规则下发至路径经过的每个交换机,利用dataPacketService.transmitData Packet()方法将数据包发送出去[6]。

OpenDaylight提供了相应的应用层接口,应用程序向OpenDaylight发出调用指令,OpenDaylight利用相应的接口与底层网络设备进行通信。同时,OpenDaylight还向应用程序提供基础设施相关的功能接口,如流量监控、管理、入侵防御等。

1.2 基于OpenDaylight开发的防火墙模块的应用架构设计

传统网络中,处于服务器及应用程序之下的底层位置的是相应的网络设备,软件定义网络概念的提出,为集中式网络架构提供了可能性,内部网络功能也开始出现在新的层级中[7-8]。OpenDaylight的作用就是将网络功能剥离硬件,重新放回到控制器当中,并且为SDN制定一套通用型框架[9]。文中设计的基于OpenDaylight平台的防火墙的整体流程包括:firewall模块功能逻辑;FireClient应用界面开发、网络请求逻辑和返回结果的数据处理;测试脚本对firewall模块请求接口的调用测试。整体设计流程如图1所示。

图1 整体设计流程

图2 防火墙应用的控制流程

设计的防火墙应用控制流程如图2所示。当网络设备向主机发送网络请求时,装载于OpenDaylight平台上的防火墙应用会查询访问控制策略列表,如果请求访问的设备IP在列表内,则拒绝访问,否则对访问请求做出处理或者向下层设备转发。基于此,首先需要基于OpenDaylight平台开发出防火墙应用(firewall模块),用于访问控制,还需要开发出上层应用(FireClient)对访问控制策略进行添加、删除、查询等管理操作。

Firewall模块的调用流程则是:用户通过上层应用调用firewall模块提供的标准接口,传入相应参数,firewall模块本身对用户请求和参数进行对应的处理,更新访问控制列表,返回接口调用结果等。

FireClient的功能流程则是:FireClient应用提供发送请求、查询、增删策略功能,每个功能调用对应的firewall模块提供的API,实现接口调用相关的网络请求发送,返回结果的JSON数据处理和展示等。

模块是OpenDaylight的功能单元,各个模块之间相互独立又彼此协调,组合起来构成了OpenDaylight对外提供的网络资源管理、数据分发等全部功能。比较常用的模块有yangUI、dlux、l2switch等。本次研究中设计开发的防火墙就是基于OpenDaylight平台的模块,该模块可以在开发测试完成后用Maven打包,并导入OpenDaylight的release版中,与其他模块一起使用。

2 实验环境搭建和测试结果

2.1 基于OpenDaylight开发的防火墙模块的应用架构设计

Maven是基于项目对象模型(POM)的软件项目管理和依赖分析工具,可以通过描述信息进行创建项目、编译项目、加载项目依赖等[10-11]。基于Maven简化构建过程的思考,在本次项目开发中,将使用Maven构建firewall项目骨架,并且使用Maven对开发好的firewall进行编译、打包。

Yang是一种数据建模语言[12-13],开发者通过对Yang模型的构建,指定标准访问接口和数据类型,通过远程调用或消息通知的方式实现模型配置与数据的分发处理。Yang模型的类型之一为Data,负责定义数据类型并用来进行数据存储,分为两种:Config和Operational。Config为配置信息,是北向上层应用向南向网络发送的配置数据信息,Operational为运行时信息,通常是OpenDaylight记录的南向网络动态信息。

实验设计中开发的FireClient是基于Mac OS X系统的Cocoa框架,开发语言是Swift,集成开发环境是Xcode[14]。主要步骤如下:

第一步创建项目;第二步开发用户界面,使用原生的AppKit框架[15],框架底层采用OpenGL绘制,用到了对象的延迟加载及frame相对布局,界面效果如图3所示;第三步调用REST API,firewall模块提供的REST API有:发送请求(request);查询访问控制IP列表(query);增加访问控制IP(add);删除访问控制IP(delete)。

图3 FireClient用户界面

REST API调用代码,以query接口为例,执行步骤如下:

(1)构建HTTP请求头,请求头中包括OpenDaylight的Dlux界面的登录授权,content-type等数据;

(2)构建HTTP请求体,请求体中包括向query接口发送的参数;

(3)申请并初始化NSURLRequest对象request,设定请求方式为POST,并指定已构建好的HTTP请求头和HTTP请求体;

(4)获取URLSession的单例对象session,session异步调用dataTask方法,传入request参数;

(5)在dataTask方法的block中对请求的响应结果的JSON数据进行解析,获取有效信息;

(6)获取主线程,在主线程中将有效信息展示在用户界面上;

(7)调用session的resume()方法开始执行session的HTTP请求。

2.2 测试结果及结果分析

模拟测试脚本用于模拟虚拟设备向firewall模块对外提供的REST API,脚本代码如图4所示。

图4 脚本代码

测试过程按照如下用例依次进行:

用例1:调用脚本向request发送请求,模拟IP为192.168.2.1,预期结果:访问成功。执行脚本./request.sh "hello" "192.168.2.1",输出结果,如图5所示。

图5 用例1测试结果

用例2:用FireClient添加访问策略,禁止IP为192.168.2.1设备访问,预期结果:访问拒绝。用FireClient增加访问策略,禁止IP为192.168.2.1的设备访问,点击“增加”按钮之后,则添加成功。执行脚本./request.sh "hello" "192.168.2.1",输出结果如图6所示:阻止了IP为192.168.2.1的设备的访问。测试结果和预期一样。

图6 用例2测试结果

用例3:添加访问策略,禁止IP为192.168.2.2的设备访问,用FireClient查询访问控制策略列表,查询值为2,预期结果:返回两个禁止访问的IP地址。添加访问策略,禁止IP为192.168.2.2的设备访问,操作步骤与用例2相同。用FireClient查询访问控制策略列表,查询值为2。查询结果显示了添加的访问控制列表。

3 结束语

文中提出了一种基于OpenDaylight的防火墙设计与实现方案,并通过实验验证了其可行性。实验结果表明,由于OpenDaylight已经提供了丰富的应用程序接口, 使得快速进行网络应用的二次开发成为可能。

虽然该应用原型测试案例比较简单,但所有的防火墙策略都可以通过用户界面灵活修改。下一步将对用户策略的抽象和定制以及平台跨操作系统的移植等进行研究。

猜你喜欢
用例访问控制调用
一种跨策略域的林业资源访问控制模型设计
核电项目物项调用管理的应用研究
系统虚拟化环境下客户机系统调用信息捕获与分析①
云的访问控制研究
资费拨测系统的研究与应用
云计算访问控制技术研究综述
用例规约在课程成绩管理系统需求分析中的应用研究
使用用例建模进行软件需求分析研究
利用RFC技术实现SAP系统接口通信
C++语言中函数参数传递方式剖析