黃 躍
(紅河學(xué)院信息技術(shù)中心,云南蒙自 661199)
居于網(wǎng)絡(luò)安全事件多發(fā)的現(xiàn)狀,在對關(guān)鍵信息系統(tǒng)做好安全防護的同時,也要注重完善應(yīng)急處置預(yù)案和對有違法信息網(wǎng)站的“一鍵關(guān)?!睓C制。特別是在關(guān)鍵時間節(jié)點發(fā)生網(wǎng)絡(luò)安全事件時,為避免產(chǎn)生較大負(fù)面影響,對關(guān)鍵信息系統(tǒng)能用最快最簡便的方式進行關(guān)停顯得尤為重要。本文從關(guān)停操作系統(tǒng)角度,設(shè)計并實現(xiàn)了一種簡便快捷的遠(yuǎn)程關(guān)機系統(tǒng)。
網(wǎng)絡(luò)安全事件發(fā)生時,通常關(guān)停操作需要在業(yè)務(wù)內(nèi)網(wǎng)的防火墻、DNS或者出口路由器等設(shè)備上完成。由于受時間、地點限制和操作復(fù)雜等因素,往往導(dǎo)致不能在規(guī)定時間內(nèi)完全切斷重要信息系統(tǒng)訪問,造成了難以預(yù)計的負(fù)面社會影響。雖然目前也出現(xiàn)了利用設(shè)備廠商提供的微信公眾號“關(guān)停”內(nèi)網(wǎng)系統(tǒng)的方式,但該種方式也需要在用戶內(nèi)網(wǎng)部署特定設(shè)備,已到達阻斷信息系統(tǒng)網(wǎng)絡(luò)訪問的目的。首先這種方式受到用戶內(nèi)網(wǎng)運行狀態(tài)限制,一旦網(wǎng)絡(luò)堵塞阻斷指令難以及時下達,其次不能從操作系統(tǒng)層面進行處置,造成關(guān)停不徹底的情況。
本文從實際出發(fā),確定了如下幾方面的需求:
(1)使用手機進行遠(yuǎn)程服務(wù)器的監(jiān)控和下發(fā)關(guān)停指令。
(2)在接到關(guān)停通知時,能在3分鐘內(nèi)完成關(guān)鍵信息系統(tǒng)的關(guān)停操作。
(3)具備同時處理多臺、多種操作系統(tǒng)關(guān)停的能力。
(4)關(guān)停系統(tǒng)使用獨立于業(yè)務(wù)網(wǎng)絡(luò)的運營商4G通訊線路。
(5)系統(tǒng)部署簡便、使用成本較低。
首先對業(yè)務(wù)網(wǎng)絡(luò)進行綜合環(huán)境分析,充分了解業(yè)務(wù)內(nèi)網(wǎng)當(dāng)前的網(wǎng)絡(luò)環(huán)境、服務(wù)器配置和信息系統(tǒng)部署情況,建立資產(chǎn)清單。
其次,在數(shù)據(jù)通信模塊中,使用基于TCP/IP協(xié)議的Socket通信技術(shù)開發(fā)服務(wù)器控制端和客戶端,以適應(yīng)多個信息系統(tǒng)和多種操作系統(tǒng)的混合部署模式??紤]到客戶端和控制端并發(fā)通信處理的高效穩(wěn)定,在控制端中采用I/O多路復(fù)用技術(shù)實時響應(yīng)客戶端的連接請求和指令下發(fā)。數(shù)據(jù)傳輸時采用非對稱加密技術(shù)[1],確保數(shù)據(jù)的安全性,系統(tǒng)技術(shù)路線如圖1所示。
在遠(yuǎn)程控制部分,操作員使用專用Android程序通過身份驗證后,選擇對應(yīng)信息系統(tǒng)服務(wù)器進行關(guān)機指令下達。整個操作過程利用獨立于內(nèi)網(wǎng)環(huán)境的運營商4G網(wǎng)絡(luò)進行數(shù)據(jù)交互。通訊方式如圖2所示。
圖2 系統(tǒng)通信方式圖
系統(tǒng)由6個部分組成:監(jiān)控服務(wù)端,關(guān)??蛻舳?、系統(tǒng)管理前端,Web服務(wù)接口,Android操控端[2],數(shù)據(jù)庫服務(wù)。系統(tǒng)核心部分框架如圖3所示。
圖3 系統(tǒng)框架圖
(1)系統(tǒng)管理前端:為服務(wù)器和相關(guān)信息系統(tǒng)管理提供統(tǒng)一的Web管理界面。主要對關(guān)??蛻舳撕退休d信息系統(tǒng)管理,包含服務(wù)器IP地址、操作系統(tǒng)類型、信息系統(tǒng)描述、數(shù)據(jù)庫信息、用戶信息等。
(2)監(jiān)控服務(wù)端:為系統(tǒng)核心服務(wù)中間件。從數(shù)據(jù)庫中取得在線服務(wù)器列表進行實時監(jiān)聽,等待關(guān)??蛻舳说倪B接請求,一旦收到連接請求驗證其身份后,開始接收心跳數(shù)據(jù),保持相互通信連接。如果接收到Android操控端的關(guān)機指令時,轉(zhuǎn)發(fā)關(guān)機命令到指定服務(wù)器由關(guān)??蛻舳送瓿申P(guān)機,并把關(guān)機記錄寫入數(shù)據(jù)庫。
(3)關(guān)??蛻舳耍悍謩e部署到每一臺關(guān)停服務(wù)器,針對不同的操作系統(tǒng)可實現(xiàn)快速關(guān)機操作。關(guān)??蛻舳诉B接到監(jiān)控服務(wù)端后運行期間不斷發(fā)送心跳數(shù)據(jù)并保持連接。接收到下發(fā)的關(guān)機指令后,強制關(guān)閉當(dāng)前操作系統(tǒng)。
(4)Web服務(wù)接口:承接了監(jiān)控服務(wù)端與外部Android操控端的服務(wù)接口。使用Web Service的方式提供遠(yuǎn)程用戶身份驗證,轉(zhuǎn)接關(guān)機指令,操作日志查詢等接口。
(5)Android操控端:操作人員在手機上使用專用APP通過運營商4G網(wǎng)絡(luò)遠(yuǎn)程獲取Web Service接口服務(wù),實現(xiàn)遠(yuǎn)程監(jiān)控和關(guān)機操作。
每個模塊下的主要功能,如圖4所示。
圖4 功能結(jié)構(gòu)圖
其中,監(jiān)控服務(wù)端,關(guān)??蛻舳恕⑾到y(tǒng)管理前端使用Python 3.8.4語言開發(fā),開發(fā)工具為PyCharm Professional Edition;Web服務(wù)接口使用C#語言開發(fā),開發(fā)工具為 Visual Studio 2019,F(xiàn)ramework 4.7.2;Android操控端使用Java語言開發(fā),開發(fā)工具為Android Studio 4.0,minSdk Level 26;數(shù)據(jù)庫系統(tǒng)采用Mysql 8.0。
數(shù)據(jù)源存儲了用戶信息、系統(tǒng)信息、服務(wù)器信息、關(guān)停服務(wù)狀態(tài)、心跳數(shù)據(jù)、操作日志等,其中主要數(shù)據(jù)關(guān)系如圖5所示。
圖5 主要數(shù)據(jù)關(guān)系圖
(1)xtba_xtxx:存儲相應(yīng)服務(wù)器中承載的信息系統(tǒng)信息,字段描述如表1所示。
表1 系統(tǒng)信息表
(2)ywzt_fwqxx:存儲服務(wù)器信息,字段描述如表2所示。
表2 服務(wù)器信息表
(3)ywzt_zxxx:存儲關(guān)??蛻舳伺c監(jiān)控服務(wù)端之間通信心跳數(shù)據(jù),字段描述如表3所示。
表3 在線信息表
該功能模塊使用基于Python語言的Django框架進行開發(fā)。首先建立信息系統(tǒng)、服務(wù)器信息和用戶數(shù)據(jù)模型,在視圖文件中分別編寫數(shù)據(jù)處理邏輯,再適配對應(yīng)的模板文件進行頁面渲染,最后配置頁面的路由實現(xiàn)瀏覽器的正確訪問,其中服務(wù)器信息處理界面截圖如圖6所示。
圖6 服務(wù)器管理界面截圖
讀取配置文件config.ini,獲取監(jiān)聽參數(shù)后啟動監(jiān)聽服務(wù),等待關(guān)停客戶端的連接請求。監(jiān)聽服務(wù)采用I/O多路復(fù)用技術(shù),使用操作系統(tǒng)級的select函數(shù),異步獲取連接套接字的狀態(tài)變化。收到連接請求后,立即執(zhí)行注冊處理函數(shù),避免了傳統(tǒng)I/O模型中的阻塞問題,同時實現(xiàn)了在同一個線程內(nèi)并發(fā)處理多個I/O請求的目的,提高了運行效率。
當(dāng)有連接請求出現(xiàn)時,首先到數(shù)據(jù)庫中校驗連接客戶端是否是支持一鍵關(guān)機的服務(wù)器,如果校驗成功則接受連接請求并存儲客戶端上線信息,否則拒絕連接請求。在保持連接期間服務(wù)端不斷接收來自多個客戶端的心跳數(shù)據(jù),其數(shù)據(jù)格式為(IP地址,端口,服務(wù)器ID,狀態(tài)值,發(fā)送時間)。通過心跳數(shù)據(jù)獲取關(guān)??蛻舳说倪\行狀態(tài),確保下發(fā)關(guān)機指令時客戶端能及時接收和執(zhí)行,詳細(xì)流程如圖7所示。
圖7 監(jiān)控服務(wù)流程圖
另外,管理員可在服務(wù)端使用控制臺輸入和執(zhí)行其他命令,命令包括:
(1)list:可以讓管理員實時查看當(dāng)前連接服務(wù)的關(guān)停客戶端詳細(xì)信息,如服務(wù)器名稱、IP地址、在線狀態(tài)等;
(2)clear:清除歷史心跳數(shù)據(jù);
(3)shutdown:在業(yè)務(wù)內(nèi)網(wǎng)中測試關(guān)機執(zhí)行情況;
(4)quit:通知關(guān)停客戶端關(guān)閉連接,退出監(jiān)聽服務(wù)。
關(guān)??蛻舳诉B接監(jiān)控服務(wù)端后每隔一段時間就向服務(wù)端發(fā)送狀態(tài)信息,并實時接收服務(wù)端下發(fā)的指令。接收到關(guān)機指令后,根據(jù)所在操作系統(tǒng)類型立即執(zhí)行關(guān)停指令,其中Windows類執(zhí)行“shutdown-s-t 0”,Linux類執(zhí)行“sudo init 0”。
該接口以WebService的方式提供外部Android操控端和內(nèi)部監(jiān)控服務(wù)端之間的調(diào)用服務(wù),主要類結(jié)構(gòu)如圖8所示:
圖8 Web服務(wù)主要類圖
功能實現(xiàn)細(xì)節(jié)大致如下:
(1)Login接口中對操作員進行用戶名和密碼驗證。用戶輸入的密碼采用pbkdf2_sha256算法進行180000次的隨機salted計算,其計算結(jié)果和存儲在數(shù)據(jù)庫中密碼字段的hash值進行等值比較得出驗證結(jié)果。
(2)從GetServiceState接口可以獲取到當(dāng)前監(jiān)控服務(wù)的實時運行狀態(tài),也可以查詢某個時間段監(jiān)控服務(wù)狀態(tài)的變化情況來判斷系統(tǒng)運行的穩(wěn)定性和有效性。
(3)通過GetServerList接口可實時獲取當(dāng)前關(guān)??蛻舳说脑诰€信息,包括服務(wù)器名稱、IP地址、業(yè)務(wù)名稱、操作系統(tǒng)類型、在線狀態(tài)等。
(4)GetOperateRecordList接口提供對每一個關(guān)??蛻舳说牟僮饔涗洸樵?。
(5)使用RunShutdown接口下發(fā)關(guān)停指定服務(wù)器的指令。
為了實現(xiàn)服務(wù)接口訪問不受業(yè)務(wù)內(nèi)網(wǎng)出口限制,在服務(wù)接口處部署了帶內(nèi)網(wǎng)穿透功能的4G路由器,把服務(wù)接口服務(wù)器和特定域名進行映射綁定。使用獨立于業(yè)務(wù)網(wǎng)絡(luò)的運營商4G網(wǎng)絡(luò),Android操控端通過訪問特定域名下的服務(wù)接口,實現(xiàn)了兩端的數(shù)據(jù)互通。
在獲取遠(yuǎn)程接口服務(wù)返回數(shù)據(jù)時,使用了繼承異步任務(wù)AsyncTask類的方式來實現(xiàn)。在異步類的doInBackground方法中使用ksoap2 API實現(xiàn)了WebService的訪問。得到返回結(jié)果后在onPostExecute方法中對操作界面進行數(shù)據(jù)更新,避免了Android程序中UI操作線程不安全和Android 4.0后禁止在UI線程中執(zhí)行網(wǎng)絡(luò)操作的問題。
本文主要介紹了基于4G網(wǎng)絡(luò)的遠(yuǎn)程一鍵關(guān)機系統(tǒng)的設(shè)計與實現(xiàn)。沒有攻不破的網(wǎng)絡(luò),沒有絕對的信息安全,針對應(yīng)急處置要求,傳統(tǒng)的關(guān)停機制不僅部署復(fù)雜、售價高昂,而且受自身網(wǎng)絡(luò)運行狀態(tài)的影響很難保證關(guān)停的及時性和有效性。本系統(tǒng)既不受業(yè)務(wù)網(wǎng)絡(luò)狀態(tài)的影響,操作又簡單快捷,具有很強的實用性。下一步將對遠(yuǎn)程操控端進行功能擴充,增加批量操作能力和針對蘋果系統(tǒng)的操控端。