一种安全虚拟桌面的设计与实现

2017-04-10 15:26李战强董涛段淼车晓萍孙友
电脑知识与技术 2017年4期
关键词:云计算

李战强++董涛++段淼++车晓萍++孙友凯

摘要:随着云计算技术的快速发展,虚拟桌面作为云计算的一种重要应用获得了空前的发展。许多单位为了安全,员工的电脑不能直接上网,给上网查询资料、下载文件带来了很大不便。该文介绍了一种在某单位部署实施的安全虚拟桌面的设计与实现。

关键词:云计算;虚拟桌面;云安全

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2017)04-0024-04

1 背景

随着互联网的快速发展,使用电脑通过Internet查询资料变得越来越普遍。有些单位和部门,为了安全,员工的电脑不能直接上网。单位内部建立了大局域网,部署了各种网站、文件服务器等,查询资料等可以通过内部局域网来获取。如果还不能获取想要的资料,可以申请到专门可以上网的电脑上去查询资料。但这种查询资料方式,总是不大方便。

随着云计算技术的快速发展,虚拟桌面作为云计算的一种重要应用获得了空前的发展。桌面虚拟化通过虚拟化技术和云计算技术的结合,采用集中管理,集中控制,定制显示的核心思想,将用户的桌面环境和用户的计算环境进行分离。从用户角度来看,用户可以通过虚拟桌面客户端远程连接使用个性化定制的虚拟桌面环境。从企业角度来看,通过数据中心把用户的虚拟资源进行集中化的管理,可以大大减少管理成本和人力成本。

有安全需求的单位,将安全办公电脑和虚拟桌面想结合,设计一种安全虚拟桌面,既能满足安全办公的要求,又能通过网络查询资料。数据文件只能从虚拟桌面传输到办公电脑,办公电脑上的数据不能传输到虚拟桌面,有效保证数据文件的安全性和隐私性。本文主要介绍在某单位部署实施的安全虚拟桌面的设计与实现。

2 安全虚拟桌面平台设计

安全虚拟桌面平台软件的系统设计主要包括:网管系统CLOUD-NMS(CLOUD–Network Management System)、服务器端程序CLOUD-SERVER、客户端程序CLOUD-CLIENT、虚拟机代理程序CLOUD-AGENT。这几个系统/模块之间的用户认证、数据传输、屏幕传输的关系及架构如下图所示:

1)网管系统统一管理用户帐户、集中控制虚拟机

管理员通过网管系统为每个用户创建一个云账户,一个或多个虚拟机。管理员或登录用户可以查询、设置用户帐户信息,可以查询、控制虚拟机操作。对虚拟机的控制指令将发送到服务器端程序,由后者完成具体的操作。

2)服务器端程序完成具体的虚拟机的创建、运行、控制等

服务器端接收网管系统或客户端程序发来的对虚拟机操作指令,解析指令后,完成具体的操作,包括虚拟机的创建、虚拟机的运行、虚拟机的控制等。

3)客户端程序连接登录运行于服务器上的虚拟机

用户在客户端程序输入用户名和密码,客户端程序连接网管系统进行用户身份认证;验证通过后连接网管系统获取用户虚拟机信息;获取虚拟机连接协议、端口、运行状态等;最后客户端程序连接登录运行于服务器上的虚拟机。

4)虚拟机代理程序监控虚拟机运行

虚拟机启动运行后,虚拟机代理服务程序连接网管系统进行身份验证;然后根据网管系统配置信息修改机器名、设置网络、定时采集虚拟机运行状态数据等。

3 网管系统

网管系统是安全虚拟桌面的核心和中心控制枢纽。一个企事业单位或学校,只需要一个网管系统,管理整个单位所有的服务器、客户端电脑、云终端。也可以设置多个网管系统,形成多个私有云,组成分布式虚拟桌面平台。

网管系统的主要特性包括:

1)网管系统包括用户管理、虚拟机管理、模板管理、客户端管理等。

2)管理员通过网管系统为每一个用户创建一个云帐户;可以设置、查询用户帐户信息。普通用户可以注册云账户。

3)管理员通过网管系统为每个用户创建一个或多个虚拟机;可以对虚拟机进行开机、关机、暂停、重启、保存、恢复、删除等操作;普通用户可以申请虚拟机。

4)管理员通过网管系统创建任意多个虚拟机模板,安装不同的操作系统和应用软件,包括中英文模板,满足不同的需求。

5)管理员通过网管系统可以查询、设置、控制所有客户端电脑(开关机、重启等)。

6)网管系统提供了不同身份、角色、访问权限的用户接口,比如管理员、部门领导、普通员工的访问登录页面。

