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