防火墻的結(jié)構(gòu)和原理
2022-10-21?
圍觀熱度 948?資訊中心
無論服務(wù)器部署在哪里,現(xiàn)在一般都會(huì)在前面部署一個(gè)防火墻,如果包無法通過防火墻,就無法到達(dá)服務(wù)器。因此,讓我們先來探索一下包是如何通過防火墻的。
防火墻的基本思路剛才已經(jīng)介紹過了,即只允許發(fā)往特定服務(wù)器中的特定應(yīng)用程序的包通過,然后屏蔽其他的包。不過,特定服務(wù)器上的特定應(yīng)用程序這個(gè)規(guī)則看起來不復(fù)雜,但網(wǎng)絡(luò)中流動(dòng)著很多各種各樣的包,如何才能從這些包中分辨出哪些可以通過,哪些不能通過呢?為此,人們設(shè)計(jì)了多種方式,其中任何一種方式都可以實(shí)現(xiàn)防火墻的目的,但出于性能、價(jià)格、易用性等因素,現(xiàn)在最為普及的是包過濾方式。因此,我們的探險(xiǎn)之旅就集中介紹一下包過濾方式的防火墻是怎樣工作的。
網(wǎng)絡(luò)包的頭部包含了用于控制通信操作的控制信息,只要檢查這些信息,就可以獲得很多有用的內(nèi)容。這些頭部信息中,經(jīng)常用于設(shè)置包過濾規(guī)則的字段如表5.1所示。不過,光看這張表還是難以理解過濾規(guī)則是如何設(shè)置的,所以我們來看一個(gè)具體的例子。表5.1 地址轉(zhuǎn)換和包過濾中用于設(shè)置規(guī)則的字段
假設(shè)我們的網(wǎng)絡(luò)如圖5.2所示,將開放給外網(wǎng)的服務(wù)器和公司內(nèi)網(wǎng)分開部署,Web服務(wù)器所在的網(wǎng)絡(luò)可以從外網(wǎng)直接訪問。現(xiàn)在我們希望允許從互聯(lián)網(wǎng)訪問Web服務(wù)器(圖5.2①),但禁止Web服務(wù)器訪問互聯(lián)網(wǎng)(圖5.2②)。以前很少禁止Web服務(wù)器訪問互聯(lián)網(wǎng),但現(xiàn)在出現(xiàn)了一些寄生在服務(wù)器中感染其他服務(wù)器的惡意軟件,如果阻止Web服務(wù)器訪問互聯(lián)網(wǎng),就可以防止其他服務(wù)器被感染。要實(shí)現(xiàn)這樣的要求,應(yīng)該如何設(shè)置包過濾的規(guī)則呢?我們就用這個(gè)例子來看一看包過濾的具體思路。
在設(shè)置包過濾規(guī)則時(shí),首先要觀察包是如何流動(dòng)的。通過接收方IP地址和發(fā)送方IP地址,我們可以判斷出包的起點(diǎn)和終點(diǎn)。在圖5.2①的例子中,包從互聯(lián)網(wǎng)流向Web服務(wù)器,從互聯(lián)網(wǎng)發(fā)送過來的包其起點(diǎn)是不確定的,但終點(diǎn)是確定的,即Web服務(wù)器。因此,我們可以按此來設(shè)定規(guī)則,允許符合規(guī)則的包通過。也就是說,允許起點(diǎn)(發(fā)送方IP地址)為任意,終點(diǎn)(接收方IP地址)為Web服務(wù)器IP地址的包通過(圖5.2中表的第1行)。如果可以確定發(fā)送方IP地址,也可以將其加入規(guī)則,但這個(gè)例子中起點(diǎn)是不確定的,因此可以不將發(fā)送方IP地址設(shè)為判斷條件。
這樣一來,從互聯(lián)網(wǎng)發(fā)往Web服務(wù)器的包就可以通過防火墻了,但光這樣還無法完成訪問。因?yàn)槭盏桨?,Web服務(wù)器需要通過確認(rèn)應(yīng)答機(jī)制[插圖]通知發(fā)送方數(shù)據(jù)已經(jīng)正常收到,這需要Web服務(wù)器向互聯(lián)網(wǎng)發(fā)送包。在Web服務(wù)器發(fā)往互聯(lián)網(wǎng)的包中,我們可以將起點(diǎn)(發(fā)送方IP地址)為Web服務(wù)器地址的包設(shè)置為允許通過(圖5.2中表的第3行)。像這樣,我們可以先根據(jù)接收方和發(fā)送方地址判斷包的流向,并設(shè)置是允許還是阻止。
不過,按照前面的設(shè)置,相當(dāng)于允許了互聯(lián)網(wǎng)和Web服務(wù)器之間所有的包通過,這個(gè)狀態(tài)很危險(xiǎn)。假如服務(wù)器上還有一個(gè)文件服務(wù)器程序在工作,那么這些文件就可能會(huì)被非法訪問從而造成信息泄露。有風(fēng)險(xiǎn)的還不僅是文件服務(wù)器,現(xiàn)在每天都會(huì)發(fā)布若干安全漏洞,可以說隨處都隱藏著風(fēng)險(xiǎn)。因此,我們最好是阻止除了必需服務(wù)(也就是本例中的Web服務(wù))以外的所有應(yīng)用程序的包。
當(dāng)我們要限定某個(gè)應(yīng)用程序時(shí),可以在判斷條件中加上TCP頭部或者UDP頭部中的端口號。Web服務(wù)器的端口號為80[插圖],因此我們在剛才的接收方IP地址和發(fā)送方IP地址的基礎(chǔ)上再加上80端口作為條件就可以了。也就是說,當(dāng)包的接收方IP地址為Web服務(wù)器地址,且接收方端口號為80時(shí),允許這些包通過(圖5.2中表的第1行);或者當(dāng)包的發(fā)送方IP地址為Web服務(wù)器地址,且發(fā)送方端口號為80時(shí),允許這些包通過(圖5.2中的表的第3行)。如果要允許訪問除Web之外的其他應(yīng)用程序,則只要將該應(yīng)用程序的端口號設(shè)置到防火墻中并允許通過就可以了。
通過防火墻像這樣,我們可以在防火墻中設(shè)置各種規(guī)則,當(dāng)包到達(dá)防火墻時(shí),會(huì)根據(jù)這些規(guī)則判斷是允許通過還是阻止通過。如果判斷結(jié)果為阻止,那么這個(gè)包會(huì)被丟棄并被記錄下來[插圖]。這是因?yàn)檫@些被丟棄的包中通常含有非法入侵的痕跡,通過分析這些包能夠搞清楚入侵者使用的手法,從而幫助我們更好地防范非法入侵。
如果包被判斷為允許通過,則該包會(huì)被轉(zhuǎn)發(fā)出去,這個(gè)轉(zhuǎn)發(fā)的過程和路由器是相同的。如果我們只關(guān)注判斷是否允許包通過這一點(diǎn),可能會(huì)覺得防火墻是一種特殊機(jī)制,而且市面上銷售的防火墻大多是專用的硬件設(shè)備或者軟件,這也加深了大家的這種印象。實(shí)際上,在防火墻允許包通過之后,就沒有什么特別的機(jī)制了,因此包過濾并不是防火墻專用的一種特殊機(jī)制,而是應(yīng)該看作在路由器的包轉(zhuǎn)發(fā)功能基礎(chǔ)上附加的一種功能。只不過當(dāng)判斷規(guī)則比較復(fù)雜時(shí),通過路由器的命令難以維護(hù)這些規(guī)則,而且對阻止的包進(jìn)行記錄對于路由器來說負(fù)擔(dān)也比較大,因此才出現(xiàn)了專用的硬件和軟件。如果規(guī)則不復(fù)雜,也不需要記錄日志,那么用內(nèi)置包過濾功能的普通路由器來充當(dāng)防火墻也是可以的。
防火墻無法抵御的攻擊防火墻可以根據(jù)包的起點(diǎn)和終點(diǎn)來判斷是否允許其通過,但僅憑起點(diǎn)和終點(diǎn)并不能篩選出所有有風(fēng)險(xiǎn)的包。比如,假設(shè)Web服務(wù)器在收到含有特定數(shù)據(jù)的包時(shí)會(huì)引起宕機(jī)。但是防火墻只關(guān)心包的起點(diǎn)和終點(diǎn),因此即便包中含有特定數(shù)據(jù),防火墻也無法發(fā)現(xiàn),于是包就被放行了。然后,當(dāng)包到達(dá)Web服務(wù)器時(shí),就會(huì)引發(fā)服務(wù)器宕機(jī)。通過這個(gè)例子大家可以看出,只有檢查包的內(nèi)容才能識別這種風(fēng)險(xiǎn),因此防火墻對這種情況無能為力。
要應(yīng)對這種情況有兩種方法。這個(gè)問題的根源在于Web服務(wù)器程序的Bug,因此修復(fù)Bug防止宕機(jī)就是其中一種方法。這類Bug中,危險(xiǎn)性較高的會(huì)作為安全漏洞公布出來,開發(fā)者會(huì)很快發(fā)布修復(fù)了Bug的新版本,因此持續(xù)關(guān)注安全漏洞信息并更新軟件的版本是非常重要的。
另一種方法就是在防火墻之外部署用來檢查包的內(nèi)容并阻止有害包的設(shè)備或軟件[插圖]。當(dāng)然,即便是采用這種方法也并不是完美無缺的,因?yàn)榘膬?nèi)容是否有風(fēng)險(xiǎn),是由Web服務(wù)器有沒有Bug決定的,因此當(dāng)服務(wù)器程序中有潛在的Bug并且尚未被發(fā)現(xiàn)時(shí),我們也無法判斷包中的風(fēng)險(xiǎn),也無法阻止這樣的包。也就是說,我們無法抵御未知的風(fēng)險(xiǎn)。從這一點(diǎn)來看,這種方法和直接修復(fù)Bug的方法是基本等效的,但如果服務(wù)器數(shù)量較多,更新軟件版本需要花費(fèi)一定的時(shí)間,或者容易忘記更新軟件,這時(shí)對包的內(nèi)容進(jìn)行檢查就會(huì)比較有效。