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