網(wǎng)絡(luò)安全是指你機房的服務(wù)器要有合理的安全拓撲結(jié)構(gòu)。安全的網(wǎng)絡(luò)環(huán)境會讓你的系統(tǒng)管理任務(wù)輕松很多,否則你會時刻提心吊膽。例如,如果你的NFS服務(wù)器直接面對互聯(lián)網(wǎng),那么你的麻煩就來了。因此,在服務(wù)器的前面,至少要有網(wǎng)絡(luò)屏蔽設(shè)施,或稱為防火墻。
從頭部署新的防火墻策略是一件復(fù)雜的事情,你要綜合考慮許多方面。一般來說,防火墻有兩種工作模式,稱為路由模式和透明模式,在路由模式下,防火墻就象一 個路由器,能進行數(shù)據(jù)包的路由。不同的是,它能識別網(wǎng)絡(luò)第四層協(xié)議(即傳輸層)的信息,因此它能基于TCP/UDP端口來進行過濾。在該模式下,防火墻本 身要配備兩個或多個網(wǎng)絡(luò)地址,你的網(wǎng)絡(luò)結(jié)構(gòu)會被改變。在透明模式下,防火墻更象一個網(wǎng)橋,它不干涉網(wǎng)絡(luò)結(jié)構(gòu),從拓撲中看來,它似乎是不存在的(因此稱為透 明)。但是,透明模式的防火墻同樣具備數(shù)據(jù)包過濾的功能。透明模式的防火墻不具備IP地址。這兩種模式的防火墻都提供網(wǎng)絡(luò)訪問控制功能,例如你可以在防火 墻上設(shè)置,過濾掉來自因特網(wǎng)的對服務(wù)器的NFS端口的訪問請求。
在網(wǎng)絡(luò)中使用哪種工作模式的防火墻取決于你的網(wǎng)絡(luò)環(huán)境。一般來說,如果你的服務(wù)器使用真實IP地址(該地址一般是IDC分配給你的),會選擇防火墻的透明 模式。因為在該模式下,你的服務(wù)器看起來象直接面對互聯(lián)網(wǎng)一樣,所有對服務(wù)器的訪問請求都直接到達服務(wù)器。當然,在數(shù)據(jù)包到達服務(wù)器之前會經(jīng)過防火墻的檢 測,不符合規(guī)則的數(shù)據(jù)包會被丟棄掉(從服務(wù)器編程的角度看,它不會覺察到數(shù)據(jù)包實際已被處理過)。
實際上為了安全起見,很多服務(wù)器都采用私有IP地址(例如172.16.0.0/16和192.168.0.0/24都屬于私有IP地址),如 果這些服務(wù)器不必對外提供服務(wù),那么就最安全不過了,如果要對外提供服務(wù),就有必要通過防火墻的NAT(網(wǎng)絡(luò)地址轉(zhuǎn)換)來滿足來自因特網(wǎng)的訪問要求。 NAT是防火墻的一項功能,它實際上工作在路由模式下。大多數(shù)防火墻都會區(qū)分所謂的正向NAT和反向NAT,所謂正向NAT就是指從內(nèi)網(wǎng)出去的數(shù)據(jù)包,在 經(jīng)過防火墻后,包頭會被改寫,源IP被改寫成防火墻上綁定的IP地址(或地址池,肯定是公網(wǎng)真實IP),源端口也會有所改變,回來的數(shù)據(jù)包經(jīng)過同樣處理, 這樣就保證內(nèi)網(wǎng)具有私有IP的主機能夠與因特網(wǎng)進行通信。在反向NAT的實現(xiàn)中,會將服務(wù)器的公網(wǎng)IP綁定在出口處的防火墻上,服務(wù)器只會使用一個私有 IP,防火墻會在它的公網(wǎng)IP和這個私有IP之間建立一個映射,當外網(wǎng)對這臺服務(wù)器的請求到達防火墻時,防火墻會把它轉(zhuǎn)發(fā)給該服務(wù)器。當然,在轉(zhuǎn)發(fā)之前, 會先匹配防火墻規(guī)則集,不符合規(guī)則的數(shù)據(jù)包將被丟棄。
使用反向NAT,會大大提高服務(wù)器的安全性。因為任何用戶的訪問都不是直接面對服務(wù)器,而是先要經(jīng)過防火墻才被轉(zhuǎn)交。而且,服務(wù)器使用私有IP地址,這總 比使用真實地址要安全。在抗拒絕服務(wù)攻擊上,這種方式的成效更顯然。但是,相對于透明模式的防火墻,采用反向NAT方式的防火墻會影響網(wǎng)絡(luò)速度。如果你的 站點訪問流量超大,那么就不要使用該種方式。值得一提的是,CISCO的PIX在NAT的處理上性能異常卓越。
另外一種情況是,服務(wù)器使用真實IP地址,防火墻配置成路由模式,不使用它的NAT功能。這種情況雖然可以實現(xiàn),但會使你的網(wǎng)絡(luò)結(jié)構(gòu)變得很復(fù)雜,似乎也不會帶來效益的提高。
大多數(shù)IDC的機房不提供防火墻服務(wù),你需要自己購買和配置使用防火墻。你完全可以按透明模式或NAT模式來配置,具體怎么配取決于你的實際情況。有些IDC公司會提供防火墻服務(wù),作為他們吸引客戶的一個手段。一般來說,他們的防火墻服務(wù)會收費。
如果你的服務(wù)器在IDC提供的公共防火墻后面,那么就有必要仔細考慮你的內(nèi)網(wǎng)結(jié)構(gòu)了。如果IDC提供給你的防火墻使用透明模式,也即是你的服務(wù)器全部使用 真實IP地址,在這種情況下,除非你的服務(wù)器數(shù)量足夠多(象我們在北京有500多臺),那么在你的邏輯網(wǎng)段里肯定還有其他公司的主機存在。這樣,雖然有防 火墻,你的系統(tǒng)管理任務(wù)也不會輕松多少,因為你要受到同一網(wǎng)段里其他公司主機的威脅。例如,你的服務(wù)器的IP地址段是211.139.130.0/24, 你使用了其中的幾個地址,那么在這個網(wǎng)段里還會有200多臺其他公司的主機,它們與你的主機同處于一個防火墻之后,雖然防火墻可以屏蔽來自因特網(wǎng)的某些訪 問,然而,內(nèi)部這些主機之間的相互訪問卻沒有任何屏蔽措施。于是,其他公司不懷好意的人可以通過他們的主機來攻擊你?;蛘?,網(wǎng)絡(luò)中一臺主機被黑客入侵,則 所有服務(wù)器都會面臨嚴重威脅。在這樣的網(wǎng)絡(luò)中,你不要運行NFS、Sendmail、BIND這樣的危險服務(wù)。
這種問題的解決方法是自己購買防火墻,并配置使用透明模式,不要使用公用防火墻的透明模式。
有的IDC公司會給你提供NAT方式的防火墻,你需要在服務(wù)器上設(shè)置私有IP地址,然后由防火墻來給服務(wù)器做地址轉(zhuǎn)換。這種情況與上述情況存在同樣的問 題,那就是,在你的服務(wù)器所在的邏輯網(wǎng)段里還有其他公司的主機。例如在172.16.16.0/24這個網(wǎng)段可容納254臺主機,你的服務(wù)器使用了其中的 幾個 IP,那么可能還有200多臺其他公司的主機與你的服務(wù)器在同一個網(wǎng)段里。這樣,雖然對外有防火墻保護,但無法防范來自內(nèi)網(wǎng)的攻擊。
要解決這個問題,你不必自己購買防火墻。既然私有IP是可以任意分配的,那么你可以向IDC單獨要一個網(wǎng)段,例如172.16.19.0/24網(wǎng)段,把你的服務(wù)器都放在這個網(wǎng)段里,其中不要有其他公司的主機。這樣一來,你的內(nèi)網(wǎng)也無懈可擊了。
實際上,如果你有一個大的UNIX主機的網(wǎng)絡(luò),那么沒必要讓每臺主機都在防火墻上打開登陸端口。你可以特別設(shè)置一臺或兩臺主機做為登陸入口,對其他主機的 訪問都必須使用入口主機作為跳板。這樣做犧牲了使用的方便性,但帶來更強的安全性。當然,前提是你必須管理好入口主機。有一種電子令牌卡適合這種應(yīng)用,它 是一張隨身攜帶的卡,每隔一段時間(這個時間通常很小,幾分鐘或者幾十秒)動態(tài)產(chǎn)生一個口令,你只有使用這個口令才能登陸主機,并且該口令很快就會失效。
不僅是UNIX主機,對Windows主機的終端管理也可以采用這種跳板的方式。但Windows的終端比UNIX的shell要麻煩得多,如果你不愿犧牲太多的方便性,那么就不要這樣做。
三. 系統(tǒng)安全
系統(tǒng)安全是站點安全的主要部分。如果你的系統(tǒng)存在明顯漏洞,那么再好的物理環(huán)境和網(wǎng)絡(luò)環(huán)境也保不了你。一個很明顯的問題是,如果你的WEB服務(wù)器存在安全漏洞,你在沒有將其修補的情況下對外提供服務(wù),那么不管你的防火墻有多堅固,也會很快被入侵。因此,系統(tǒng)管理員在保證系統(tǒng)功能穩(wěn)定的同時,不得不花時間來研究系統(tǒng)的安全問題。
我所接觸的服務(wù)器主要有Windows2000 Server、Freebsd、Linux和Solaris。第一種是微軟的產(chǎn)品,方便好用,但是,你必須要不斷的patch它。Freebsd是一種優(yōu)雅的操作系統(tǒng),它簡潔的內(nèi)核和優(yōu)異的性能讓人感動。Linux和Freebsd一樣,是免費的操作系統(tǒng),它們都廣泛使用GNU(一個偉大的組織)的實用工具集,Linux容易上手,但不如Freebsd簡潔。Solaris是SUN的商用操作系統(tǒng),關(guān)于SUN OS的文章在網(wǎng)上被貼得到處都是,但遺憾的是,它看起來并不快,而且,你也要經(jīng)常對它打補丁。
關(guān)于這幾種操作系統(tǒng)的安全,每種都可以寫一本書。我不會在這里對它們進行詳細描述,只講一些系統(tǒng)初始化安全配置。
1. Windows2000 Server的初始安全配置
Windows 的服務(wù)器在運行時,都會打開一些端口,如135、139、445等。這些端口用于Windows本身的功能需要,冒失的關(guān)閉它們會影響到Windows的功能。然而,正是因為這些端口的存在,給Windows服務(wù)器帶來諸多的安全風險。遠程攻擊者可以利用這些開放端口來廣泛的收集目標主機信息,包括操作系統(tǒng)版本、域SID、域用戶名、主機SID、主機用戶名、帳號信息、網(wǎng)絡(luò)共享信息、網(wǎng)絡(luò)時間信息、Netbios名字、網(wǎng)絡(luò)接口信息等,并可用來枚舉帳號和口令。今年8月份和9月份,微軟先后發(fā)布了兩個基于135端口的RPC DCOM漏洞的安全公告,分別是MS03-026和MS03-039,該漏洞風險級別高,攻擊者可以利用它來獲取系統(tǒng)權(quán)限。而類似于這樣的漏洞在微軟的操作系統(tǒng)中經(jīng)常存在。
解決這類問題的通用方法是打補丁,微軟有保持用戶補丁更新的良好習慣,并且它的Windows2000 SP4安裝后可通過Windows Update來自動升級系統(tǒng)補丁。另外,在防火墻上明確屏蔽來自因特網(wǎng)的對135-139和445、593端口的訪問也是明智之舉。
Microsoft 的SQL Server數(shù)據(jù)庫服務(wù)也容易被攻擊,今年3月份盛行的SQL蠕蟲即使得多家公司損失慘重,因此,如果安裝了微軟的SQL Server,有必要做這些事:1)更新數(shù)據(jù)庫補?。?)更改數(shù)據(jù)庫的默認服務(wù)端口(1433);3)在防火墻上屏蔽數(shù)據(jù)庫服務(wù)端口;4)保證sa口令非空。
另外,在Windows服務(wù)器上安裝殺毒軟件是絕對必須的,并且要經(jīng)常更新病毒庫,定期運行殺毒軟件查殺病毒。
不要運行不必要的服務(wù),尤其是IIS,如果不需要它,就根本不要安裝。IIS歷來存在眾多問題,有幾點在配置時值得注意:1)操作系統(tǒng)補丁版本不得低于SP3;2)不要在默認路徑運行WEB(默認是c:inetpubwwwroot);3)以下ISAPI應(yīng)用程序擴展可被刪掉:.ida .idq .idc .shtm .shtml .printer。
2. Freebsd的初始安全配置
Freebsd在設(shè)計之初就考慮了安全問題,在初次安裝完成后,它基本只打開了22(SSH)和25(Sendmail)端口,然而,即使是Sendmail也應(yīng)該把它關(guān)閉(因為歷史上Sendmail 存在諸多安全問題)。方式是編輯/etc/rc.conf文件,改動和增加如下四句:
sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
這樣就禁止了Sendmail的功能,除非你的服務(wù)器處于一個安全的內(nèi)網(wǎng)(例如在防火墻之后并且網(wǎng)段中無其他公司主機),否則不要打開Sendmail。
禁止網(wǎng)絡(luò)日志:在/etc/rc.conf中保證有如下行:
syslogd_flags="-ss"
這樣做禁止了來自遠程主機的日志記錄并關(guān)閉514端口,但仍允許記錄本機日志。
禁止NFS服務(wù):在/etc/rc.conf中有如下幾行:
nfs_server_enable="NO"
nfs_client_enable="NO"
portmap_enable="NO"
有些情況下很需要NFS服務(wù),例如用戶上傳圖片的目錄通常需要共享出來供幾臺WEB服務(wù)器使用,就要用到NFS。同理,要打開NFS,必須保證你的服務(wù)器處于安全的內(nèi)網(wǎng),如果NFS服務(wù)器可以被其他人訪問到,那么系統(tǒng)存在較大風險。 保證/etc/inetd.conf文件中所有服務(wù)都被注銷,跟其他系統(tǒng)不同,不要由inetd運行任何服務(wù)。將如下語句加進/etc/rc.conf:
inetd_enable="NO"
所有對/etc/rc.conf文件的修改執(zhí)行完后都應(yīng)重啟系統(tǒng)。
如果要運行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,內(nèi)核一定要重新編譯,否則通不過Apache的壓力測試,關(guān)于如何配置和管理WEB服務(wù)器請見我的另一篇文章)
如果要運行FTP服務(wù),請安裝proftpd,它比較安全。在任何服務(wù)器上,都不要打開匿名FTP。
3. Linux的初始安全配置
Linux 安裝完成后,默認會打開一些不必要端口,運行netstat –an |grep LISTEN命令看一下,會看到本機打開的所有端口。除了必須的網(wǎng)絡(luò)端口如SSH、FTP和WEB,其他端口都關(guān)閉。如果你不熟悉這些端口對應(yīng)什么程序,那么請參看/etc/services文件,里面有端口和服務(wù)的對應(yīng)列表。
在Redhat 9.0默認安裝完成后,請進入/etc/rc2.d和/etc/rc3.d,將系統(tǒng)啟動時打開的不必要服務(wù)都在這里注銷掉。這些服務(wù)通常包括 sendmail、NFS、rpc等,注銷的方法是將S打頭的相關(guān)服務(wù)文件重命名(注意不要命名為S或K 打頭的其他文件)。
例如將/etc/rc2.d/S80sendmail 改名為 X80sendmail
將/etc/rc3.d/S13portmap S14nfslock S28autofs S80sendmail 改名為 X13portmap X14nfslock X28autofs X80sendmail
RPC的安全問題歷來很多,請注意一定不要打開111端口。
改完后需要重啟Linux服務(wù)器。
如果你的Linux直接面對因特網(wǎng),那么可以配置它的防火墻來實現(xiàn)訪問控制。Linux2.4內(nèi)核支持iptables,2.4以下支持ipchains,它們的語法差不多,都是很好的防火墻工具。例如,如果你只允許從因特網(wǎng)訪問SSH和WWW服務(wù),那么可將如下語句加進/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規(guī)則表,接下來兩條語句允許任何人訪問211.96.13.*這個地址的WWW和SSH服務(wù),最后一條DROP語句將不符合規(guī)則的其他訪問過濾掉。這樣系統(tǒng)在啟動后即可自動運行防火墻規(guī)則。
通常在Freebsd或Linux上會運行Mysql數(shù)據(jù)庫服務(wù),不要將數(shù)據(jù)庫服務(wù)端口(3306)暴露在防火墻之外。如果運行Apache,同樣要做如Freebsd的修改。
4. Solaris的初始安全配置
關(guān)于Solaris的安全配置網(wǎng)上有一篇非常好的文章,叫做《The Solaris Security FAQ》,照著做就可以了。
1) 禁止root從網(wǎng)絡(luò)直接登陸:修改/etc/default/login文件,確保CONSOLE=/dev/console被設(shè)置,該行只允許root從控制臺登陸。將root用戶加入/etc/ftpusers,保證root不可以遠程使用ftp。
2) 禁止rlogin和rsh訪問:刪除/etc/hosts.equiv和/.rhosts文件,從/etc/inetd.conf文件里注釋掉所有以r打頭的服務(wù)。
3) 帳號控制:刪除、鎖定或注釋掉不必要的系統(tǒng)帳號,包括sys/uucp/nuucp/listen等
4) 改變/etc目錄的訪問權(quán)限:該目錄下文件不應(yīng)該對同組用戶可寫,執(zhí)行:chmod –R g-w /etc (不推薦)
5) 在solaris2.5 以上版本的系統(tǒng)中,創(chuàng)建/etc/notrouter文件來關(guān)閉solaris默認的路由轉(zhuǎn)發(fā)。
6) 禁止automounter:刪除/etc/auto_*配置文件,刪除/etc/init.d/autofs
7) 禁止NFS服務(wù):刪除/etc/dfs/dfstab,重命名/etc/rc3.d/S15nfs.server,重命名/etc/rc2.d/S73nfs.client (不要再以S打頭)
8) 禁止rpc服務(wù):重命名/etc/rc2.d/S71RPC
9) 修改/etc/inetd.conf文件,注釋掉大部分不必要服務(wù),只保留telnet和ftp服務(wù),然后重啟inetd進程。
10) 給系統(tǒng)打補?。喊ǜ靼姹維olaris通用補丁和單個補丁集合。
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
這樣在系統(tǒng)啟動后就關(guān)閉了IP轉(zhuǎn)發(fā)和IP源路由。四. 服務(wù)器安全管理
4.1 安全管理應(yīng)做的事
安全管理是站點安全中最重要的一環(huán),離開了管理,安全將變得不切實際。以下也許是Windows系統(tǒng)安全管理員每天應(yīng)做的事:
1. 檢查系統(tǒng)有無新增帳戶,并了解其來源及用途;查看管理員組里有無新增帳戶,該組的帳戶除系統(tǒng)最初設(shè)置外,以后不應(yīng)該增加帳戶;
2. 在命令行狀態(tài)下,運行netstat –an命令查看當前連接及打開的端口,查找可疑連接及可疑的端口;
3. 查看“任務(wù)管理器”,查找有無可疑的應(yīng)用程序或后臺進程在運行,并觀察CPU及內(nèi)存的使用狀態(tài);
4. 運行注冊表編輯器,查找有無可疑的程序被加到windows的啟動項里,并查看有無新增的可疑服務(wù);
5. 使用 Windows事件查看器查看“系統(tǒng)日志”“安全日志”和“應(yīng)用程序日志”,以發(fā)現(xiàn)有無可疑的事件或影響系統(tǒng)性能的事件;
6. 檢查共享目錄,不應(yīng)有對所有用戶可寫的目錄存在;
7. 如果運行Microsoft IIS,查看C:WINNTsystem32LogFiles下的WEB 服務(wù)器日志,以發(fā)現(xiàn)是否有試圖攻擊WEB的行為;
8. 不定期運行殺毒軟件查殺病毒;
9. 經(jīng)常瀏覽微軟的網(wǎng)站,保持服務(wù)器的補丁同步更新,留意微軟發(fā)布的安全公告。
以下是Unix系統(tǒng)安全管理員應(yīng)經(jīng)常做的事:
1. 以root運行l(wèi)ast,查看用戶在過去一段時間內(nèi)所發(fā)生的事件;
2. 查看/etc/passwd和/etc/shadow文件,以發(fā)現(xiàn)是否有新增用戶,并追查用戶來源及用途;保證這兩個文件中的系統(tǒng)用戶(如Daemon bin sys adm lp uucp nuucp listen noaccess、mysql、sshd、nobody等)沒有自己的shell;檢查有無帳戶被提升到root權(quán)限(UID 0);
3. 運行netstat –an |grep LISTEN查看有無可疑的打開的端口;
4. 使用ps命令查看系統(tǒng)進程,保證只有必要的進程在運行;
5. 檢查被cron運行的程序,Solaris一般在/var/spool/cron目錄里,F(xiàn)reebsd一般在/var/cron里,初始化的crontable除root外,其他用戶不應(yīng)擁有;仔細查看root的crontable;
6. 使用vmstat和top查看系統(tǒng)資源占用狀況,對高資源占用的系統(tǒng)進程要做謹慎處理;
7. 查看系統(tǒng)日志,包括Solaris下的/var/adm/messages和Freebsd下的/var/log/messages,以發(fā)現(xiàn)有無可疑的事件發(fā)生;
8. 查看系統(tǒng)安全日志,包括用戶登陸嘗試、驗證失敗、可疑的IP地址登陸等,在solaris下是/var/log/authlog,freebsd下是/var/log/auth.log;
9. 運行chkrootkit,以檢查系統(tǒng)是否被植入木馬程序;
10. 安裝了Apache的主機,不定期查看Apache的訪問日志和錯誤日志, 以發(fā)現(xiàn)是否有試圖攻擊WEB的行為。
4.2 系統(tǒng)及服務(wù)的穩(wěn)定性
一些重要的服務(wù)器是片刻也不能停的,一旦發(fā)生服務(wù)器down機事故,而你又沒有及時發(fā)現(xiàn)和恢復(fù),那么你面對的將是鋪天蓋地的指責。系統(tǒng)安全管理的任務(wù)也許不是很重,但責任卻并不輕。因此,你有必要時刻了解服務(wù)器的存活狀況,一旦發(fā)生down機事件,你應(yīng)在第一時間知道。
有些好的IDC機房有服務(wù)器監(jiān)控系統(tǒng),一旦某臺機器down掉,它會發(fā)出警報。然后機房的值班人員會電話通知你,這樣你就能從容的處理事故。然而,并非所有的機房都有這樣的措施,很多時候還得依靠自己的小心。
在機房網(wǎng)絡(luò)中,應(yīng)該有一它網(wǎng)管機器,這臺機器最好是Unix系統(tǒng),因為你可以在上面編寫腳本來監(jiān)控網(wǎng)絡(luò),并通過sendmail發(fā)送郵件給自己。這臺機器可以是一臺服務(wù)器,象前面講過的登陸入口服務(wù)器,就完全可以充當網(wǎng)管機;也可以是一臺配置很低的普通PC,能運行Linux或Freebsd就可以了。有必要在上面運行sendmail,因為它要對外發(fā)送郵件。當然,sendmail有一些安全問題,因此在運行它之前,你必須確認服務(wù)器處于安全的網(wǎng)絡(luò):在防火墻之后,且同一網(wǎng)段中沒有其他公司的服務(wù)器。否則,就不要運行它。當然,你也可以配置sendmail綁定在127.0.0.1端口,不接受網(wǎng)絡(luò)請求(在Linux默認安裝的sendmail不接受網(wǎng)絡(luò)請求,F(xiàn)reebsd中可以在rc.conf文件中設(shè)置使sendmail綁定在127.0.0.1 端口),這樣的sendmail會安全很多。
然后你可以寫一個簡單的腳本來監(jiān)控網(wǎng)絡(luò)主機生存狀況。在Unix主機上,使用shell或perl都很容易編寫腳本,但是,shell腳本用于系統(tǒng)管理更簡單明了,除非你要進行復(fù)雜的數(shù)學(xué)計算或文本處理。如下這個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
該腳本執(zhí)行一個簡單的ping操作,以判斷目標主機是否存活,如果目標主機停止響應(yīng),則向管理員發(fā)送郵件報警。 你可以在任務(wù)里設(shè)定每隔一段時間執(zhí)行一次該腳本,由于ping對內(nèi)網(wǎng)的影響很小,因此這個時間可以短一些,我把它設(shè)為1小時。
然而,有的時候,你可能關(guān)心的不止是服務(wù)器是否存活,更想了解它的服務(wù)狀態(tài)是否正常,這個時候,你可以使用一個工具來判斷服務(wù)器的開放服務(wù)狀態(tài),這個工具就是被Unix系統(tǒng)管理員廣泛使用的網(wǎng)絡(luò)端口掃描工具Nmap(可以從http://www.insecure.org/nmap/ 下載最新版本)。它的使用很簡單,安裝完成后直接在命令行下執(zhí)行:nmap IP,就可以得到目標主機的開放TCP端口狀況。當然,Nmap的功能遠不止如此,它還可以執(zhí)行UDP、SYN、FIN、RPC等掃描,它的半開放掃描可繞過防火墻的過濾,并可根據(jù)操作系統(tǒng)指紋判斷目標系統(tǒng)類型。在這里只要利用到Nmap的TCP掃描就夠了。然后,你可以編寫一個腳本來定期檢測服務(wù)器的開放端口狀況,并將結(jié)果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終端服務(wù)和Pcanywhere服務(wù)是否正常,如果不正常,就向管理員發(fā)送郵件報警。如果你需要檢查其他的服務(wù)端口,修改該腳本即可。
你也可以配置任務(wù)來定期執(zhí)行該腳本,不過請注意,Nmap掃描會影響網(wǎng)絡(luò),因此檢測的時間間距不要太小。當然,在Unix系統(tǒng)下,有好些方法可以判斷目標系統(tǒng)的開放端口狀況,但使用Nmap掃描看起來也不錯。4.3 日志管理
不管是Windows系統(tǒng)還是Unix系統(tǒng),都有自己的事件日志。在Windows下使用事件查看器可以清楚的了解系統(tǒng)運行的各項狀態(tài),它包括應(yīng)用程序日志、安全日志和系統(tǒng)日志。你應(yīng)經(jīng)常閱讀這些日志,尤其是一些紅色標記的錯誤信息。根據(jù)這些錯誤提示發(fā)現(xiàn)問題和解決問題是Windows系統(tǒng)管理員應(yīng)做的事。
如果服務(wù)器不加入域,那么一般來說系統(tǒng)錯誤信息很少;如果在機房的服務(wù)器組成一個域,那么從日志里可能會經(jīng)??吹礁鞣N錯誤提示,尤其是在域控制器有問題的時候。管理好一個域不是一件太容易的事,它憑空給系統(tǒng)管理員增加很多困難。如果你真碰到這樣的問題,建議你到google上面去查找答案,一般來說,你碰到的問題別人肯定也遇見過了,因特網(wǎng)上有很多熱心的人愿意解答困難者的問題(尤其是國外的技術(shù)站點)。
讀Windows的日志不浪費你太多精神,因為它都分門別類整理得很清楚,有什么錯誤能一目了然的看出來。每天快速翻一下它的日志是可行的,如果你的服務(wù)器磁盤有壞道,也能從日志里體現(xiàn)出來,為你及早更換磁盤、避免數(shù)據(jù)災(zāi)難贏得了時間。
在 Unix系統(tǒng)下,讀日志要費勁一些,因為Unix系統(tǒng)通常把一些通用的日志信息寫到messages文件里,導(dǎo)致這個文件里雜七雜八什么都有,包括應(yīng)用程序信息、用戶驗證信息、網(wǎng)絡(luò)連接信息、內(nèi)核信息等等,在瀏覽它們時比較費勁。然而,這不意味著你可以不管它們。實際上,日志文件是系統(tǒng)偵錯時的唯一依據(jù)。某天你的Unix系統(tǒng)崩潰了,在居喪之余,不要忘了去分析它的日志,或許可以為你找到原因。
在Unix系統(tǒng)下,有一個日志分析軟件叫 Swatch,它能很好的幫你裁減和分析日志,減輕系統(tǒng)管理員的負擔。關(guān)于它的安裝和使用我不在這里詳敘,因為我自己并沒有使用它。我自己編寫腳本用于查看日志,使用awk語句照樣能將日志文件裁減到合理的程度。這個腳本的樣式我不在這里描述,因為不同的系統(tǒng)和網(wǎng)絡(luò)環(huán)境所產(chǎn)生的條件并不一樣。
在UNIX系統(tǒng)下,另外一個日志文件也很值得關(guān)注,它記載了用戶的登陸和驗證信息,該文件一般位于/var/log下,名為authlog或者auth.log,只有root才可以對它進行讀寫。
如果系統(tǒng)中安裝了Apache,那么經(jīng)常查看Apache的錯誤日志和訪問日志也值得推薦。從這兩個日志里,你可以發(fā)現(xiàn)很多有趣信息,因特網(wǎng)上對WEB站點的攻擊從來沒有終止過(從這里也可以找到大量試圖攻擊IIS的信息)。
4.4 用戶管理
用戶管理通常是指系統(tǒng)的用戶帳戶管理,不管是UNIX系統(tǒng)還是Windows系統(tǒng),帳戶安全是系統(tǒng)安全的關(guān)鍵。系統(tǒng)中應(yīng)保持固定數(shù)量的用戶帳戶,作為系統(tǒng)管理員,應(yīng)清楚每一個帳戶的使用者和用途。用戶新申請帳戶應(yīng)該有個流程,規(guī)范的管理總比不規(guī)范好。
在 Unix系統(tǒng)上,大多數(shù)系統(tǒng)帳戶平時是沒什么用的,包括:bin daemon adm lp mail news uucp operator games gopher rpc等,如果你不把它們刪除,那么也不要讓它們擁有真正的shell,檢查/etc/passwd文件,看看這些帳戶的最后一個域(shell)是否被置/sbin/nologin或/bin/false。經(jīng)常檢查帳戶的權(quán)限,普通帳戶不應(yīng)該在root組(gid=0),更不應(yīng)擁有root權(quán)限(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 "
$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下,F(xiàn)reebsd的/etc/passwd文件前兩行是版本說明,所以在程序里把它跳過,從第三行起挨個檢查用戶帳號,它將每一個擁有真正shell或者擁有root用戶ID或組ID的帳號在屏幕上打印出來。
同樣,在Windows服務(wù)器上,如果不運行IIS服務(wù),那么把IIS相關(guān)的帳號禁止掉,把終端服務(wù)帳號禁止掉,把guest帳號禁止掉。Windows系統(tǒng)的管理員組除了Administrator外不要有其他帳號,甚至應(yīng)該把Administrator帳號改名。每一個帳號在帳號描述里說明它的用途。如果Windows服務(wù)器采用域的方式,那么應(yīng)確保域中有盡可能少的用戶。一般域中兩個用戶就夠了,一個Administrators組的用戶,一個普通用戶。請記住,域的Administrators組的用戶(通常是administrator)對你的每一臺加入域的服務(wù)器都有生死控制權(quán),所以你應(yīng)絕對保證這個帳戶的安全。
不管是系統(tǒng)的root密碼還是普通用戶密碼,都應(yīng)定期更改。我一般每兩個月更改一次系統(tǒng)root密碼。當然,如發(fā)現(xiàn)系統(tǒng)有被入侵跡象,應(yīng)馬上更改密碼。對于用戶密碼,不管在什么系統(tǒng)中,都可以設(shè)置密碼過期期限,用戶使用一段時間后必須更改密碼。有的用戶安全意識并不強烈,他們使用自己容易記住的詞匯作為口令,例如自己的英文名或者生日。這些都容易被猜測,你可以使用工具破解這些簡單口令。Unix下的John和Windows 下的LC3都是非常好的密碼破解工具,在系統(tǒng)上運行它們幾分鐘就可以破解出一堆弱口令??诹钸^于簡單的用戶,一定要強制他們更改口令,否則后患無窮。如果用戶拒絕更改口令,那就刪除他們,我就做過這樣的事。
4.5 安全巡檢
最后要講的是安全巡檢,有時間就跑到機房看看去吧,看看服務(wù)器運行的環(huán)境,檢查一下電源和網(wǎng)線,摸摸機表的溫度,跟機房的值班人員聊聊天,都對你有好處。一般來說,就算服務(wù)器正常運行,每月也應(yīng)去機房兩次。當然,來去打車的費用,希望你的公司給你報銷。