7)如果用户虚拟机出现问题,在备份好必要数据后,管理员可以在几秒钟之内删除原有虚拟机,并创建新的虚拟机,可以立刻使用,相当于快速地重新安装了操作系统和应用软件。

网管系统CLOUD-NMS主要包括:一个Web网站、一个MySQL數据库系统、一个系统服务程序。

网管系统CLOUD-NMS的WEB网站以Apache+PHP+MySQL形式提供服务,以https协议访问,管理员打开网页登录认证后即可进行操作。网管系统的MySQL数据库主要用来保存用户的用户账户信息、虚拟机信息、模板信息等。用户账户信息包括学号、姓名、密码、性别、班级、电话、地址、邮件等信息;虚拟机信息包括计算机名称、CPU、内存、虚拟磁盘、连接协议、连接端口等;模板信息包括虚拟机的操作系统、安装的软件列表等;管理员可以为每个用户创建一个或多个虚拟机。网管系统的系统服务程序主要用来监听、接收消息、处理指令、转发消息等。

管理员或相关操作人员打开IE浏览器输入网管系统地址,看到登录界面输入用户名和密码,登录成功后可以进行用户管理、虚拟机管理、模板管理、客户端管理。

安全虚拟桌面平台网管系统可以和中石化统一身份认证相结合,只有通过中石化统一身份认证,才能进行下一步操作。

3.1 用户管理

网管系统用户管理功能包括:创建用户帐户、查询用户帐户、修改用户帐户、修改用户密码、删除用户帐户、批量创建用户帐户、批量删除用户帐户。

管理员通过网管系统可以为每个用户创建一个云帐户,用户账户信息包括用户ID、姓名、密码、性别、班级、宿舍、地址、邮编、电话、手机、电子邮件、备注等信息。创建用户帐户时必须指定用户ID、用户名、密码等信息,其他都不是必须输入选项。创建成功后,系统将用户信息写入到数据库系统。

创建用户帐户时可以同时指定创建一个虚拟机,虚拟机要指定模板、VCUP、内存、虚拟磁盘、连接协议、USB、运行模式等,详见虚拟机管理一节。

3.2 模板管理

虚拟化环境中,管理员可以预先做好多个虚拟机模板,比如Win XP、Win 7、Win 2008、Linux等操作系统,安装Office、AutoCAD、Photoshop等不同的应用软件。创建虚拟机时,指定虚拟机的模板,系统复制一个跟模板一样的虚拟机,实际上拷贝虚拟机模板的虚拟磁盘,生成虚拟机的配置文件。

网管系统的模板管理功能包括:添加虚拟机模板、查询虚拟机模板、删除虚拟机模板、控制虚拟机模板等操作。

3.3 虚拟机管理

网管系统虚拟机管理功能包括:创建虚拟机、查询虚拟机、删除虚拟机、控制虚拟机等操作。

管理员通过网管系统CLOUD-NMS创建用户虚拟机时,指定虚拟机的名称、CPU、内存、虚拟磁盘、连接协议、模板名称等,并指定该虚拟机创建在哪一台服务器上,如果不指定创建在哪一台服务器上,系统根据负载均衡原则自动选择一台服务器。

系统处理时将用户虚拟机配置信息写入到数据库中,同时将创建虚拟机的指令消息发送到指定服务器端程序CLOUD_SERVER的守护进程,由后者完成具体的操作,详见服务器端程序一节。

网管系统发向服务器端程序的创建虚拟机的指令消息是JSON格式的字符串,如下所示:

{"method":"createVm","param":{"vm_uuid":"161c51d8-9497-1d56-d5bf-7a06ba468628","vm_name":"user1001","vm_vcpu":"1","vm_memory":"2","vm_disksize":"30","vm_protocol":"spice","vm_templateuuid":"aaaaaaaa-1111-1111-1111-111111111111"}}

3.4 客户端管理

除了运行网管系统和虚拟机的专门服务器之外,支持虚拟化的普通电脑、不支持虚拟化的普通电脑、云终端、笔记本、手机、平板等,都可以称作客户端。客户端不像服务器存放在专门的中心机房里,客户端可以存放在任何地方,包括机房、宿舍、教室、图书馆等。

客户端在使用之前,必须先登记注册。客户端电脑/云终端每次启动后,也要连接网管系统,更新本客户端的信息,包括IP地址、开机时间等。客户端电脑在网管系统中登记注册之后,网管系统就可以查看、控制该客户端了。

4 服务器端

运行、控制虚拟机的服务器端程序,可以运行在专门的云服务器上,也可以运行在CPU支持虚拟化的普通电脑上,普通电脑作为运行虚拟机的服务器端,和专门运行虚拟机的云服务器功能类似,区别在于能够运行虚拟机的多少。

服务器端程序CLOUD_SERVER主要功能有三个:1)同步虚拟机模板;2)控制虚拟机;3)查询虚拟机状态。

