防火墻的工作原理是怎樣的
防火墻借由監(jiān)測(cè)所有的封包并找出不符規(guī)則的內(nèi)容,可以防范電腦蠕蟲或是木馬程序的快速蔓延。這篇文章主要介紹了防火墻的工作原理概述,需要的朋友可以參考下
具體介紹
防火墻就是一種過(guò)濾塞(目前你這么理解不算錯(cuò)),你可以讓你喜歡的東西通過(guò)這個(gè)塞子,別的玩意都統(tǒng)統(tǒng)過(guò)濾掉。在網(wǎng)絡(luò)的世界里,要由防火墻過(guò)濾的就是承載通信數(shù)據(jù)的通信包。
天下的防火墻至少都會(huì)說(shuō)兩個(gè)詞:Yes或者No。直接說(shuō)就是接受或者拒絕。最簡(jiǎn)單的防火墻是以太網(wǎng)橋。但幾乎沒(méi)有人會(huì)認(rèn)為這種原始防火墻能管多大用。大多數(shù)防火墻采用的技術(shù)和標(biāo)準(zhǔn)可謂五花八門。這些防火墻的形式多種多樣:
有的取代系統(tǒng)上已經(jīng)裝備的TCP/IP協(xié)議棧;有的在已有的協(xié)議棧上建立自己的軟件模塊;有的干脆就是獨(dú)立的一套操作系統(tǒng);還有一些應(yīng)用型的防火墻只對(duì)特定類型的網(wǎng)絡(luò)連接提供保護(hù)(比如SMTP或者HTTP協(xié)議等);還有一些基于硬件的防火墻產(chǎn)品其實(shí)應(yīng)該歸入安全路由器一類。
以上的產(chǎn)品都可以叫做防火墻,因?yàn)樗麄兊墓ぷ鞣绞蕉际且粯拥模悍治龀鋈敕阑饓Φ臄?shù)據(jù)包,決定放行還是把他們?nèi)拥揭贿叀?/p>
所有的防火墻都具有IP地址過(guò)濾功能。這項(xiàng)任務(wù)要檢查IP包頭,根據(jù)其IP源地址和目標(biāo)地址作出放行/丟棄決定。看看下面這張圖,兩個(gè)網(wǎng)段之間隔了一個(gè)防火墻,防火墻的一端有臺(tái)UNIX計(jì)算機(jī),另一邊的網(wǎng)段則擺了臺(tái)PC客戶機(jī)。
當(dāng)PC客戶機(jī)向UNIX計(jì)算機(jī)發(fā)起telnet請(qǐng)求時(shí),PC的telnet客戶程序就產(chǎn)生一個(gè)TCP包并把它傳給本地的協(xié)議棧準(zhǔn)備發(fā)送。接下來(lái),協(xié)議棧將這個(gè)TCP包“塞”到一個(gè)IP包里,然后通過(guò)PC機(jī)的TCP/IP棧所定義的路徑將它發(fā)送給UNIX計(jì)算機(jī)。在這個(gè)例子里,這個(gè)IP包必須經(jīng)過(guò)橫在PC和UNIX計(jì)算機(jī)中的防火墻才能到達(dá)UNIX計(jì)算機(jī)。
現(xiàn)在我們“命令”(用專業(yè)術(shù)語(yǔ)來(lái)說(shuō)就是配制)防火墻把所有發(fā)給UNIX計(jì)算機(jī)的數(shù)據(jù)包都給拒了,完成這項(xiàng)工作以后,“心腸”比較好的防火墻還會(huì)通知客戶程序一聲呢!既然發(fā)向目標(biāo)的IP數(shù)據(jù)沒(méi)法轉(zhuǎn)發(fā),那么只有和UNIX計(jì)算機(jī)同在一個(gè)網(wǎng)段的用戶才能訪問(wèn)UNIX計(jì)算機(jī)了。
還有一種情況,你可以命令防火墻專給那臺(tái)可憐的PC機(jī)找茬,別人的數(shù)據(jù)包都讓過(guò)就它不行。這正是防火墻最基本的功能:根據(jù)IP地址做轉(zhuǎn)發(fā)判斷。但要上了大場(chǎng)面這種小伎倆就玩不轉(zhuǎn)了,由于黑客們可以采用IP地址欺騙技術(shù),偽裝成合法地址的計(jì)算機(jī)就可以穿越信任這個(gè)地址的防火墻了。不過(guò)根據(jù)地址的轉(zhuǎn)發(fā)決策機(jī)制還是最基本和必需的。另外要注意的一點(diǎn)是,不要用DNS主機(jī)名建立過(guò)濾表,對(duì)DNS的偽造比IP地址欺騙要容易多了。
服務(wù)器TCP/UDP 端口過(guò)濾
僅僅依靠地址進(jìn)行數(shù)據(jù)過(guò)濾在實(shí)際運(yùn)用中是不可行的,還有個(gè)原因就是目標(biāo)主機(jī)上往往運(yùn)行著多種通信服務(wù),比方說(shuō),我們不想讓用戶采用 telnet 的方式連到系統(tǒng),但這絕不等于我們非得同時(shí)禁止他們使用SMTP/POP郵件服務(wù)器吧?所以說(shuō),在地址之外我們還要對(duì)服務(wù)器的TCP/ UDP端口進(jìn)行過(guò)濾。
比如,默認(rèn)的telnet服務(wù)連接端口號(hào)是23。假如我們不許PC客戶機(jī)建立對(duì)UNIX計(jì)算機(jī)(在這時(shí)我們當(dāng)它是服務(wù)器)的telnet連接,那么我們只需命令防火墻檢查發(fā)送目標(biāo)是UNIX服務(wù)器的數(shù)據(jù)包,把其中具有23目標(biāo)端口號(hào)的包過(guò)濾就行了。這樣,我們把IP地址和目標(biāo)服務(wù)器TCP/UDP端口結(jié)合起來(lái)不就可以作為過(guò)濾標(biāo)準(zhǔn)來(lái)實(shí)現(xiàn)相當(dāng)可靠的防火墻了嗎?不,沒(méi)這么簡(jiǎn)單。
客戶機(jī)也有TCP/UDP端口
TCP/IP是一種端對(duì)端協(xié)議,每個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)都具有唯一的地址。網(wǎng)絡(luò)節(jié)點(diǎn)的應(yīng)用層也是這樣,處于應(yīng)用層的每個(gè)應(yīng)用程序和服務(wù)都具有自己的對(duì)應(yīng)“地址”,也就是端口號(hào)。地址和端口都具備了才能建立客戶機(jī)和服務(wù)器的各種應(yīng)用之間的有效通信聯(lián)系。比如,telnet服務(wù)器在端口23偵聽入站連接。同時(shí)telnet客戶機(jī)也有一個(gè)端口號(hào),否則客戶機(jī)的IP棧怎么知道某個(gè)數(shù)據(jù)包是屬于哪個(gè)應(yīng)用程序的呢?
由于歷史的原因,幾乎所有的TCP/IP客戶程序都使用大于1023的隨機(jī)分配端口號(hào)。只有UNIX計(jì)算機(jī)上的root用戶才可以訪問(wèn)1024以下的端口,而這些端口還保留為服務(wù)器上的服務(wù)所用。所以,除非我們讓所有具有大于1023端口號(hào)的數(shù)據(jù)包進(jìn)入網(wǎng)絡(luò),否則各種網(wǎng)絡(luò)連接都沒(méi)法正常工作。
這對(duì)防火墻而言可就麻煩了,如果阻塞入站的全部端口,那么所有的客戶機(jī)都沒(méi)法使用網(wǎng)絡(luò)資源。因?yàn)榉?wù)器發(fā)出響應(yīng)外部連接請(qǐng)求的入站(就是進(jìn)入防火墻的意思)數(shù)據(jù)包都沒(méi)法經(jīng)過(guò)防火墻的入站過(guò)濾。反過(guò)來(lái),打開所有高于1023的端口就可行了嗎?也不盡然。由于很多服務(wù)使用的端口都大于1023,比如X client、基于RPC的NFS服務(wù)以及為數(shù)眾多的非UNIX IP產(chǎn)品等(NetWare/IP)就是這樣的。那么讓達(dá)到1023端口標(biāo)準(zhǔn)的數(shù)據(jù)包都進(jìn)入網(wǎng)絡(luò)的話網(wǎng)絡(luò)還能說(shuō)是安全的嗎?連這些客戶程序都不敢說(shuō)自己是足夠安全的。
雙向過(guò)濾
OK,咱們換個(gè)思路。我們給防火墻這樣下命令:已知服務(wù)的數(shù)據(jù)包可以進(jìn)來(lái),其他的全部擋在防火墻之外。比如,如果你知道用戶要訪問(wèn)Web服務(wù)器,那就只讓具有源端口號(hào)80的數(shù)據(jù)包進(jìn)入網(wǎng)絡(luò):
不過(guò)新問(wèn)題又出現(xiàn)了。首先,你怎么知道你要訪問(wèn)的服務(wù)器具有哪些正在運(yùn)行的端口號(hào)呢? 象HTTP這樣的服務(wù)器本來(lái)就是可以任意配置的,所采用的端口也可以隨意配置。如果你這樣設(shè)置防火墻,你就沒(méi)法訪問(wèn)哪些沒(méi)采用標(biāo)準(zhǔn)端口號(hào)的的網(wǎng)絡(luò)站點(diǎn)了!反過(guò)來(lái),你也沒(méi)法保證進(jìn)入網(wǎng)絡(luò)的數(shù)據(jù)包中具有端口號(hào)80的就一定來(lái)自Web服務(wù)器。有些黑客就是利用這一點(diǎn)制作自己的入侵工具,并讓其運(yùn)行在本機(jī)的80端口!
檢查ACK位
源地址我們不相信,源端口也信不得了,這個(gè)不得不與黑客共舞的瘋狂世界上還有什么值得我們信任呢?還好,事情還沒(méi)到走投無(wú)路的地步。對(duì)策還是有的,不過(guò)這個(gè)辦法只能用于TCP協(xié)議。
TCP是一種可靠的通信協(xié)議,“可靠”這個(gè)詞意味著協(xié)議具有包括糾錯(cuò)機(jī)制在內(nèi)的一些特殊性質(zhì)。為了實(shí)現(xiàn)其可靠性,每個(gè)TCP連接都要先經(jīng)過(guò)一個(gè)“握手”過(guò)程來(lái)交換連接參數(shù)。還有,每個(gè)發(fā)送出去的包在后續(xù)的其他包被發(fā)送出去之前必須獲得一個(gè)確認(rèn)響應(yīng)。但并不是對(duì)每個(gè)TCP包都非要采用專門的ACK包來(lái)響應(yīng),實(shí)際上僅僅在TCP包頭上設(shè)置一個(gè)專門的位就可以完成這個(gè)功能了。所以,只要產(chǎn)生了響應(yīng)包就要設(shè)置ACK位。連接會(huì)話的第一個(gè)包不用于確認(rèn),所以它就沒(méi)有設(shè)置ACK位,后續(xù)會(huì)話交換的TCP包就要設(shè)置ACK位了。
舉個(gè)例子,PC向遠(yuǎn)端的Web服務(wù)器發(fā)起一個(gè)連接,它生成一個(gè)沒(méi)有設(shè)置ACK位的連接請(qǐng)求包。當(dāng)服務(wù)器響應(yīng)該請(qǐng)求時(shí),服務(wù)器就發(fā)回一個(gè)設(shè)置了ACK位的數(shù)據(jù)包,同時(shí)在包里標(biāo)記從客戶機(jī)所收到的字節(jié)數(shù)。然后客戶機(jī)就用自己的響應(yīng)包再響應(yīng)該數(shù)據(jù)包,這個(gè)數(shù)據(jù)包也設(shè)置了ACK位并標(biāo)記了從服務(wù)器收到的字節(jié)數(shù)。通過(guò)監(jiān)視ACK位,我們就可以將進(jìn)入網(wǎng)絡(luò)的數(shù)據(jù)限制在響應(yīng)包的范圍之內(nèi)。于是,遠(yuǎn)程系統(tǒng)根本無(wú)法發(fā)起TCP連接但卻能響應(yīng)收到的數(shù)據(jù)包了。
這套機(jī)制還不能算是無(wú)懈可擊,簡(jiǎn)單地舉個(gè)例子,假設(shè)我們有臺(tái)內(nèi)部Web服務(wù)器,那么端口80就不得不被打開以便外部請(qǐng)求可以進(jìn)入網(wǎng)絡(luò)。還有,對(duì)UDP包而言就沒(méi)法監(jiān)視ACK位了,因?yàn)閁DP包壓根就沒(méi)有ACK位。還有一些TCP應(yīng)用程序,比如FTP,連接就必須由這些服務(wù)器程序自己發(fā)起。
FTP帶來(lái)的困難
一般的Internet服務(wù)對(duì)所有的通信都只使用一對(duì)端口號(hào),F(xiàn)TP程序在連接期間則使用兩對(duì)端口號(hào)。第一對(duì)端口號(hào)用于FTP的“命令通道”提供登錄和執(zhí)行命令的通信鏈路,而另一對(duì)端口號(hào)則用于FTP的“數(shù)據(jù)通道”提供客戶機(jī)和服務(wù)器之間的文件傳送。
在通常的FTP會(huì)話過(guò)程中,客戶機(jī)首先向服務(wù)器的端口21(命令通道)發(fā)送一個(gè)TCP連接請(qǐng)求,然后執(zhí)行LOGIN、DIR等各種命令。一旦用戶請(qǐng)求服務(wù)器發(fā)送數(shù)據(jù),F(xiàn)TP服務(wù)器就用其20端口 (數(shù)據(jù)通道)向客戶的數(shù)據(jù)端口發(fā)起連接。問(wèn)題來(lái)了,如果服務(wù)器向客戶機(jī)發(fā)起傳送數(shù)據(jù)的連接,那么它就會(huì)發(fā)送沒(méi)有設(shè)置ACK位的數(shù)據(jù)包,防火墻則按照剛才的規(guī)則拒絕該數(shù)據(jù)包同時(shí)也就意味著數(shù)據(jù)傳送沒(méi)戲了。通常只有高級(jí)的、也就是夠聰明的防火墻才能看出客戶機(jī)剛才告訴服務(wù)器的端口,然后才許可對(duì)該端口的入站連接。
UDP端口過(guò)濾
好了,現(xiàn)在我們回過(guò)頭來(lái)看看怎么解決UDP問(wèn)題。剛才說(shuō)了,UDP包沒(méi)有ACK位所以不能進(jìn)行ACK位過(guò)濾。UDP 是發(fā)出去不管的“不可靠”通信,這種類型的服務(wù)通常用于廣播、路由、多媒體等廣播形式的通信任務(wù)。NFS、DNS、WINS、NetBIOS-over-TCP/IP和 NetWare/IP都使用UDP。
看來(lái)最簡(jiǎn)單的可行辦法就是不允許建立入站UDP連接。防火墻設(shè)置為只許轉(zhuǎn)發(fā)來(lái)自內(nèi)部接口的UDP包,來(lái)自外部接口的UDP包則不轉(zhuǎn)發(fā)?,F(xiàn)在的問(wèn)題是,比方說(shuō),DNS名稱解析請(qǐng)求就使用UDP,如果你提供DNS服務(wù),至少得允許一些內(nèi)部請(qǐng)求穿越防火墻。還有IRC這樣的客戶程序也使用UDP,如果要讓你的用戶使用它,就同樣要讓他們的UDP包進(jìn)入網(wǎng)絡(luò)。我們能做的就是對(duì)那些從本地到可信任站點(diǎn)之間的連接進(jìn)行限制。但是,什么叫可信任!如果黑客采取地址欺騙的方法不又回到老路上去了嗎?
有些新型路由器可以通過(guò)“記憶”出站UDP包來(lái)解決這個(gè)問(wèn)題:如果入站UDP包匹配最近出站UDP包的目標(biāo)地址和端口號(hào)就讓它進(jìn)來(lái)。如果在內(nèi)存中找不到匹配的UDP包就只好拒絕它了!但是,我們?nèi)绾未_信產(chǎn)生數(shù)據(jù)包的外部主機(jī)就是內(nèi)部客戶機(jī)希望通信的服務(wù)器呢?如果黑客詐稱DNS服務(wù)器的地址,那么他在理論上當(dāng)然可以從附著DNS的UDP端口發(fā)起攻擊。只要你允許DNS查詢和反饋包進(jìn)入網(wǎng)絡(luò)這個(gè)問(wèn)題就必然存在。辦法是采用代理服務(wù)器。
所謂代理服務(wù)器,顧名思義就是代表你的網(wǎng)絡(luò)和外界打交道的服務(wù)器。代理服務(wù)器不允許存在任何網(wǎng)絡(luò)內(nèi)外的直接連接。它本身就提供公共和專用的DNS、郵件服務(wù)器等多種功能。代理服務(wù)器重寫數(shù)據(jù)包而不是簡(jiǎn)單地將其轉(zhuǎn)發(fā)了事。給人的感覺(jué)就是網(wǎng)絡(luò)內(nèi)部的主機(jī)都站在了網(wǎng)絡(luò)的邊緣,但實(shí)際上他們都躲在代理的后面,露面的不過(guò)是代理這個(gè)假面具。
補(bǔ)充閱讀:防火墻主要使用技巧
一、所有的防火墻文件規(guī)則必須更改。
盡管這種方法聽起來(lái)很容易,但是由于防火墻沒(méi)有內(nèi)置的變動(dòng)管理流程,因此文件更改對(duì)于許多企業(yè)來(lái)說(shuō)都不是最佳的實(shí)踐方法。如果防火墻管理員因?yàn)橥话l(fā)情況或者一些其他形式的業(yè)務(wù)中斷做出更改,那么他撞到槍口上的可能性就會(huì)比較大。但是如果這種更改抵消了之前的協(xié)議更改,會(huì)導(dǎo)致宕機(jī)嗎?這是一個(gè)相當(dāng)高發(fā)的狀況。
防火墻管理產(chǎn)品的中央控制臺(tái)能全面可視所有的防火墻規(guī)則基礎(chǔ),因此團(tuán)隊(duì)的所有成員都必須達(dá)成共識(shí),觀察誰(shuí)進(jìn)行了何種更改。這樣就能及時(shí)發(fā)現(xiàn)并修理故障,讓整個(gè)協(xié)議管理更加簡(jiǎn)單和高效。
二、以最小的權(quán)限安裝所有的訪問(wèn)規(guī)則。
另一個(gè)常見的安全問(wèn)題是權(quán)限過(guò)度的規(guī)則設(shè)置。防火墻規(guī)則是由三個(gè)域構(gòu)成的:即源(IP地址),目的地(網(wǎng)絡(luò)/子網(wǎng)絡(luò))和服務(wù)(應(yīng)用軟件或者其他目的地)。為了確保每個(gè)用戶都有足夠的端口來(lái)訪問(wèn)他們所需的系統(tǒng),常用方法是在一個(gè)或者更多域內(nèi)指定打來(lái)那個(gè)的目標(biāo)對(duì)象。當(dāng)你出于業(yè)務(wù)持續(xù)性的需要允許大范圍的IP地址來(lái)訪問(wèn)大型企業(yè)的網(wǎng)絡(luò),這些規(guī)則就會(huì)變得權(quán)限過(guò)度釋放,因此就會(huì)增加不安全因素。服務(wù)域的規(guī)則是開放65535個(gè)TCP端口的ANY。防火墻管理員真的就意味著為黑客開放了65535個(gè)攻擊矢量?
三、根據(jù)法規(guī)協(xié)議和更改需求來(lái)校驗(yàn)每項(xiàng)防火墻的更改。
在防火墻操作中,日常工作都是以尋找問(wèn)題,修正問(wèn)題和安裝新系統(tǒng)為中心的。在安裝最新防火墻規(guī)則來(lái)解決問(wèn)題,應(yīng)用新產(chǎn)品和業(yè)務(wù)部門的過(guò)程中,我們經(jīng)常會(huì)遺忘防火墻也是企業(yè)安全協(xié)議的物理執(zhí)行者。每項(xiàng)規(guī)則都應(yīng)該重新審核來(lái)確保它能符合安全協(xié)議和任何法規(guī)協(xié)議的內(nèi)容和精神,而不僅是一篇法律條文。
四、當(dāng)服務(wù)過(guò)期后從防火墻規(guī)則中刪除無(wú)用的規(guī)則。
規(guī)則膨脹是防火墻經(jīng)常會(huì)出現(xiàn)的安全問(wèn)題,因?yàn)槎鄶?shù)運(yùn)作團(tuán)隊(duì)都沒(méi)有刪除規(guī)則的流程。業(yè)務(wù)部門擅長(zhǎng)讓你知道他們了解這些新規(guī)則,卻從來(lái)不會(huì)讓防火墻團(tuán)隊(duì)知道他們不再使用某些服務(wù)了。了解退役的服務(wù)器和網(wǎng)絡(luò)以及應(yīng)用軟件更新周期對(duì)于達(dá)成規(guī)則共識(shí)是個(gè)好的開始。運(yùn)行無(wú)用規(guī)則的報(bào)表是另外一步。黑客喜歡從來(lái)不刪除規(guī)則的防火墻團(tuán)隊(duì)。
防火墻的工作原理是怎樣的相關(guān)文章: