防火墻的工作原理
“黑客會(huì)打上我的主意嗎?”這么想就對(duì)了,黑客就想鉆雞蛋縫的蒼蠅一樣,看到一絲從系統(tǒng)漏洞發(fā)出的光亮就會(huì)蠢蠢欲動(dòng)!好,如何保護(hù)你的網(wǎng)絡(luò)呢?計(jì)算機(jī)的高手們也許一張嘴就提議你安裝網(wǎng)絡(luò)的防火墻,那么第一個(gè)問(wèn)題就來(lái)了:到底什么是防火墻呢?
什么是防火墻?
防火墻就是一種過(guò)濾塞(目前你這么理解不算錯(cuò)),你可以讓你喜歡的東西通過(guò)這個(gè)塞子,別的玩意都統(tǒng)統(tǒng)過(guò)濾掉。在網(wǎng)絡(luò)的世界里,要由防火墻過(guò)濾的就是承載通信數(shù)據(jù)的通信包?!?br />
天下的防火墻至少都會(huì)說(shuō)兩個(gè)詞:Yes或者No。直接說(shuō)就是接受或者拒絕。最簡(jiǎn)單的防火墻是以太網(wǎng)橋。但幾乎沒(méi)有人會(huì)認(rèn)為這種原始防火墻能管多大用。大多數(shù)防火墻采用的技術(shù)和標(biāo)準(zhǔn)可謂五花八門(mén)。這些防火墻的形式多種多樣:有的取代系統(tǒng)上已經(jīng)裝備的TCP/IP協(xié)議棧;有的在已有的協(xié)議棧上建立自己的軟件模塊;有的干脆就是獨(dú)立的一套操作系統(tǒng)。還有一些應(yīng)用型的防火墻只對(duì)特定類(lèi)型的網(wǎng)絡(luò)連接提供保護(hù)(比如SMTP或者HTTP協(xié)議等)。還有一些基于硬件的防火墻產(chǎn)品其實(shí)應(yīng)該歸入安全路由器一類(lèi)。以上的產(chǎn)品都可以叫做防火墻,因?yàn)樗麄兊?a class="contentlabel" href="http://m.butianyuan.cn/news/listbylabel/label/工作">工作方式都是一樣的:分析出入防火墻的數(shù)據(jù)包,決定放行還是把他們?nèi)拥揭贿??!?br />
所有的防火墻都具有IP地址過(guò)濾功能。這項(xiàng)任務(wù)要檢查IP包頭,根據(jù)其IP源地址和目標(biāo)地址作出放行/丟棄決定??纯聪旅孢@張圖,兩個(gè)網(wǎng)段之間隔了一個(gè)防火墻,防火墻的一端有臺(tái)UNIX計(jì)算機(jī),另一邊的網(wǎng)段則擺了臺(tái)PC客戶(hù)機(jī)?!?br />
當(dāng)PC客戶(hù)機(jī)向UNIX計(jì)算機(jī)發(fā)起telnet請(qǐng)求時(shí),PC的telnet客戶(hù)程序就產(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)在我們“命令”(用專(zhuān)業(yè)術(shù)語(yǔ)來(lái)說(shuō)就是配制)防火墻把所有發(fā)給UNIX計(jì)算機(jī)的數(shù)據(jù)包都給拒了,完成這項(xiàng)工作以后,“心腸”比較好的防火墻還會(huì)通知客戶(hù)程序一聲呢!既然發(fā)向目標(biāo)的IP數(shù)據(jù)沒(méi)法轉(zhuǎn)發(fā),那么只有和UNIX計(jì)算機(jī)同在一個(gè)網(wǎng)段的用戶(hù)才能訪(fǎng)問(wèn)UNIX計(jì)算機(jī)了。
還有一種情況,你可以命令防火墻專(zhuān)給那臺(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地址欺騙要容易多了?!?br />
服務(wù)器TCP/UDP 端口過(guò)濾
僅僅依靠地址進(jìn)行數(shù)據(jù)過(guò)濾在實(shí)際運(yùn)用中是不可行的,還有個(gè)原因就是目標(biāo)主機(jī)上往往運(yùn)行著多種通信服務(wù),比方說(shuō),我們不想讓用戶(hù)采用 telnet的方式連到系統(tǒng),但這絕不等于我們非得同時(shí)禁止他們使用SMTP/POP郵件服務(wù)器吧?所以說(shuō),在地址之外我們還要對(duì)服務(wù)器的TCP/ UDP端口進(jìn)行過(guò)濾。
比如,默認(rèn)的telnet服務(wù)連接端口號(hào)是23。假如我們不許PC客戶(hù)機(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)單。
客戶(hù)機(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)。地址和端口都具備了才能建立客戶(hù)機(jī)和服務(wù)器的各種應(yīng)用之間的有效通信聯(lián)系。比如,telnet服務(wù)器在端口23偵聽(tīng)入站連接。同時(shí)telnet客戶(hù)機(jī)也有一個(gè)端口號(hào),否則客戶(hù)機(jī)的IP棧怎么知道某個(gè)數(shù)據(jù)包是屬于哪個(gè)應(yīng)用程序的呢?
由于歷史的原因,幾乎所有的TCP/IP客戶(hù)程序都使用大于1023的隨機(jī)分配端口號(hào)。只有UNIX計(jì)算機(jī)上的root用戶(hù)才可以訪(fǎng)問(wèn)1024以下的端口,而這些端口還保留為服務(wù)器上的服務(wù)所用。所以,除非我們讓所有具有大于1023端口號(hào)的數(shù)據(jù)包進(jìn)入網(wǎng)絡(luò),否則各種網(wǎng)絡(luò)連接都沒(méi)法正常工作?!?br />
這對(duì)防火墻而言可就麻煩了,如果阻塞入站的全部端口,那么所有的客戶(hù)機(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),打開(kā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ò)的話(huà)網(wǎng)絡(luò)還能說(shuō)是安全的嗎?連這些客戶(hù)程序都不敢說(shuō)自己是足夠安全的?!?br />
tcp/ip相關(guān)文章:tcp/ip是什么
評(píng)論