服务器端程序CLOUD-SERVER服务控制系统主要包括:虚拟磁盘同步、消息接收、消息解析、命令处理、虚拟机管理、数据处理和服务纠错等模块。

虚拟机模板管理一节中已经介绍了虚拟机模板保存在网管系统服务器的(/clouddesktop/template/)下,同步虚拟机模板意味着在中心机房的每一台服务器开机运行后,服务器上的虚拟机模板目录(/clouddesktop/template/)和网管系统CLOUD-NMS服务器上同样的目录保持一致。

服务器端程序CLOUD_SERVER有一个系统守护进程,监听5999端口,等待网管系统CLOUD_NMS、客户端程序CLOUD_CLENT发来的连接请求。

服务器端程序CLOUD_SERVER守护进程一旦接收到网管系统或客户端发送来的SOCKET连接请求时,新开一个线程处理该连接请求。接收到的消息是JSON格式的字符串。在新建线程中,解析参数,并根据其method方法完成具体的操作,包括创建虚拟机、启动虚拟机、关闭虚拟机、暂停虚拟机、重启虚拟机、保存虚拟机、恢复虚拟机等。

接收到的创建虚拟机的JSON格式字符串如下所示:

{"method":"createVm","param":{"vm_uuid":"161c51d8-9497-1d56-d5bf-7a06ba468628","vm_name":"user1001","vm_vcpu":"1","vm_memory":"2","vm_disksize":"30","vm_protocol":"spice","vm_templateuuid":"aaaaaaaa-1111-1111-1111-11111111111"}}

在新建線程里,解析参数后获知method=createVm,执行创建虚拟机的操作,过程如下:

1)解析命令参数后获知method=createVm;

2)进一步解析创建虚拟机的参数param,获取虚拟机名称、UUID、连接协议、VCPU、内存、虚拟磁盘、连接协议、模板名称等;

3)解析完参数后进行验证,比如当前服务器已运行了多少台虚拟机,能否接受此请求等;如果不能接受请求,发送错误消息给网管系统,返回结束;

4)在目录(/clouddesktop/vm/)下创建新的目录,目录名称为用户虚拟机的UUID;

5)创建指向指定模板目录下虚拟磁盘vdisk1.img的连接文件;

6)拷贝指定模板目录下的虚拟磁盘vdisk2.img文件;

7)分配MAC地址;TAP设备;

8)分配虚拟机连接端口;

9)在新建目录下创建虚拟机的配置文件(vm.xml),主要包括虚拟机名称、UUID、VCUP、内存Memory、虚拟磁盘Virtual Disk、时钟Clock、声卡Sound、显卡Video、网络设备接口、MAC地址、连接协议、连接端口等;

10)通过VM_Manager程序根据虚拟机的XML配置文件启动运行虚拟机;

11)更新该虚拟机的状态到网管系统;

12)向CLOUD-NMS或CLOUD-CLIENT发送回复消息。

虚拟机名称是用户名,CPU、Memory、Disk是指定的,时钟Clock默认是本地时间,聲卡Sound默认是AC97,显卡Video默认是qxl,虚拟机网络通过Bridge访问外网,虚拟机MAC地址是后8位随机生成的,连接协议是创建虚拟机时指定的,连接端口是系统分配的,网管系统中所有虚拟机端口是统一分配的,端口从10001到49999,可以支持创建4万个虚拟机,虚拟机被删除后,端口也将释放被重新分配使用。

5 客户端

客户端端程序CLOUD-CLIENT主要功能有三个:1)用户身份验证;2)连接登录虚拟机。

客户端CLOUD-CLIENT连接登录系统包括用户认证模块、消息接收模块、消息处理模块、连接登录模块等。

客户端CLOUD-CLIENT连接登录虚拟机的设计流程如下所示:

1)用户在客户端程序输入用户名和密码。

2)程序向CLOUD-NMS的5998端口发起SOCKET连接请求;SOCKET连接建立后,发送用户认证请求;发送的认证请求是一个JSON格式的字符串,如下所示:

{"method":"loginRequest","param":{"user_id":"104037900920121201","user_name":"user1001","user_password":"******", "client_ip":"10.8.224.101","time":"20121234 18:34:32"}}

网管系统收到该连接请求后,对用户身份进行认证,认证通过返回SUCCESS消息;认证失败返回FAILED消息。程序收到认证失败的消息后,断开和CLOUD-NMS的SOCKET连接,在主界面弹出认证失败对话框,并给出失败原因。

3)认证通过后,程序继续向CLOUD-NMS发送获取虚拟机信息的请求,发送的获取虚拟机信息的请求是一个JSON格式的字符串,如下所示:

