站點主機安全檔案(轉)

本文檔與站點服務器安全有關,由本人根據實際工做經驗編寫而成;這裏只是一個初稿,之後有時間我會更新它。 
站點服務器一般指託管在IDC機房的服務器,若是你有服務器託管在IDC那裏,就不得不對它們的安全予以關注。若是你是網絡程序員或系統管理員,本文或許會對你有所幫助,若是你是專業安全管理員,那麼看一下本文也無妨。 
站點安全應該包括幾部分:物理安全、網絡安全、系統安全以及安全管理,下面從這幾方面予以闡述。 

一. 物理安全 
服務器運行的物理安全環境是很重要的,不少人忽略了這點。物理環境主要是指服務器託管機房的設施情況,包括通風系統、電源系統、防雷防火系統以及機房的溫度、溼度條件等。這些因素會影響到服務器的壽命和全部數據的安全。我不想在這裏討論這些因素,由於在選擇IDC時你本身會做出決策。 
在這裏着重強調的是,有些機房提供專門的機櫃存放服務器,而有些機房只提供機架。所謂機櫃,就是相似於家裏的櫥櫃那樣的鐵櫃子,先後有門,裏面有放服務器的拖架和電源、風扇等,服務器放進去後即把門鎖上,只有機房的管理人員纔有鑰匙打開。而機架就是一個個鐵架子,開放式的,服務器上架時只要把它插到拖架裏去便可。這兩種環境對服務器的物理安全來講有着很大差異,顯而易見,放在機櫃裏的服務器要安全得多。 
若是你的服務器放在開放式機架上,那就意味着,任何人均可以接觸到這些服務器。別人若是能輕鬆接觸到你的硬件,還有什麼安全性可言?如下是幾個不安全的事例: 
不少Windows服務器採用終端服務進行管理,在一個機架式的機房裏,你能夠隨便把顯示器接在哪臺服務器上。若是你碰巧遇到某臺機器的管理員或使用者正經過終端使用這臺機器,那麼他的操做你能夠盡收眼底。甚至,你能夠把鍵盤接上去,把他kill off,而後徹底控制這臺機器。固然,這種事情比較少見,但不意味着不可發生。 
另外,不少Unix系統的管理員在離開機房時,沒有把root或其餘賬號的shell從鍵盤退出,這樣你只要把鍵盤和顯示器接上去,就徹底能夠獲取這個shell的權限。這可比遠程攻擊獲取系統權限容易得太多。我有次在機房時想要一個unix shell臨時使用一下,因而我把顯示器在旁邊機架的幾臺服務器上接了一下,很快就發現一個沒有退出的root shell,我把鍵盤接上去,作完我本身的過後,幫他退出了這個shell。若是我是一個不安好心的人,我徹底能夠在他的服務器裏不帶任何痕跡的安裝一個木馬(RootKit)。 
某天我看到一個公司的維護人員在機房調試專線時,懷疑是協議轉換儀有問題,因而他絕不猶豫的把旁邊一個機架上的協議轉換儀拔下來,接到他本身的專線上用於調試。被破壞的服務器數據傳輸會中斷幾分鐘,這對某些公司多是致命的,而他們的服務器管理人員可能到死也查不出緣由! 
還有,用一張Linux光盤引導Linux系統,你能夠毫無障礙的從新獲取主機的root權限;你能夠無心中碰動別人的電源,等等,不在這裏贅述。全部這些是要說明一點,放在開放機架上的服務器是不安全的。若是你的服務器硬件可讓其餘人輕易接觸,那麼不出事是你的幸運,出事了你也找不到緣由或找不到責任人。 
而放在密封式機櫃裏的服務器會安全不少,通常狀況下,你的全部服務器放在一塊兒(同一個機櫃或者幾個機櫃)是明智之舉,機櫃裏不要有其餘公司的服務器。若是你的服務器只有有限的幾臺,那麼放在機櫃裏也會安全不少。由於不是任何人均可以打開機櫃接觸到你的硬件,就算同一個機櫃的其餘公司的服務器的維護人員有這個機會,但風險也要小得多。並且,就算出事了,你也能夠追查到責任人。 
有一次咱們的服務器由於電源斷掉,而中斷幾個小時,咱們根據系統日誌很快判斷出服務器的down機狀況,在追查責任時,我首先想到是IDC機房的維護人員的責任,由於在咱們那個機櫃裏沒有其餘公司的服務器,別人不會接觸到那裏面的電源。後來經查實,果真是該IDC的電工在弄電時不當心把咱們的服務器電源斷掉,他們向咱們出具了道歉聲明。而若是在一個開放式機架的機房裏,碰到這樣的狀況你無從查起。 
若是你的服務器只能放在開放式機架的機房,那麼你能夠這樣作:1)將電源用膠帶綁定在插槽上,這樣避免別人無心中碰動你的電源;2)安裝完系統後,重啓服務器,在重啓的過程當中把鍵盤和鼠標拔掉,這樣在系統啓動後,普通的鍵盤和鼠標接上去之後不會起做用(USB鼠標鍵盤除外)3)跟機房值班人員搞好關係,不要得罪機房裏其餘公司的維護人員。這樣作後,你的服務器至少會安全一些。 

