黄 跃
(红河学院信息技术中心,云南蒙自 661199)
居于网络安全事件多发的现状,在对关键信息系统做好安全防护的同时,也要注重完善应急处置预案和对有违法信息网站的“一键关停”机制。特别是在关键时间节点发生网络安全事件时,为避免产生较大负面影响,对关键信息系统能用最快最简便的方式进行关停显得尤为重要。本文从关停操作系统角度,设计并实现了一种简便快捷的远程关机系统。
网络安全事件发生时,通常关停操作需要在业务内网的防火墙、DNS或者出口路由器等设备上完成。由于受时间、地点限制和操作复杂等因素,往往导致不能在规定时间内完全切断重要信息系统访问,造成了难以预计的负面社会影响。虽然目前也出现了利用设备厂商提供的微信公众号“关停”内网系统的方式,但该种方式也需要在用户内网部署特定设备,已到达阻断信息系统网络访问的目的。首先这种方式受到用户内网运行状态限制,一旦网络堵塞阻断指令难以及时下达,其次不能从操作系统层面进行处置,造成关停不彻底的情况。
本文从实际出发,确定了如下几方面的需求:
(1)使用手机进行远程服务器的监控和下发关停指令。
(2)在接到关停通知时,能在3分钟内完成关键信息系统的关停操作。
(3)具备同时处理多台、多种操作系统关停的能力。
(4)关停系统使用独立于业务网络的运营商4G通讯线路。
(5)系统部署简便、使用成本较低。
首先对业务网络进行综合环境分析,充分了解业务内网当前的网络环境、服务器配置和信息系统部署情况,建立资产清单。
其次,在数据通信模块中,使用基于TCP/IP协议的Socket通信技术开发服务器控制端和客户端,以适应多个信息系统和多种操作系统的混合部署模式。考虑到客户端和控制端并发通信处理的高效稳定,在控制端中采用I/O多路复用技术实时响应客户端的连接请求和指令下发。数据传输时采用非对称加密技术[1],确保数据的安全性,系统技术路线如图1所示。
在远程控制部分,操作员使用专用Android程序通过身份验证后,选择对应信息系统服务器进行关机指令下达。整个操作过程利用独立于内网环境的运营商4G网络进行数据交互。通讯方式如图2所示。
图2 系统通信方式图
系统由6个部分组成:监控服务端,关停客户端、系统管理前端,Web服务接口,Android操控端[2],数据库服务。系统核心部分框架如图3所示。
图3 系统框架图
(1)系统管理前端:为服务器和相关信息系统管理提供统一的Web管理界面。主要对关停客户端和所承载信息系统管理,包含服务器IP地址、操作系统类型、信息系统描述、数据库信息、用户信息等。
(2)监控服务端:为系统核心服务中间件。从数据库中取得在线服务器列表进行实时监听,等待关停客户端的连接请求,一旦收到连接请求验证其身份后,开始接收心跳数据,保持相互通信连接。如果接收到Android操控端的关机指令时,转发关机命令到指定服务器由关停客户端完成关机,并把关机记录写入数据库。
(3)关停客户端:分别部署到每一台关停服务器,针对不同的操作系统可实现快速关机操作。关停客户端连接到监控服务端后运行期间不断发送心跳数据并保持连接。接收到下发的关机指令后,强制关闭当前操作系统。
(4)Web服务接口:承接了监控服务端与外部Android操控端的服务接口。使用Web Service的方式提供远程用户身份验证,转接关机指令,操作日志查询等接口。
(5)Android操控端:操作人员在手机上使用专用APP通过运营商4G网络远程获取Web Service接口服务,实现远程监控和关机操作。
每个模块下的主要功能,如图4所示。
图4 功能结构图
其中,监控服务端,关停客户端、系统管理前端使用Python 3.8.4语言开发,开发工具为PyCharm Professional Edition;Web服务接口使用C#语言开发,开发工具为 Visual Studio 2019,Framework 4.7.2;Android操控端使用Java语言开发,开发工具为Android Studio 4.0,minSdk Level 26;数据库系统采用Mysql 8.0。
数据源存储了用户信息、系统信息、服务器信息、关停服务状态、心跳数据、操作日志等,其中主要数据关系如图5所示。
图5 主要数据关系图
(1)xtba_xtxx:存储相应服务器中承载的信息系统信息,字段描述如表1所示。
表1 系统信息表
(2)ywzt_fwqxx:存储服务器信息,字段描述如表2所示。
表2 服务器信息表
(3)ywzt_zxxx:存储关停客户端与监控服务端之间通信心跳数据,字段描述如表3所示。
表3 在线信息表
该功能模块使用基于Python语言的Django框架进行开发。首先建立信息系统、服务器信息和用户数据模型,在视图文件中分别编写数据处理逻辑,再适配对应的模板文件进行页面渲染,最后配置页面的路由实现浏览器的正确访问,其中服务器信息处理界面截图如图6所示。
图6 服务器管理界面截图
读取配置文件config.ini,获取监听参数后启动监听服务,等待关停客户端的连接请求。监听服务采用I/O多路复用技术,使用操作系统级的select函数,异步获取连接套接字的状态变化。收到连接请求后,立即执行注册处理函数,避免了传统I/O模型中的阻塞问题,同时实现了在同一个线程内并发处理多个I/O请求的目的,提高了运行效率。
当有连接请求出现时,首先到数据库中校验连接客户端是否是支持一键关机的服务器,如果校验成功则接受连接请求并存储客户端上线信息,否则拒绝连接请求。在保持连接期间服务端不断接收来自多个客户端的心跳数据,其数据格式为(IP地址,端口,服务器ID,状态值,发送时间)。通过心跳数据获取关停客户端的运行状态,确保下发关机指令时客户端能及时接收和执行,详细流程如图7所示。
图7 监控服务流程图
另外,管理员可在服务端使用控制台输入和执行其他命令,命令包括:
(1)list:可以让管理员实时查看当前连接服务的关停客户端详细信息,如服务器名称、IP地址、在线状态等;
(2)clear:清除历史心跳数据;
(3)shutdown:在业务内网中测试关机执行情况;
(4)quit:通知关停客户端关闭连接,退出监听服务。
关停客户端连接监控服务端后每隔一段时间就向服务端发送状态信息,并实时接收服务端下发的指令。接收到关机指令后,根据所在操作系统类型立即执行关停指令,其中Windows类执行“shutdown-s-t 0”,Linux类执行“sudo init 0”。
该接口以WebService的方式提供外部Android操控端和内部监控服务端之间的调用服务,主要类结构如图8所示:
图8 Web服务主要类图
功能实现细节大致如下:
(1)Login接口中对操作员进行用户名和密码验证。用户输入的密码采用pbkdf2_sha256算法进行180000次的随机salted计算,其计算结果和存储在数据库中密码字段的hash值进行等值比较得出验证结果。
(2)从GetServiceState接口可以获取到当前监控服务的实时运行状态,也可以查询某个时间段监控服务状态的变化情况来判断系统运行的稳定性和有效性。
(3)通过GetServerList接口可实时获取当前关停客户端的在线信息,包括服务器名称、IP地址、业务名称、操作系统类型、在线状态等。
(4)GetOperateRecordList接口提供对每一个关停客户端的操作记录查询。
(5)使用RunShutdown接口下发关停指定服务器的指令。
为了实现服务接口访问不受业务内网出口限制,在服务接口处部署了带内网穿透功能的4G路由器,把服务接口服务器和特定域名进行映射绑定。使用独立于业务网络的运营商4G网络,Android操控端通过访问特定域名下的服务接口,实现了两端的数据互通。
在获取远程接口服务返回数据时,使用了继承异步任务AsyncTask类的方式来实现。在异步类的doInBackground方法中使用ksoap2 API实现了WebService的访问。得到返回结果后在onPostExecute方法中对操作界面进行数据更新,避免了Android程序中UI操作线程不安全和Android 4.0后禁止在UI线程中执行网络操作的问题。
本文主要介绍了基于4G网络的远程一键关机系统的设计与实现。没有攻不破的网络,没有绝对的信息安全,针对应急处置要求,传统的关停机制不仅部署复杂、售价高昂,而且受自身网络运行状态的影响很难保证关停的及时性和有效性。本系统既不受业务网络状态的影响,操作又简单快捷,具有很强的实用性。下一步将对远程操控端进行功能扩充,增加批量操作能力和针对苹果系统的操控端。