劉旭光,謝小麗
(1.安徽交通職業(yè)技術(shù)學(xué)院 城市軌道交通與信息工程系,安徽 合肥 230051;2.安徽交通職業(yè)技術(shù)學(xué)院 管理工程系,安徽 合肥 230051)
目前,各單位的內(nèi)部網(wǎng)或者教科研網(wǎng)服務(wù)器大多搭建于云平臺上,服務(wù)器的操作系統(tǒng)、網(wǎng)絡(luò)環(huán)境非常復(fù)雜,保障服務(wù)器的安全更是一項(xiàng)煩瑣的工作。因此,建立服務(wù)器群綜合運(yùn)行與維護(hù)保障系統(tǒng)至關(guān)重要,也就是建設(shè)一套對于服務(wù)器群中每臺服務(wù)器及每項(xiàng)服務(wù)進(jìn)行偵測、管理、維護(hù)等操作的軟件[1]。利用傳統(tǒng)的數(shù)據(jù)庫不但要記錄服務(wù)器的主機(jī)名、物理位置、IP地址、操作系統(tǒng)類型、服務(wù)器登錄賬號與密碼(這些賬號與密碼是通過加密方式存儲的),還要記錄服務(wù)器的運(yùn)行狀態(tài)。根據(jù)這些數(shù)據(jù)可以判斷服務(wù)器是否正常,達(dá)到臨界狀態(tài)的服務(wù)器會在一定時間內(nèi)向管理人員發(fā)送短信或者微信等,以告訴管理人員需要登錄服務(wù)器去解決問題,或者調(diào)整服務(wù)器的負(fù)載以降低臨界狀態(tài)值。本研究針對服務(wù)器群運(yùn)行與維護(hù)系統(tǒng)設(shè)計了一套軟件,該軟件是基于C#與SQL Server環(huán)境開發(fā)的,軟件中設(shè)計了分層管理,所以使用時對不同的用戶賦予不同的權(quán)限。
圖1 服務(wù)器群運(yùn)維系統(tǒng)工作流程Fig.1 Flowchart of server group operation and maintenance system
目前,各單位基本上是采用虛擬服務(wù)器化技術(shù),其建立在存儲池與若干宿主服務(wù)器基礎(chǔ)之上。本設(shè)計的服務(wù)器群運(yùn)行與維護(hù)系統(tǒng)是對這些虛擬化服務(wù)器進(jìn)行日常管理的系統(tǒng),工作人員在自己的主機(jī)上可以利用各類遠(yuǎn)程化的軟件對其進(jìn)行維護(hù)[2]。其工作流程如圖1所示。
服務(wù)器群管理系統(tǒng)軟件的結(jié)構(gòu)框架如圖2所示,通過該框架可了解該系統(tǒng)的基本組成分層元素。圖2中項(xiàng)目用戶界面層(Win_fuwuqi)部分的組織結(jié)構(gòu)如圖3所示。
該系統(tǒng)的搭建依賴于vs.net(C#)編程環(huán)境,采用分層的編程規(guī)則,通過MD5或者DES的方式對用戶和服務(wù)器信息加密與解密。調(diào)用RDP與SSH外部程序?qū)Ψ?wù)器進(jìn)行控制,有些服務(wù)采用HTTPS方式進(jìn)行管理,需要系統(tǒng)使用瀏覽器方式查看服務(wù)是否正常。
圖2 軟件組織結(jié)構(gòu)框架Fig.2 Software organization diagram
圖3 用戶界面層框架Fig.3 A block diagram of the user interface layer
由于該系統(tǒng)軟件可以登錄相應(yīng)的服務(wù)器或者安全設(shè)備,對系統(tǒng)運(yùn)行安全等級的要求比較高,所以需要將運(yùn)行系統(tǒng)的機(jī)器部署在網(wǎng)絡(luò)管理的安全接入?yún)^(qū)[3]。對運(yùn)行的機(jī)器,要從機(jī)器的安全策略入手,計算機(jī)用戶名由系統(tǒng)管理員統(tǒng)一分配,而且各個賬號要設(shè)置復(fù)雜密碼。在計算機(jī)的屏保方面也要做到精細(xì)控制,確保人員離開工作機(jī)器時迅速將機(jī)器推送至屏保狀態(tài)。登錄人員信息及登錄到本運(yùn)行維護(hù)系統(tǒng)后所進(jìn)行的所有操作要記錄到日志數(shù)據(jù)庫中,這樣當(dāng)發(fā)生安全問題時可以利用追溯機(jī)制查到是哪個工作人員的操作,并且可以根據(jù)日志數(shù)據(jù)表與備份服務(wù)器的結(jié)合做到服務(wù)的恢復(fù)。
在系統(tǒng)安全設(shè)計方面引入分層管理的思路。針對不同的管理人員給予不同的遠(yuǎn)程服務(wù)器系統(tǒng)管理的劃分,比如對于WEB服務(wù)器管理人員,只給予他們WEB服務(wù)器與數(shù)據(jù)服務(wù)器的管理權(quán)限,而對于網(wǎng)絡(luò)安全設(shè)置管理人員,只給予他們網(wǎng)絡(luò)安全設(shè)備的管理權(quán)限。這樣根據(jù)不同人員的權(quán)限,設(shè)置各自可接收的故障信息。在系統(tǒng)設(shè)計的前期(數(shù)據(jù)庫設(shè)計)階段,就要解決這種安全分層管理問題。數(shù)據(jù)庫設(shè)計階段的用戶數(shù)據(jù)表見圖4。
圖4 用戶數(shù)據(jù)表截圖Fig.4 The screenshot of user data table
該系統(tǒng)主要利用RDP與SSH遠(yuǎn)程管理來對服務(wù)器群進(jìn)行運(yùn)行維護(hù),所以在各Windows系列的服務(wù)器上設(shè)置好遠(yuǎn)程桌面,從安全角度考慮需要限定連接到該服務(wù)器的IP地址。對于Linux的服務(wù)器也需要設(shè)置允許連接的客戶機(jī)的IP地址,比如允許aliyun和從 192.168.42.233登錄的 test 賬戶通過 SSH 登錄系統(tǒng),在服務(wù)器中執(zhí)行語句:AllowUsersaliyuntest@192.168.42.233。
該系統(tǒng)利用遠(yuǎn)程管理來操作服務(wù)器,這對服務(wù)器的資源有一定消耗,所以運(yùn)行此系統(tǒng)時間不宜過長,在服務(wù)設(shè)置、修補(bǔ)補(bǔ)丁及系統(tǒng)升級后要立即注銷與遠(yuǎn)程服務(wù)器的連接。
用戶登錄后,主界面中的“服務(wù)器判斷”下的“是否開機(jī)判斷”選項(xiàng)可以進(jìn)行服務(wù)器群的日常檢查。界面如圖5所示。
圖5 服務(wù)器群檢查界面Fig.5 Server group check screen
在圖5的界面中,可以很容易判斷出服務(wù)器當(dāng)前的狀態(tài),根據(jù)各臺服務(wù)器按鈕的背景顏色來判斷服務(wù)器狀態(tài),如顯示灰色說明服務(wù)器正常,半灰色表明服務(wù)器的網(wǎng)絡(luò)狀態(tài)或者機(jī)器(內(nèi)存、CPU、硬盤)達(dá)到危險的臨界狀態(tài)[4],按鈕背景與窗體背景同色代表這臺服務(wù)器沒有開機(jī)。
這里設(shè)計的核心代碼如下:
public bool Ping(string ip)
{ //調(diào)用Ping命令動作,判斷服務(wù)器狀態(tài)。
System.Net.NetworkInformation.Ping p = new System.Net.NetworkInformation.Ping();
System.Net.NetworkInformation.PingOptions options=new System.Net.NetworkInformation.PingOptions();
options.DontFragment = true;
string data = "Test Data!";
byte[] buffer = Encoding.ASCII.GetBytes(data);
int timeout = 1 000;
System.Net.NetworkInformation.PingReply reply = p.Send(ip, timeout, buffer, options);
if (reply.Status == System.Net.NetworkInformation.IPStatus.Success)
return true;
else
return false;
}
目前網(wǎng)絡(luò)中的基本服務(wù)都是基于TCP/IP協(xié)議進(jìn)行的,所以每次服務(wù)是否正常都可以利用連接TCP端號狀態(tài)來判斷,甚至做出類似于TcpDump軟件,具體分析某端口對應(yīng)的流量與服務(wù)器的運(yùn)行負(fù)荷,進(jìn)而判斷服務(wù)是否正常。實(shí)現(xiàn)方法的代碼描述如下:
private bool get_service(string servername, string port)
{//第一個參數(shù)為服務(wù)器的IP地址,第二個參數(shù)是服務(wù)器的TCP端口號。
string ipAddress = servername;
System.Net.IPAddressmyIpAddress = IPAddress.Parse(ipAddress);
IPEndPoint point = new IPEndPoint(myIpAddress, Convert.ToInt32(port));
using (Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
{
sock.Connect(point);
return true;
}
}
然后設(shè)置一個服務(wù)判斷的過程,可以通過這個過程判斷各服務(wù)器提供的各類服務(wù)是否正常。該系統(tǒng)提供如圖6所示的界面,用于判斷各服務(wù)是否正常。
圖6 服務(wù)判斷界面Fig.6 Service judgment interface
在圖6界面中,可以通過按鈕的背景顏色來判斷服務(wù)是否正常,灰色代表服務(wù)是正常的,白色代表服務(wù)器不正常。在這個界面中,用戶可以單擊某臺服務(wù)器,利用RDP、CRT SSH遠(yuǎn)程登錄軟件直接進(jìn)入這臺服務(wù)器的遠(yuǎn)程界面進(jìn)行查看或者維護(hù)。這種遠(yuǎn)程維護(hù)的前提是管理人員的機(jī)器已經(jīng)安裝了遠(yuǎn)程桌面軟件與CRT SSH軟件,如果是WEB頁面管理方式,系統(tǒng)會自動打開本系統(tǒng)軟件嵌入的WEB瀏覽器進(jìn)行查看。
系統(tǒng)要提供方便快捷的方式供運(yùn)行維護(hù)管理人員遠(yuǎn)程登錄服務(wù)器去判斷與修改設(shè)置。本設(shè)計在服務(wù)查看的界面中,用戶單擊了某一按鈕,系統(tǒng)會自動判斷該服務(wù)所在服務(wù)器的操作系統(tǒng)類型,然后自動選擇利用Windows的遠(yuǎn)程桌面或者CRT SSH來登錄不同的服務(wù)器。如果是其他類型的操作系統(tǒng),可以使用telnet或者其他方式登錄,需要另行配置,從而完成登錄維護(hù)管理工作[5],其效果如圖7所示。
圖7 Linux或者Unix服務(wù)器的登錄界面Fig.7 The login interface for Linux or Unix servers
對于各系統(tǒng)的登錄,在這個運(yùn)行維護(hù)保障系統(tǒng)中都是記錄賬號與密碼的,遠(yuǎn)程登錄后管理人員不需要再輸入每臺服務(wù)器的賬號與密碼,這就要求該服務(wù)器管理系統(tǒng)安全性非常高,故必須穩(wěn)妥地使用該軟件。對于有些網(wǎng)絡(luò)安全設(shè)備與存儲設(shè)備則通過網(wǎng)頁形式進(jìn)行操作,本系統(tǒng)提供了網(wǎng)頁管理的方式,調(diào)用“天鑰運(yùn)維網(wǎng)關(guān)”設(shè)備[6]的WEB服務(wù)管理。
各類服務(wù)所在的服務(wù)器遠(yuǎn)程登錄代碼如下:
private void Rdp_open(object sender, EventArgs e)
{ //當(dāng)服務(wù)器是Windows系列時,打開遠(yuǎn)程桌面系統(tǒng)。
string[] str1 = ((Button)sender).Tag.ToString().Split(′|′);
string servername = str1[0];
string pwd = str1[1].Trim();
string username = str1[2];
Form1 frm1 = new Form1();
frm1.sip = servername;
frm1.sname = username; frm1.spwd = pwd;
frm1.Show();
}
private void Ssh_open(object sender, EventArgs e)
{ //當(dāng)服務(wù)器是Linux或者Unix時,調(diào)用ssh應(yīng)該軟件打開遠(yuǎn)程管理界面。
string[] str1 = ((Button)sender).Tag.ToString().Split(′|′);
string servername = str1[0];
string pwd = str1[1].Trim();
string username = str1[2];
pwd = DES.DESDeCode(pwd, "XXXXXXXX");
Process p = new Process();
p.StartInfo.FileName = @"C:SecureCRTSecureCRT.exe ";
p.StartInfo.CreateNoWindow = true;
p.Start();
}
管理人員不可能隨時都在服務(wù)器前監(jiān)視系統(tǒng)的運(yùn)行狀態(tài),所以添加了消息推送提醒功能。系統(tǒng)每一個時間周期會對服務(wù)器群中各機(jī)器及各項(xiàng)服務(wù)進(jìn)行巡查,并根據(jù)巡查結(jié)果將有問題的服務(wù)器或者服務(wù)通過短信的方式提醒管理人員,讓管理人員能及時得到服務(wù)器和服務(wù)的信息狀態(tài)并進(jìn)行相關(guān)的維護(hù)操作[7],具體操作是在系統(tǒng)菜單中啟用“偵測服務(wù)并報送”功能。
在2.2節(jié)已經(jīng)描述了分層安全數(shù)據(jù)表設(shè)計,當(dāng)服務(wù)不正常時也是根據(jù)不同的用戶權(quán)限來對不同的用戶發(fā)送信息。這樣,管理人員在服務(wù)器或者服務(wù)不正常時可以接收到相應(yīng)的短信通知。發(fā)送短信的核心代碼如下:
string str = fsnr;
com.mb3451.LinkWSLinkWs = new com.mb3451.LinkWS();
int R = LinkWs.BatchSend(CorpID, Pwd, phone, str + "【XXXX學(xué)院信息管理中心】", "", "");
if (R < 0)
{ MessageBox.Show("其他錯誤!"); }
當(dāng)前是信息化高速發(fā)展的時代,單位內(nèi)部虛擬化服務(wù)器的應(yīng)用已經(jīng)成為主流,運(yùn)行維護(hù)管理人員應(yīng)對其中存在的各類常見問題有所了解,找到一個簡易的工具對服務(wù)器群管理與維護(hù)。本研究在這方面提出了初步方案,提高了服務(wù)器群運(yùn)行的穩(wěn)定性和安全性。