二. 網絡安全 
網絡安全是指你機房的服務器要有合理的安全拓撲結構。安全的網絡環境會讓你的系統管理任務輕鬆不少,不然你會時刻提心吊膽。例如,若是你的NFS服務器直接面對互聯網,那麼你的麻煩就來了。所以,在服務器的前面,至少要有網絡屏蔽設施,或稱爲防火牆。 
從頭部署新的防火牆策略是一件複雜的事情,你要綜合考慮許多方面。通常來講,防火牆有兩種工做模式,稱爲路由模式和透明模式,在路由模式下,防火牆就象一個路由器,能進行數據包的路由。不一樣的是,它能識別網絡第四層協議(即傳輸層)的信息,所以它能基於TCP/UDP端口來進行過濾。在該模式下,防火牆自己要配備兩個或多個網絡地址,你的網絡結構會被改變。在透明模式下,防火牆更象一個網橋,它不干涉網絡結構,從拓撲中看來,它彷佛是不存在的(所以稱爲透明)。可是,透明模式的防火牆一樣具有數據包過濾的功能。透明模式的防火牆不具有IP地址。這兩種模式的防火牆都提供網絡訪問控制功能,例如你能夠在防火牆上設置,過濾掉來自因特網的對服務器的NFS端口的訪問請求。 
在網絡中使用哪一種工做模式的防火牆取決於你的網絡環境。通常來講,若是你的服務器使用真實IP地址(該地址通常是IDC分配給你的),會選擇防火牆的透明模式。由於在該模式下,你的服務器看起來象直接面對互聯網同樣,全部對服務器的訪問請求都直接到達服務器。固然,在數據包到達服務器以前會通過防火牆的檢測,不符合規則的數據包會被丟棄掉(從服務器編程的角度看,它不會覺察到數據包實際已被處理過)。 
實際上爲了安全起見,不少服務器都採用私有IP地址(例如172.16.0.0/16和192.168.0.0/24都屬於私有IP地址),若是這些服務器沒必要對外提供服務,那麼就最安全不過了,若是要對外提供服務,就有必要經過防火牆的NAT(網絡地址轉換)來知足來自因特網的訪問要求。NAT是防火牆的一項功能,它實際上工做在路由模式下。大多數防火牆都會區分所謂的正向NAT和反向NAT,所謂正向NAT就是指從內網出去的數據包,在通過防火牆後,包頭會被改寫,源IP被改寫成防火牆上綁定的IP地址(或地址池,確定是公網真實IP),源端口也會有所改變,回來的數據包通過一樣處理,這樣就保證內網具備私有IP的主機可以與因特網進行通訊。在反向NAT的實現中,會將服務器的公網IP綁定在出口處的防火牆上,服務器只會使用一個私有IP,防火牆會在它的公網IP和這個私有IP之間創建一個映射,當外網對這臺服務器的請求到達防火牆時,防火牆會把它轉發給該服務器。固然,在轉發以前,會先匹配防火牆規則集,不符合規則的數據包將被丟棄。 
使用反向NAT,會大大提升服務器的安全性。由於任何用戶的訪問都不是直接面對服務器,而是先要通過防火牆才被轉交。並且,服務器使用私有IP地址,這總比使用真實地址要安全。在抗拒絕服務攻擊上,這種方式的成效更顯然。可是,相對於透明模式的防火牆,採用反向NAT方式的防火牆會影響網絡速度。若是你的站點訪問流量超大,那麼就不要使用該種方式。值得一提的是,CISCO的PIX在NAT的處理上性能異常卓越。 
另一種狀況是,服務器使用真實IP地址,防火牆配置成路由模式,不使用它的NAT功能。這種狀況雖然能夠實現,但會使你的網絡結構變得很複雜,彷佛也不會帶來效益的提升。 
大多數IDC的機房不提供防火牆服務,你須要本身購買和配置使用防火牆。你徹底能夠按透明模式或NAT模式來配置,具體怎麼配取決於你的實際狀況。有些IDC公司會提供防火牆服務,做爲他們吸引客戶的一個手段。通常來講,他們的防火牆服務會收費。 
若是你的服務器在IDC提供的公共防火牆後面,那麼就有必要仔細考慮你的內網結構了。若是IDC提供給你的防火牆使用透明模式,也便是你的服務器所有使用真實IP地址,在這種狀況下,除非你的服務器數量足夠多(象咱們在北京有500多臺),那麼在你的邏輯網段裏確定還有其餘公司的主機存在。這樣,雖然有防火牆,你的系統管理任務也不會輕鬆多少,由於你要受到同一網段裏其餘公司主機的威脅。例如,你的服務器的IP地址段是211.139.130.0/24,你使用了其中的幾個地址,那麼在這個網段裏還會有200多臺其餘公司的主機,它們與你的主機同處於一個防火牆以後,雖然防火牆能夠屏蔽來自因特網的某些訪問,然而,內部這些主機之間的相互訪問卻沒有任何屏蔽措施。因而,其餘公司不懷好意的人能夠經過他們的主機來攻擊你。或者,網絡中一臺主機被黑客入侵,則全部服務器都會面臨嚴重威脅。在這樣的網絡中,你不要運行NFS、Sendmail、BIND這樣的危險服務。 
這種問題的解決方法是本身購買防火牆,並配置使用透明模式,不要使用公用防火牆的透明模式。 
有的IDC公司會給你提供NAT方式的防火牆,你須要在服務器上設置私有IP地址,而後由防火牆來給服務器作地址轉換。這種狀況與上述狀況存在一樣的問題,那就是,在你的服務器所在的邏輯網段裏還有其餘公司的主機。例如在172.16.16.0/24這個網段可容納254臺主機,你的服務器使用了其中的幾個IP,那麼可能還有200多臺其餘公司的主機與你的服務器在同一個網段裏。這樣,雖然對外有防火牆保護,但沒法防範來自內網的攻擊。 
要解決這個問題,你沒必要本身購買防火牆。既然私有IP是能夠任意分配的,那麼你能夠向IDC單獨要一個網段,例如172.16.19.0/24網段,把你的服務器都放在這個網段裏,其中不要有其餘公司的主機。這樣一來,你的內網也無懈可擊了。 
實際上,若是你有一個大的UNIX主機的網絡,那麼不必讓每臺主機都在防火牆上打開登錄端口。你能夠特別設置一臺或兩臺主機作爲登錄入口,對其餘主機的訪問都必須使用入口主機做爲跳板。這樣作犧牲了使用的方便性,但帶來更強的安全性。固然,前提是你必須管理好入口主機。有一種電子令牌卡適合這種應用,它是一張隨身攜帶的卡,每隔一段時間(這個時間一般很小,幾分鐘或者幾十秒)動態產生一個口令,你只有使用這個口令才能登錄主機,而且該口令很快就會失效。 
不只是UNIX主機,對Windows主機的終端管理也能夠採用這種跳板的方式。但Windows的終端比UNIX的shell要麻煩得多,若是你不肯犧牲太多的方便性,那麼就不要這樣作。 