{"method":"getVmRquest","param":{"user_id":"10403791201","user_name":"user1001", client_ip":"10.8.224.101", "time": "20121234 18:34:32"}}

网管系统收到该请求后,到数据库系统中查询该用户拥有的虚拟机信息,发回的虚拟机信息也是一个JSON格式的字符串,如下所示:

{"method":"getVmResponse","param":{"vm_uuid":"161c51d8-9497-1d56-d5bf-7a06ba468628","vm_name":"user1001","vm_vcpu":"1","vm_memory":"2","vm_disksize":"30","vm_protocol":"spice",”vm_port”:”10001”,”vm_secure_port”:”10002”, “vm_password”:”123456”, ”vm_serverip”:”10.7.0.61”, “vm_duetodate”:”20121231 00:00:00”, “vm_state”:”stop”,

"vm_templateuuid": "aaaaaaaa-1111-1111-1111-111111111111"}}

4)客户端CLOUD-CLIENT收到CLOUD-NMS发送来的虚拟机信息后,对参数进行解析,比如该虚拟机位于哪一台服务器?连接协议是什么?连接端口是多少?安全端口是多少?动态密码是什么?虚拟机有效期?不同的协议,返回的参数不一样,支持的协议有SPICE、RDP、ICA、PCOIP协议。

5)客户端CLOUD-CLIENT程序向虚拟机所在的服务器或本地电脑的5999端口,发起SOCKET连接请求,SOCKET连接建立成功后,发送启动虚拟机请求。和网管系统向服务器端发起开启运行虚拟机类似。发送的请求方式是”startVm”,如下所示:

{"method": "startVm", "param": {"vm_uuid": "161c51d8-9497-1d56-d5bf-7a06ba468628", "vm_path": "/vmstorage1", "client_ip":"10.8.224.101","time":"20121234 18:34:32"}}

6)虚拟机运行后,客户端CLOUD-CLIENT根据(4)步骤中解析的连接协议,使用不同的连接程序登录虚拟机。如果是SPICE协议,则使用spice客户端程序直接连接服务器 + 端口+ 安全端口 + 动态密码。如果是RDP协议,则使用freerdp客户端程序连接服务器上的虚拟机;其他协议,类似处理。连接成功后,即可看到虚拟桌面,如同使用本地桌面系统一样。如果连接失败,则会弹出出错对话框,并给出出错信息。

6 网络数据隔离

虚拟机的网络功能由虚拟网卡vNIC(虚拟网络适配器virtual Network Interface Card)提供,Hypervisor可以为每个虚拟机创建一个或多个vNIC,从虚拟机的角度出发,这些vNIC等同于物理的网卡,为了实现与传统物理网络一样的网络功能,与物理网卡一样,交换机Switch也被虚拟成虚拟交换机(OpenvSwitch),各个vNIC連接在vSwitch的端口(br-int)上,最后这些vSwitch通过物理服务器的物理网卡访问外部的物理网络。

服务器一般有两个以太网口(假设eth0、eth1),连接虚拟机通过eth0连接,虚拟机虚拟网卡通过eth1访问外网。为了数据安全,安全虚拟桌面在设计时,服务器eth0和办公电脑在同一个网络,服务器eth1连接到专门拉的专线,和单位内部局域网物理隔离。网络eth0和eth1是物理隔离、互不相通的。

因为客户端连接虚拟机网络和虚拟机访问外网是两个物理隔离、互不相通的网络,所以办公电脑上的数据文件不能通过虚拟机的网络传输出去,有效地保证了办公电脑上数据文件的安全。

在实际使用过程中,用户通过安全虚拟桌面访问Internet,查询并下载了资料。在服务器上划出一个特定的存储区域,虚拟桌面可以将下载的资料文件保存写入到这一特定的存储区域;办公电脑可以从服务器这一特定存储区域下载读取资料文件,但不能写入,从而有效地防止用户办公电脑上的数据文件通过虚拟桌面传输到Internet。

7 结束语

本文介绍了一种安全虚拟桌面的设计与实现,通过安全虚拟桌面,以及网络的物理隔离,用户既能通过虚拟桌面上网查询资料,下载文件到本地办公电脑;又能有效保证办公电脑的数据安全,用户电脑的数据文件不能传输到虚拟桌面。使用安全虚拟桌面系统后,为IT维护管理,保证个人隐私、数据安全带来了极大的方便。

参考文献:

[1] openstack[EB/OL].http://www.openstack.org/.

[2] QEMU[EB/OL].http://www.qemu.org/.

[3] libvirt [EB/OL].http://www.libvirt.org/.

[4] spice-space [EB/OL].http://www.spice-space.org/.

猜你喜欢
云计算
谈云计算与信息资源共享管理
基于MapReduce的故障诊断方法
实验云:理论教学与实验教学深度融合的助推器