防火墻的工作原理
雙向過濾
OK,咱們換個(gè)思路。我們給防火墻這樣下命令:已知服務(wù)的數(shù)據(jù)包可以進(jìn)來,其他的全部擋在防火墻之外。比如,如果你知道用戶要訪問Web服務(wù)器,那就只讓具有源端口號(hào)80的數(shù)據(jù)包進(jìn)入網(wǎng)絡(luò):
不過新問題又出現(xiàn)了。首先,你怎么知道你要訪問的服務(wù)器具有哪些正在運(yùn)行的端口號(hào)呢? 象HTTP這樣的服務(wù)器本來就是可以任意配置的,所采用的端口也可以隨意配置。如果你這樣設(shè)置防火墻,你就沒法訪問哪些沒采用標(biāo)準(zhǔn)端口號(hào)的的網(wǎng)絡(luò)站點(diǎn)了!反過來,你也沒法保證進(jìn)入網(wǎng)絡(luò)的數(shù)據(jù)包中具有端口號(hào)80的就一定來自Web服務(wù)器。有些黑客就是利用這一點(diǎn)制作自己的入侵工具,并讓其運(yùn)行在本機(jī)的80端口!
檢查ACK位
源地址我們不相信,源端口也信不得了,這個(gè)不得不與黑客共舞的瘋狂世界上還有什么值得我們信任呢?還好,事情還沒到走投無路的地步。對(duì)策還是有的,不過這個(gè)辦法只能用于TCP協(xié)議。
TCP是一種可靠的通信協(xié)議,“可靠”這個(gè)詞意味著協(xié)議具有包括糾錯(cuò)機(jī)制在內(nèi)的一些特殊性質(zhì)。為了實(shí)現(xiàn)其可靠性,每個(gè)TCP連接都要先經(jīng)過一個(gè)“握手”過程來交換連接參數(shù)。還有,每個(gè)發(fā)送出去的包在后續(xù)的其他包被發(fā)送出去之前必須獲得一個(gè)確認(rèn)響應(yīng)。但并不是對(duì)每個(gè)TCP包都非要采用專門的ACK包來響應(yīng),實(shí)際上僅僅在TCP包頭上設(shè)置一個(gè)專門的位就可以完成這個(gè)功能了。所以,只要產(chǎn)生了響應(yīng)包就要設(shè)置ACK位。連接會(huì)話的第一個(gè)包不用于確認(rèn),所以它就沒有設(shè)置ACK位,后續(xù)會(huì)話交換的TCP包就要設(shè)置ACK位了。
舉個(gè)例子,PC向遠(yuǎn)端的Web服務(wù)器發(fā)起一個(gè)連接,它生成一個(gè)沒有設(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ù)。通過監(jiān)視ACK位,我們就可以將進(jìn)入網(wǎng)絡(luò)的數(shù)據(jù)限制在響應(yīng)包的范圍之內(nèi)。于是,遠(yuǎn)程系統(tǒng)根本無法發(fā)起TCP連接但卻能響應(yīng)收到的數(shù)據(jù)包了?!?br />
這套機(jī)制還不能算是無懈可擊,簡(jiǎn)單地舉個(gè)例子,假設(shè)我們有臺(tái)內(nèi)部Web服務(wù)器,那么端口80就不得不被打開以便外部請(qǐng)求可以進(jìn)入網(wǎng)絡(luò)。還有,對(duì)UDP包而言就沒法監(jiān)視ACK位了,因?yàn)閁DP包壓根就沒有ACK位。還有一些TCP應(yīng)用程序,比如FTP,連接就必須由這些服務(wù)器程序自己發(fā)起?!?br />
FTP帶來的困難
一般的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ù)器之間的文件傳送?!?br />
在通常的FTP會(huì)話過程中,客戶機(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ù)器向客戶機(jī)發(fā)起傳送數(shù)據(jù)的連接,那么它就會(huì)發(fā)送沒有設(shè)置ACK位的數(shù)據(jù)包,防火墻則按照剛才的規(guī)則拒絕該數(shù)據(jù)包同時(shí)也就意味著數(shù)據(jù)傳送沒戲了。通常只有高級(jí)的、也就是夠聰明的防火墻才能看出客戶機(jī)剛才告訴服務(wù)器的端口,然后才許可對(duì)該端口的入站連接?!?br />
UDP端口過濾
好了,現(xiàn)在我們回過頭來看看怎么解決UDP問題。剛才說了,UDP包沒有ACK位所以不能進(jìn)行ACK位過濾。UDP 是發(fā)出去不管的“不可靠”通信,這種類型的服務(wù)通常用于廣播、路由、多媒體等廣播形式的通信任務(wù)。NFS、DNS、WINS、NetBIOS-over-TCP/IP和 NetWare/IP都使用UDP?!?br />
看來最簡(jiǎn)單的可行辦法就是不允許建立入站UDP連接。防火墻設(shè)置為只許轉(zhuǎn)發(fā)來自內(nèi)部接口的UDP包,來自外部接口的UDP包則不轉(zhuǎn)發(fā)?,F(xiàn)在的問題是,比方說,DNS名稱解析請(qǐng)求就使用UDP,如果你提供DNS服務(wù),至少得允許一些內(nèi)部請(qǐng)求穿越防火墻。還有IRC這樣的客戶程序也使用UDP,如果要讓你的用戶使用它,就同樣要讓他們的UDP包進(jìn)入網(wǎng)絡(luò)。我們能做的就是對(duì)那些從本地到可信任站點(diǎn)之間的連接進(jìn)行限制。但是,什么叫可信任!如果黑客采取地址欺騙的方法不又回到老路上去了嗎?
有些新型路由器可以通過“記憶”出站UDP包來解決這個(gè)問題:如果入站UDP包匹配最近出站UDP包的目標(biāo)地址和端口號(hào)就讓它進(jìn)來。如果在內(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ù)器?!?br />
所謂代理服務(wù)器,顧名思義就是代表你的網(wǎng)絡(luò)和外界打交道的服務(wù)器。代理服務(wù)器不允許存在任何網(wǎng)絡(luò)內(nèi)外的直接連接。它本身就提供公共和專用的DNS、郵件服務(wù)器等多種功能。代理服務(wù)器重寫數(shù)據(jù)包而不是簡(jiǎn)單地將其轉(zhuǎn)發(fā)了事。給人的感覺就是網(wǎng)絡(luò)內(nèi)部的主機(jī)都站在了網(wǎng)絡(luò)的邊緣,但實(shí)際上他們都躲在代理的后面,露面的不過是代理這個(gè)假面具?!?br />
小結(jié)
IP地址可能是假的,這是由于IP協(xié)議的源路有機(jī)制所帶來的,這種機(jī)制告訴路由器不要為數(shù)據(jù)包采用正常的路徑,而是按照包頭內(nèi)的路徑傳送數(shù)據(jù)包。于是黑客就可以使用系統(tǒng)的IP地址獲得返回的數(shù)據(jù)包。有些高級(jí)防火墻可以讓用戶禁止源路由。通常我們的網(wǎng)絡(luò)都通過一條路徑連接ISP,然后再進(jìn)入Internet。這時(shí)禁用源路由就會(huì)迫使數(shù)據(jù)包必須沿著正常的路徑返回。
還有,我們需要了解防火墻在拒絕數(shù)據(jù)包的時(shí)候還做了哪些其他工作。比如,防火墻是否向連接發(fā)起系統(tǒng)發(fā)回了“主機(jī)不可到達(dá)”的ICMP消息?或者防火墻真沒再做其他事?這些問題都可能存在安全隱患。ICMP“主機(jī)不可達(dá)”消息會(huì)告訴黑客“防火墻專門阻塞了某些端口”,黑客立即就可以從這個(gè)消息中聞到一點(diǎn)什么氣味。如果ICMP“主機(jī)不可達(dá)”是通信中發(fā)生的錯(cuò)誤,那么老實(shí)的系統(tǒng)可能就真的什么也不發(fā)送了。反過來,什么響應(yīng)都沒有卻會(huì)使發(fā)起通信的系統(tǒng)不斷地嘗試建立連接直到應(yīng)用程序或者協(xié)議棧超時(shí),結(jié)果最終用戶只能得到一個(gè)錯(cuò)誤信息。當(dāng)然這種方式會(huì)讓黑客無法判斷某端口到底是關(guān)閉了還是沒有使用。本文引用地址:http://www.ex-cimer.com/article/155626.htm
tcp/ip相關(guān)文章:tcp/ip是什么
評(píng)論