三. 系統安全 
系統安全是站點安全的主要部分。若是你的系統存在明顯漏洞,那麼再好的物理環境和網絡環境也保不了你。一個很明顯的問題是,若是你的WEB服務器存在安全漏洞,你在沒有將其修補的狀況下對外提供服務,那麼無論你的防火牆有多堅固,也會很快被入侵。所以,系統管理員在保證系統功能穩定的同時,不得不花時間來研究系統的安全問題。 
我所接觸的服務器主要有Windows2000 Server、Freebsd、Linux和Solaris。第一種是微軟的產品,方便好用,可是,你必需要不斷的patch它。Freebsd是一種優雅的操做系統,它簡潔的內核和優異的性能讓人感動。Linux和Freebsd同樣,是免費的操做系統,它們都普遍使用GNU(一個偉大的組織)的實用工具集,Linux容易上手,但不如Freebsd簡潔。Solaris是SUN的商用操做系統,關於SUN OS的文章在網上被貼獲得處都是,但遺憾的是,它看起來並不快,並且,你也要常常對它打補丁。 
關於這幾種操做系統的安全,每種均可以寫一本書。我不會在這裏對它們進行詳細描述,只講一些系統初始化安全配置。 

1. Windows2000 Server的初始安全配置 
Windows的服務器在運行時,都會打開一些端口,如13五、13九、445等。這些端口用於Windows自己的功能須要,冒失的關閉它們會影響到Windows的功能。然而,正是由於這些端口的存在,給Windows服務器帶來諸多的安全風險。遠程攻擊者能夠利用這些開放端口來普遍的收集目標主機信息,包括操做系統版本、域SID、域用戶名、主機SID、主機用戶名、賬號信息、網絡共享信息、網絡時間信息、Netbios名字、網絡接口信息等,並可用來枚舉賬號和口令。今年8月份和9月份,微軟前後發佈了兩個基於135端口的RPC DCOM漏洞的安全公告,分別是MS03-026和MS03-039,該漏洞風險級別高,攻擊者能夠利用它來獲取系統權限。而相似於這樣的漏洞在微軟的操做系統中常常存在。 
解決這類問題的通用方法是打補丁,微軟有保持用戶補丁更新的良好習慣,而且它的Windows2000 SP4安裝後可經過Windows Update來自動升級系統補丁。另外,在防火牆上明確屏蔽來自因特網的對135-139和44五、593端口的訪問也是明智之舉。 
Microsoft的SQL Server數據庫服務也容易被攻擊,今年3月份盛行的SQL蠕蟲即便得多家公司損失慘重,所以,若是安裝了微軟的SQL Server,有必要作這些事:1)更新數據庫補丁;2)更改數據庫的默認服務端口(1433);3)在防火牆上屏蔽數據庫服務端口;4)保證sa口令非空。 
另外,在Windows服務器上安裝殺毒軟件是絕對必須的,而且要常常更新病毒庫,按期運行殺毒軟件查殺病毒。 
不要運行沒必要要的服務,尤爲是IIS,若是不須要它,就根本不要安裝。IIS從來存在衆多問題,有幾點在配置時值得注意:1)操做系統補丁版本不得低於SP3;2)不要在默認路徑運行WEB(默認是c:\inetpub\wwwroot);3)如下ISAPI應用程序擴展可被刪掉:.ida .idq .idc .shtm .shtml .printer。 

