“拯救網(wǎng)站運(yùn)維趙明”—網(wǎng)站安全的外圍防護(hù)調(diào)整方案
原創(chuàng)【51CTO.com獨(dú)家特稿】有很多人都認(rèn)可“沒(méi)有Web,就沒(méi)有Internet”。Web 服務(wù)是一種可以用來(lái)解決跨越網(wǎng)絡(luò)應(yīng)用集成問(wèn)題的開(kāi)發(fā)模式,這種模式為實(shí)現(xiàn)“軟件作為服務(wù)”提供了技術(shù)保障。觀看了趙明同學(xué)設(shè)計(jì)的網(wǎng)絡(luò)拓?fù)浣Y(jié)后,我只能說(shuō)這個(gè)哥們的膽子是在太大了,在沒(méi)有任何防御手段前,就干利用一臺(tái)負(fù)載均衡器直接掛接在Internet上,看來(lái)他抽煙還是抽的少。而“軟件作為服務(wù)”實(shí)質(zhì)上是一種提供軟件服務(wù)的機(jī)制,這種機(jī)制可以在網(wǎng)絡(luò)上暴露可編程接口,并通過(guò)這些接口來(lái)共享站點(diǎn)開(kāi)放出來(lái)的功能??墒窃诤芏嗲闆r下,Web應(yīng)用程序及 Web站點(diǎn)往往易遭受到各種各樣的攻擊,數(shù)據(jù)在網(wǎng)絡(luò)傳輸過(guò)程中也很容易被竊取或盜用。
Web的外圍防御何等重要
◆Web服務(wù)的安全涉及了很多內(nèi)容,我們可以從他可能受到的攻擊上看,例如對(duì)WEB應(yīng)用程序的破壞、繞過(guò)驗(yàn)證與Session驗(yàn)證、獲取管理權(quán)限、獲取資源、針對(duì)主機(jī)漏洞與WEB安全漏洞攻擊、跨站腳本攻擊及SQL注射攻擊等等。另外,硬件與物理環(huán)境的錯(cuò)誤,也都會(huì)導(dǎo)致資源無(wú)法被客戶(hù)端訪問(wèn)到。安全面的Web安全防御要從以下幾個(gè)方面入手,構(gòu)建出一個(gè)安全的防御架構(gòu):
◆資源保護(hù):對(duì)于重要資源,如數(shù)據(jù)庫(kù)中或文件系統(tǒng)上的數(shù)據(jù);物理環(huán)境,如UPS供電、磁盤(pán)冗余、雙機(jī)冗余;Internet訪問(wèn)接口的訪問(wèn)控制,數(shù)據(jù)的授權(quán)與認(rèn)證訪問(wèn)。
◆威脅和威脅建模:所有類(lèi)型的威脅包括網(wǎng)絡(luò)威脅、主機(jī)威脅、與應(yīng)用的威脅;重點(diǎn)放在Web應(yīng)用的威脅,如:SQL注入、跨網(wǎng)站腳本、輸入篡改、劫獲會(huì)話(huà)等;掌握威脅建模的方法與步驟,使你能系統(tǒng)地全面地了解Web應(yīng)用可能的威脅。
◆程序缺陷與服務(wù)漏洞:包括操作系統(tǒng)在某方面的弱點(diǎn)或特性,以及它有可能造成威脅的發(fā)生。網(wǎng)絡(luò)、主機(jī)或應(yīng)用程序編寫(xiě)過(guò)程中可能存在缺陷。
◆攻擊與對(duì)策:100%的安全是不存在的,當(dāng)某人或者設(shè)備采取的危害資源的行為之后,應(yīng)對(duì)威脅、減小危險(xiǎn)的安全措施。最后是應(yīng)急響應(yīng)、犯罪證據(jù)的取證,以及災(zāi)難恢復(fù)工作的執(zhí)行效率。
缺少防火墻保護(hù)
趙明連最基本的防護(hù)都沒(méi)有建立起來(lái),我想還是讓我們也從最基礎(chǔ)的安全設(shè)備來(lái)慢慢解決問(wèn)題吧。我試問(wèn)趙明一個(gè)問(wèn)題,如今的網(wǎng)絡(luò)中,還有那個(gè)網(wǎng)絡(luò)是沒(méi)有防火墻的呢?
防火墻是指設(shè)置在不同網(wǎng)絡(luò)(如可信任的企業(yè)內(nèi)部網(wǎng)和不可信的公共網(wǎng))或網(wǎng)絡(luò)安全域之間的一系列部件的組合。大多數(shù)對(duì)外部提供服務(wù)的Web服務(wù)器都放在DMZ區(qū)域或內(nèi)部網(wǎng)絡(luò)中,對(duì)外部和內(nèi)部用戶(hù)授予不同的訪問(wèn)權(quán)限。對(duì)于配備了專(zhuān)用防火墻的網(wǎng)絡(luò),此項(xiàng)任務(wù)可以在防火墻上完成,這樣可以減輕路由器的負(fù)擔(dān)。對(duì)于沒(méi)有配備專(zhuān)用防火墻的簡(jiǎn)易網(wǎng)絡(luò),采用動(dòng)態(tài)分組過(guò)濾技術(shù)建立對(duì)重要服務(wù)器的訪問(wèn)限制就顯得尤為重要。
圖:最普通的硬件防火墻內(nèi)部結(jié)構(gòu)
當(dāng)然,無(wú)論是基于路由器實(shí)現(xiàn),還是在防火墻上完成設(shè)置,首先都應(yīng)該制定一套訪問(wèn)規(guī)則。如:允許外部用戶(hù)到Web服務(wù)器的向內(nèi)連接請(qǐng)求,已經(jīng)允許Web服務(wù)器到外部用戶(hù)的向外答復(fù)等等。在多數(shù)的網(wǎng)絡(luò)中,我們不可能將Web主機(jī)直接曝露在Internet上,所以使用NAT(Network Address Translation,網(wǎng)絡(luò)地址翻譯)技術(shù),將局域網(wǎng)中Web服務(wù)器的內(nèi)部地址翻譯成合法的Internet IP地址使用,這是提高Web主機(jī)安全性的普遍做法。
反向代理與防火墻的集成應(yīng)用
不過(guò)話(huà)又說(shuō)回來(lái)了,即使使用了防火墻技術(shù),我們還有可能遭受入侵攻擊導(dǎo)致服務(wù)器癱瘓或網(wǎng)頁(yè)被篡改,這是因?yàn)闊o(wú)法避免Web服務(wù)器的真實(shí)數(shù)據(jù)暴露在網(wǎng)絡(luò)外部。而大多管理員都在使用包過(guò)濾型的防火墻保護(hù)對(duì)外發(fā)布Web的信息,但傳統(tǒng)意義上的包過(guò)濾防火墻有很多弊病,歸納起來(lái)有三點(diǎn):
◆通信方面:包過(guò)濾防火墻只能訪問(wèn)部分?jǐn)?shù)據(jù)包的頭信息;
◆狀態(tài)監(jiān)管:包過(guò)濾防火墻是無(wú)狀態(tài)的,所以它不可能保存來(lái)自于通信和應(yīng)用的狀態(tài)信息;
◆信息處理:包過(guò)濾防火墻處理信息的能力是有限的。
比如,教科書(shū)上都講IIS Unicode攻擊,以及最近流行的“注入技術(shù)”,因?yàn)檫@種攻擊是選擇了防火墻所允許的80端口,而包過(guò)濾的防火墻無(wú)法對(duì)數(shù)據(jù)包內(nèi)容進(jìn)行核查,此時(shí)防火墻等同于虛設(shè),即使在防火墻的屏障之后,也會(huì)被攻擊者輕松拿下超級(jí)用戶(hù)的管理權(quán)限。
另外一種做法就是使用反向代理技術(shù),反向代理服務(wù)器可以避免有效的減少上述攻擊。它對(duì)外就表現(xiàn)為一個(gè)Web服務(wù)器,不同之處在于的這個(gè)服務(wù)器沒(méi)有保存任何網(wǎng)頁(yè)的真實(shí)數(shù)據(jù),所有的靜態(tài)網(wǎng)頁(yè)或者CGI程序,都保存在內(nèi)部的Web服務(wù)器上。因此對(duì)反向代理服務(wù)器的攻擊并不會(huì)使得網(wǎng)頁(yè)信息遭到破壞,這樣就增強(qiáng)了Web服務(wù)器的安全性。
反向代理方式和包過(guò)濾方式或普通代理方式并無(wú)沖突,因此可以在防火墻設(shè)備中同時(shí)使用這兩種方式,其中反向代理用于外部網(wǎng)絡(luò)訪問(wèn)內(nèi)部網(wǎng)絡(luò)時(shí)使用,正向代理或包過(guò)濾方式用于拒絕其他外部訪問(wèn)方式并提供內(nèi)部網(wǎng)絡(luò)對(duì)外部網(wǎng)絡(luò)的訪問(wèn)能力。因此可以結(jié)合這些方式提供最佳的安全訪問(wèn)方式。
綜合反向代理功能和普通拒絕外部訪問(wèn)的普通防火墻軟件相結(jié)合,就能構(gòu)成一個(gè)既具有保護(hù)內(nèi)部網(wǎng)絡(luò)、又能對(duì)外提供Web信息發(fā)布的能力的防火墻系統(tǒng)。由于反向代理能力需要軟件實(shí)現(xiàn),因此不能使用現(xiàn)有的防火墻系統(tǒng),需要使用相關(guān)軟件進(jìn)行開(kāi)發(fā)改進(jìn)。Unix顯然是首選平臺(tái),我們基于FreeBSD系統(tǒng),提出一種基于ipfw、natd與squid的防火墻設(shè)置方式。其中ipfw可以基于ip地址、端口、協(xié)議等對(duì)ip包進(jìn)行過(guò)濾,natd提供網(wǎng)絡(luò)地址轉(zhuǎn)換功能,這樣就隱藏了內(nèi)部網(wǎng)絡(luò)的拓?fù)涞刃畔?,ipfw和natd結(jié)合就構(gòu)成了強(qiáng)大的包過(guò)濾網(wǎng)關(guān)。而squid是Internet上最流行的Web代理服務(wù)器之一,雖然它提供的是普通的正向代理能力,但其為開(kāi)放源代碼軟件,并且具有強(qiáng)大的可配置性,因此很容易可以將其更改為反向代理服務(wù)器。
網(wǎng)絡(luò)架構(gòu)的調(diào)整與部署
針對(duì)趙明設(shè)計(jì)的拓?fù)?,如下圖:
我們可以從客戶(hù)端的角度(正常訪問(wèn)和黑客攻擊)重新修改此網(wǎng)絡(luò)結(jié)構(gòu),做到外圍安全調(diào)整的目的?;卷樞?yàn)椋嚎蛻?hù)端 →防火墻→負(fù)載均衡器→反向代理(緩存)→WEB服務(wù)器→數(shù)據(jù)庫(kù)服務(wù)器,其結(jié)構(gòu)如下:
假設(shè),原來(lái)設(shè)計(jì)上的負(fù)載均衡服務(wù)器采用了Nginx,那么這個(gè)網(wǎng)站就可以建立在“混元”或者是硬件“防火墻+開(kāi)源”的基礎(chǔ)上重新設(shè)計(jì)和部署,例如采用:
◆Cisco的防火墻:建立基本W(wǎng)eb通信和訪問(wèn)防護(hù)
◆eAccelerator:加速PHP引擎,同時(shí)也可以加密PHP源程序
◆memcache:用于高速緩存常用數(shù)據(jù)
◆libevent:memcache工作機(jī)制所需
◆MySQL:原數(shù)據(jù)庫(kù)
◆Nginx:用做負(fù)載均衡器
◆Squid:做反向代理的同時(shí)提供專(zhuān)業(yè)緩存功能防止網(wǎng)頁(yè)篡改 至此,我已經(jīng)大致的Web外圍防護(hù)中的一些概念、用途以及實(shí)現(xiàn)的方法,而基于篇幅的原因,有一些內(nèi)容需要趙明自行去查閱更多的技術(shù)資料才能找到答案,不過(guò)也都是以上這些軟件具體的安裝步驟了。但愿趙明能夠“軟硬兼施”,確保網(wǎng)站的安全運(yùn)維。
【51CTO.COM 獨(dú)家特稿,轉(zhuǎn)載請(qǐng)注明出處及作者!】
【編輯推薦】