2. Freebsd的初始安全配置 
Freebsd在設計之初就考慮了安全問題,在初次安裝完成後,它基本只打開了22(SSH)和25(Sendmail)端口,然而,即便是Sendmail也應該把它關閉(由於歷史上Sendmail存在諸多安全問題)。方式是編輯/etc/rc.conf文件,改動和增長以下四句: 
sendmail_enable="NO" 
sendmail_submit_enable="NO" 
sendmail_outbound_enable="NO" 
sendmail_msp_queue_enable="NO" 
這樣就禁止了Sendmail的功能,除非你的服務器處於一個安全的內網(例如在防火牆以後而且網段中無其餘公司主機),不然不要打開Sendmail。 
禁止網絡日誌:在/etc/rc.conf中保證有以下行: 
syslogd_flags="-ss" 
這樣作禁止了來自遠程主機的日誌記錄並關閉514端口,但仍容許記錄本機日誌。 
禁止NFS服務:在/etc/rc.conf中有以下幾行: 
nfs_server_enable="NO"  
nfs_client_enable="NO"  
portmap_enable="NO" 
有些狀況下很須要NFS服務,例如用戶上傳圖片的目錄一般須要共享出來供幾臺WEB服務器使用,就要用到NFS。同理,要打開NFS,必須保證你的服務器處於安全的內網,若是NFS服務器能夠被其餘人訪問到,那麼系統存在較大風險。 
保證/etc/inetd.conf文件中全部服務都被註銷,跟其餘系統不一樣,不要由inetd運行任何服務。將以下語句加進/etc/rc.conf: 
inetd_enable="NO" 
全部對/etc/rc.conf文件的修改執行完後都應重啓系統。 
若是要運行Apache,請編輯httpd.conf文件,修改以下選項以增進安全或性能: 
1) Timeout 300--->;Timeout 120 
2) MaxKeepAliveRequests 256 
3) ServerSignature on--->;ServerSignature off 
4) Options Indexes FollowSymLinks 行把indexes刪掉(目錄的Options不要帶index選項) 
5) 將Apache運行的用戶和組改成nobody 
6) MaxClients 150——>;MaxClients 1500 
(若是要使用Apache,內核必定要從新編譯,不然通不過Apache的壓力測試,關於如何配置和管理WEB服務器請見個人另外一篇文章) 
若是要運行FTP服務,請安裝proftpd,它比較安全。在任何服務器上,都不要打開匿名FTP。 

3. Linux的初始安全配置 
Linux安裝完成後,默認會打開一些沒必要要端口,運行netstat –an |grep LISTEN命令看一下,會看到本機打開的全部端口。除了必須的網絡端口如SSH、FTP和WEB,其餘端口都關閉。若是你不熟悉這些端口對應什麼程序,那麼請參看/etc/services文件,裏面有端口和服務的對應列表。 
在Redhat 9.0默認安裝完成後,請進入/etc/rc2.d和/etc/rc3.d,將系統啓動時打開的沒必要要服務都在這裏註銷掉。這些服務一般包括sendmail、NFS、rpc等,註銷的方法是將S打頭的相關服務文件重命名(注意不要命名爲S或K 打頭的其餘文件)。 
例如將/etc/rc2.d/S80sendmail 更名爲 X80sendmail 
將/etc/rc3.d/S13portmap S14nfslock S28autofs S80sendmail 更名爲 X13portmap X14nfslock X28autofs X80sendmail 
RPC的安全問題從來不少,請注意必定不要打開111端口。 
改完後須要重啓Linux服務器。 
若是你的Linux直接面對因特網,那麼能夠配置它的防火牆來實現訪問控制。Linux2.4內核支持iptables,2.4如下支持ipchains,它們的語法差很少,都是很好的防火牆工具。例如,若是你只容許從因特網訪問SSH和WWW服務,那麼可將以下語句加進/etc/rc.d/rc.local文件: 
/sbin/iptables -F 
/sbin/iptables -A INPUT -p tcp -d 211.96.13.* --dport 80 -i eth0 -j ACCEPT 
/sbin/iptables -A INPUT -p tcp -d 211.96.13.* --dport 22 -i eth0 -j ACCEPT 
/sbin/iptables -A INPUT -i eth0 -j DROP 
說明:iptables –F刷新iptables規則表,接下來兩條語句容許任何人訪問211.96.13.*這個地址的WWW和SSH服務,最後一條DROP語句將不符合規則的其餘訪問過濾掉。 
這樣系統在啓動後便可自動運行防火牆規則。 
一般在Freebsd或Linux上會運行Mysql數據庫服務,不要將數據庫服務端口(3306)暴露在防火牆以外。若是運行Apache,一樣要作如Freebsd的修改。 

4. Solaris的初始安全配置 
關於Solaris的安全配置網上有一篇很是好的文章,叫作《The Solaris Security FAQ》,照着作就能夠了。 
1) 禁止root從網絡直接登錄:修改/etc/default/login文件,確保CONSOLE=/dev/console被設置,該行只容許root從控制檯登錄。將root用戶加入/etc/ftpusers,保證root不能夠遠程使用ftp。 
2) 禁止rlogin和rsh訪問:刪除/etc/hosts.equiv和/.rhosts文件,從/etc/inetd.conf文件裏註釋掉全部以r打頭的服務。 
3) 賬號控制:刪除、鎖定或註釋掉沒必要要的系統賬號,包括sys/uucp/nuucp/listen等 
4) 改變/etc目錄的訪問權限:該目錄下文件不該該對同組用戶可寫,執行:chmod –R g-w /etc (不推薦) 
5) 在solaris2.5 以上版本的系統中,建立/etc/notrouter文件來關閉solaris默認的路由轉發。 
6) 禁止automounter:刪除/etc/auto_*配置文件,刪除/etc/init.d/autofs 
7) 禁止NFS服務:刪除/etc/dfs/dfstab,重命名/etc/rc3.d/S15nfs.server,重命名/etc/rc2.d/S73nfs.client (不要再以S打頭) 
8) 禁止rpc服務:重命名/etc/rc2.d/S71RPC 
9) 修改/etc/inetd.conf文件,註釋掉大部分沒必要要服務,只保留telnet和ftp服務,而後重啓inetd進程。 
10) 給系統打補丁:包括各版本Solaris通用補丁和單個補丁集合。 
11) 將以下三行加進/etc/init.d/inetinit文件: 
ndd -set /dev/ip ip_forward_directed_broadcasts 0 
ndd -set /dev/ip ip_forward_src_routed 0 
ndd -set /dev/ip ip_forwarding 0 
這樣在系統啓動後就關閉了IP轉發和IP源路由。 

四. 服務器安全管理 
4.1 安全管理應作的事 
安全管理是站點安全中最重要的一環,離開了管理,安全將變得不切實際。如下也許是Windows系統安全管理員天天應作的事: 
1. 檢查系統有無新增賬戶,並瞭解其來源及用途;查看管理員組裏有無新增賬戶,該組的賬戶除系統最初設置外,之後不該該增長賬戶; 
2. 在命令行狀態下,運行netstat –an命令查看當前鏈接及打開的端口,查找可疑鏈接及可疑的端口; 
3. 查看「任務管理器」,查找有無可疑的應用程序或後臺進程在運行,並觀察CPU及內存的使用狀態; 
4. 運行註冊表編輯器,查找有無可疑的程序被加到windows的啓動項裏,並查看有無新增的可疑服務; 
5. 使用 Windows事件查看器查看「系統日誌」「安全日誌」和「應用程序日誌」,以發現有無可疑的事件或影響系統性能的事件; 
6. 檢查共享目錄,不該有對全部用戶可寫的目錄存在; 
7. 若是運行Microsoft IIS,查看C:\WINNT\system32\LogFiles\下的WEB 服務器日誌,以發現是否有試圖攻擊WEB的行爲; 
8. 不按期運行殺毒軟件查殺病毒; 
9. 常常瀏覽微軟的網站,保持服務器的補丁同步更新,留意微軟發佈的安全公告。 

如下是Unix系統安全管理員應常常作的事: 
1. 以root運行last,查看用戶在過去一段時間內所發生的事件; 
2. 查看/etc/passwd和/etc/shadow文件,以發現是否有新增用戶,並追查用戶來源及用途;保證這兩個文件中的系統用戶(如Daemon bin sys adm lp uucp nuucp listen noaccess、mysql、sshd、nobody等)沒有本身的shell;檢查有無賬戶被提高到root權限(UID 0); 
3. 運行netstat –an |grep LISTEN查看有無可疑的打開的端口; 
4. 使用ps命令查看系統進程,保證只有必要的進程在運行; 
5. 檢查被cron運行的程序,Solaris通常在/var/spool/cron目錄裏,Freebsd通常在/var/cron裏,初始化的crontable除root外,其餘用戶不該擁有;仔細查看root的crontable; 
6. 使用vmstat和top查看系統資源佔用情況,對高資源佔用的系統進程要作謹慎處理; 
7. 查看系統日誌,包括Solaris下的/var/adm/messages和Freebsd下的/var/log/messages,以發現有無可疑的事件發生; 
8. 查看系統安全日誌,包括用戶登錄嘗試、驗證失敗、可疑的IP地址登錄等,在solaris下是/var/log/authlog,freebsd下是/var/log/auth.log; 
9. 運行chkrootkit,以檢查系統是否被植入木馬程序; 
10. 安裝了Apache的主機,不按期查看Apache的訪問日誌和錯誤日誌, 以發現是否有試圖攻擊WEB的行爲。 

4.2 系統及服務的穩定性 
一些重要的服務器是片刻也不能停的,一旦發生服務器down機事故,而你又沒有及時發現和恢復,那麼你面對的將是鋪天蓋地的指責。系統安全管理的任務也許不是很重,但責任卻並不輕。所以,你有必要時刻了解服務器的存活情況,一旦發生down機事件,你應在第一時間知道。 
有些好的IDC機房有服務器監控系統,一旦某臺機器down掉,它會發出警報。而後機房的值班人員會電話通知你,這樣你就能從容的處理事故。然而,並不是全部的機房都有這樣的措施,不少時候還得依靠本身的當心。 
在機房網絡中,應該有一它網管機器,這臺機器最好是Unix系統,由於你能夠在上面編寫腳原本監控網絡,並經過sendmail發送郵件給本身。這臺機器能夠是一臺服務器,象前面講過的登錄入口服務器,就徹底能夠充當網管機;也能夠是一臺配置很低的普通PC,能運行Linux或Freebsd就能夠了。有必要在上面運行sendmail,由於它要對外發送郵件。固然,sendmail有一些安全問題,所以在運行它以前,你必須確認服務器處於安全的網絡:在防火牆以後,且同一網段中沒有其餘公司的服務器。不然,就不要運行它。固然,你也能夠配置sendmail綁定在127.0.0.1端口,不接受網絡請求(在Linux默認安裝的sendmail不接受網絡請求,Freebsd中能夠在rc.conf文件中設置使sendmail綁定在127.0.0.1端口),這樣的sendmail會安全不少。 
而後你能夠寫一個簡單的腳原本監控網絡主機生存情況。在Unix主機上,使用shell或perl都很容易編寫腳本,可是,shell腳本用於系統管理更簡單明瞭,除非你要進行復雜的數學計算或文本處理。以下這個shell腳本很簡單,卻很實用: 


#!/bin/sh 
# script name:nping 
# use this script to confirm the hosts are alive or not 
HOST01="xxx.xxx.xxx.xxx" 
HOST02="xxx.xxx.xxx.xxx" 
HOST03="xxx.xxx.xxx.xxx" 
HOST04="xxx.xxx.xxx.xxx" 
HOST05="xxx.xxx.xxx.xxx" 
HOST06="xxx.xxx.xxx.xxx" 
HOST07="xxx.xxx.xxx.xxx" 
HOST08="xxx.xxx.xxx.xxx" 
HOST09="xxx.xxx.xxx.xxx" 
HOST10="xxx.xxx.xxx.xxx" 

for LOOP in $HOST01 $HOST02 $HOST03 $HOST04 $HOST05 $HOST06 $HOST07 $HOST08 $HOST09 $HOST10
do 
 if !/sbin/ping -c 2 $LOOP >;/dev/null 2>;&1;then 
  echo "Warning:The host $LOOP seems down" >;>; error.log 
 fi 
done 

if [ -f error.log ];then 
cat error.log |mail -s "Warning:Host Down" yourname@yourmail.com  
rm –rf error.log 
fi 

該腳本執行一個簡單的ping操做,以判斷目標主機是否存活,若是目標主機中止響應,則向管理員發送郵件報警。 
你能夠在任務裏設定每隔一段時間執行一次該腳本,因爲ping對內網的影響很小,所以這個時間能夠短一些,我把它設爲1小時。 
然而,有的時候,你可能關心的不止是服務器是否存活,更想了解它的服務狀態是否正常,這個時候,你可使用一個工具來判斷服務器的開放服務狀態,這個工具就是被Unix系統管理員普遍使用的網絡端口掃描工具Nmap(能夠從http://www.insecure.org/nmap/ 下載最新版本)。它的使用很簡單,安裝完成後直接在命令行下執行:nmap IP,就能夠獲得目標主機的開放TCP端口情況。固然,Nmap的功能遠不止如此,它還能夠執行UDP、SYN、FIN、RPC等掃描,它的半開放掃描可繞過防火牆的過濾,並可根據操做系統指紋判斷目標系統類型。在這裏只要利用到Nmap的TCP掃描就夠了。而後,你能夠編寫一個腳原本按期檢測服務器的開放端口情況,並將結果Email給管理員。我編寫的以下: 

#!/bin/sh 
# script name:nscan 
# use this script to check the services status on local servers 
HOST01="xxx.xxx.xxx.xxx" 
HOST02="xxx.xxx.xxx.xxx" 
HOST03="xxx.xxx.xxx.xxx" 
HOST04="xxx.xxx.xxx.xxx" 
HOST05="xxx.xxx.xxx.xxx" 
HOST06="xxx.xxx.xxx.xxx" 
HOST07="xxx.xxx.xxx.xxx" 
SQL_PORT="2433/tcp" 
MSRDP_PORT="3389/tcp" 
PCANYWH_PORT="5631/tcp" 

for LOOP in $HOST01 $HOST02 $HOST03 $HOST04 $HOST05 $HOST06 $HOST07 
do 
  nmap -sT $LOOP >;nmap.tmp 2>;&1 
  for PORT in $SQL_PORT $MSRDP_PORT $PCANYWH_PORT 
do 
   if ! grep $PORT nmap.tmp >;/dev/null 2>;&1;then 
     echo 「Warning:The port $PORT is seem to down on $LOOP」 >;>;$LOOP.error 
   fi 
done 
  
  if [ ! -f $LOOP.error ];then 
    echo "The services running on $LOOP are nomal!" 
      else 
       cat $LOOP.error >;>;nscan.err 2>;&1 
       rm -rf $LOOP.error 
  fi 

  rm -rf nmap.tmp 
done 

if [ -f nscan.err ];then 
 cat nscan.err |mail –s 「Host Services Down」 yourname@yourmail.com  
 rm –rf nscan.err 
fi 


該腳本只是判斷MS SQL Server、MS終端服務和Pcanywhere服務是否正常,若是不正常,就向管理員發送郵件報警。若是你須要檢查其餘的服務端口,修改該腳本便可。 
你也能夠配置任務來按期執行該腳本,不過請注意,Nmap掃描會影響網絡,所以檢測的時間間距不要過小。固然,在Unix系統下,有好些方法能夠判斷目標系統的開放端口情況,但使用Nmap掃描看起來也不錯。 

4.3 日誌管理 
無論是Windows系統仍是Unix系統,都有本身的事件日誌。在Windows下使用事件查看器能夠清楚的瞭解系統運行的各項狀態,它包括應用程序日誌、安全日誌和系統日誌。你應常常閱讀這些日誌,尤爲是一些紅色標記的錯誤信息。根據這些錯誤提示發現問題和解決問題是Windows系統管理員應作的事。 
若是服務器不加入域,那麼通常來講系統錯誤信息不多;若是在機房的服務器組成一個域,那麼從日誌裏可能會常常看到各類錯誤提示,尤爲是在域控制器有問題的時候。管理好一個域不是一件太容易的事,它憑空給系統管理員增長不少困難。若是你真碰到這樣的問題,建議你到google上面去查找答案,通常來講,你碰到的問題別人確定也碰見過了,因特網上有不少熱心的人願意解答困難者的問題(尤爲是國外的技術站點)。 
讀Windows的日誌不浪費你太多精神,由於它都分門別類整理得很清楚,有什麼錯誤能一目瞭然的看出來。天天快速翻一下它的日誌是可行的,若是你的服務器磁盤有壞道,也能從日誌裏體現出來,爲你及早更換磁盤、避免數據災難贏得了時間。 
在Unix系統下,讀日誌要費勁一些,由於Unix系統一般把一些通用的日誌信息寫到messages文件裏,致使這個文件裏雜七雜八什麼都有,包括應用程序信息、用戶驗證信息、網絡鏈接信息、內核信息等等,在瀏覽它們時比較費勁。然而,這不意味着你能夠無論它們。實際上,日誌文件是系統偵錯時的惟一依據。某天你的Unix系統崩潰了,在居喪之餘,不要忘了去分析它的日誌,或許能夠爲你找到緣由。 
在Unix系統下,有一個日誌分析軟件叫Swatch,它能很好的幫你裁減和分析日誌,減輕系統管理員的負擔。關於它的安裝和使用我不在這裏詳敘,由於我本身並無使用它。我本身編寫腳本用於查看日誌,使用awk語句照樣能將日誌文件裁減到合理的程度。這個腳本的樣式我不在這裏描述,由於不一樣的系統和網絡環境所產生的條件並不同。 
在UNIX系統下,另一個日誌文件也很值得關注,它記載了用戶的登錄和驗證信息,該文件通常位於/var/log下,名爲authlog或者auth.log,只有root才能夠對它進行讀寫。 
若是系統中安裝了Apache,那麼常常查看Apache的錯誤日誌和訪問日誌也值得推薦。從這兩個日誌裏,你能夠發現不少有趣信息,因特網上對WEB站點的攻擊歷來沒有終止過(從這裏也能夠找到大量試圖攻擊IIS的信息)。 


4.4 用戶管理 
用戶管理一般是指系統的用戶賬戶管理,無論是UNIX系統仍是Windows系統,賬戶安全是系統安全的關鍵。系統中應保持固定數量的用戶賬戶,做爲系統管理員,應清楚每個賬戶的使用者和用途。用戶新申請賬戶應該有個流程,規範的管理總比不規範好。 
在Unix系統上,大多數系統賬戶平時是沒什麼用的,包括:bin daemon adm lp mail news uucp operator games gopher rpc等,若是你不把它們刪除,那麼也不要讓它們擁有真正的shell,檢查/etc/passwd文件,看看這些賬戶的最後一個域(shell)是否被置/sbin/nologin或/bin/false。常常檢查賬戶的權限,普通賬戶不該該在root組(gid=0),更不該擁有root權限(uid=0)。能夠寫一個腳原本替你檢查,以下所示: 
#!/bin/sh 
# script name:checkuser 
# check if there is any user who have real shell or have root id/gid 

FILE=/etc/passwd 
NUM=0 

while read LINE 
do 
NUM=`expr $NUM + 1` 

if [ $NUM -lt 3 ];then 
continue 
fi 

USER=`echo $LINE |cut -d: -f1` 
USER_SHELL=`echo $LINE |cut -d: -f7` 
USER_UID=`echo $LINE |cut -d: -f3` 
USER_GID=`echo $LINE |cut -d: -f4` 

if [ "$USER_SHELL" != "/sbin/nologin" ];then 
echo -e "\n$USER has one real shell:$USER_SHELL" 
fi 
if [ $USER_UID -eq 0 ];then 
echo "$USER has the root uid(uid 0)" 
fi 
if [ $USER_GID -eq 0 ];then 
echo "$USER has the root gid(gid 0)" 
fi 

done <$FILE 
這個腳本運行在Freebsd下,Freebsd的/etc/passwd文件前兩行是版本說明,因此在程序裏把它跳過,從第三行起挨個檢查用戶賬號,它將每個擁有真正shell或者擁有root用戶ID或組ID的賬號在屏幕上打印出來。 
一樣,在Windows服務器上,若是不運行IIS服務,那麼把IIS相關的賬號禁止掉,把終端服務賬號禁止掉,把guest賬號禁止掉。Windows系統的管理員組除了Administrator外不要有其餘賬號,甚至應該把Administrator賬號更名。每個賬號在賬號描述裏說明它的用途。若是Windows服務器採用域的方式,那麼應確保域中有儘量少的用戶。通常域中兩個用戶就夠了,一個Administrators組的用戶,一個普通用戶。請記住,域的Administrators組的用戶(一般是administrator)對你的每一臺加入域的服務器都有生死控制權,因此你應絕對保證這個賬戶的安全。 
無論是系統的root密碼仍是普通用戶密碼,都應按期更改。我通常每兩個月更改一次系統root密碼。固然,如發現系統有被入侵跡象,應立刻更改密碼。對於用戶密碼,無論在什麼系統中,均可以設置密碼過時期限,用戶使用一段時間後必須更改密碼。有的用戶安全意識並不強烈,他們使用本身容易記住的詞彙做爲口令,例如本身的英文名或者生日。這些都容易被猜想,你可使用工具破解這些簡單口令。Unix下的John和Windows下的LC3都是很是好的密碼破解工具,在系統上運行它們幾分鐘就能夠破解出一堆弱口令。口令過於簡單的用戶,必定要強制他們更改口令,不然後患無窮。若是用戶拒絕更改口令,那就刪除他們,我就作過這樣的事。 

4.5 安全巡檢 
最後要講的是安全巡檢,有時間就跑到機房看看去吧,看看服務器運行的環境,檢查一下電源和網線,摸摸機表的溫度,跟機房的值班人員聊聊天,都對你有好處。通常來講,就算服務器正常運行,每個月也應去機房兩次。固然,來去打車的費用,但願你的公司給你報銷。 html

相關文章
相關標籤/搜索