首發(fā)經(jīng)典論壇.Blueidea.com 轉(zhuǎn)載請(qǐng)保留作者信息 WWW.REISTLIN.CN
隨便寫(xiě)寫(xiě)吧.謝謝.
1.希望各位朋友把 "路由器" 與 "帶路由功能的ADSL設(shè)備" 與 "支持路由協(xié)議的宿主" 之間的差異與概念弄清楚.不要上來(lái)就一句: "我的路由器怎么怎么了?" 你可以說(shuō)我挑剔和無(wú)聊.但是我僅僅是為你考慮.因?yàn)槟惆l(fā)在技術(shù)區(qū).證明你是搞技術(shù)的.所以請(qǐng)不要以后讓別人覺(jué)得.技術(shù)不值錢(qián).
路由器的功能很容易實(shí)現(xiàn).無(wú)論是單片機(jī)還是X86架構(gòu)的設(shè)備或者ASIC芯片級(jí)的設(shè)備. 一般來(lái)說(shuō)非單接口支持OSI三層數(shù)據(jù)包轉(zhuǎn)發(fā)的設(shè)備都可以稱為路由設(shè)備. 我們習(xí)慣性的路由器我個(gè)人認(rèn)為是CISCO為代表的.至于如今的ADSL終端帶路由功能的設(shè)備. 請(qǐng)說(shuō)清楚.不要讓入門(mén)的菜鳥(niǎo)誤解.比如:網(wǎng)管一詞.請(qǐng)說(shuō)清楚.到底是網(wǎng)絡(luò)管理員WEBMASTER或者NETMASTER.還是網(wǎng)吧管理人員.謝謝.
2.希望明確防火墻的概念.如硬件.軟件之分. 不要跟我談什么硬件防火墻與軟件防火墻.有個(gè)鐵BOX盒子就是硬件的?裝個(gè)SOFT就是軟件的? 醒醒吧.各位.不要想當(dāng)然.國(guó)內(nèi)N多所謂的企業(yè)級(jí)硬件千M防火墻在我看來(lái)就是一個(gè)X86的板. PIII的CPU.256M內(nèi)存裝個(gè)REDHAT LINUX企業(yè)版本.重新編譯下內(nèi)核.整個(gè)工控的INTEL的網(wǎng)口. 賣(mài)給你.說(shuō)是硬件的.你覺(jué)得呢?(抱歉我不想說(shuō)廠家名,但是我是親眼所見(jiàn).)
這個(gè)星球上最優(yōu)秀最高端的防火墻.我很遺憾的告訴你.是軟件. 同樣很遺憾的告訴你.你通過(guò)網(wǎng)絡(luò)訪問(wèn)的每一個(gè)數(shù)據(jù)都會(huì)通過(guò)它. 而這個(gè)名為CheckPoint的軟件防火墻可以支持包括WINDOWS.LINUX.SUN.UNIX幾乎所有的操作系統(tǒng). 請(qǐng)把你的眼睛從無(wú)聊的OSI 1-3層模型脫離出來(lái).不要認(rèn)為數(shù)據(jù)包是獨(dú)立的.一個(gè)一個(gè)沒(méi)有邏輯關(guān)系的. 不要認(rèn)為數(shù)據(jù)包的行為只有IN和OUT.不要認(rèn)為數(shù)據(jù)包只涉及到IP和MAC.還有很多4-7層的應(yīng)用是你無(wú)法想象的.
真正從物理上屬于硬件的防火墻恰恰是最最弱智最不夠AI的.因?yàn)槟悴荒苤竿鸄SIC芯片能具有智能的CPU的運(yùn)算能力.ASIC芯片只會(huì)做你告訴他做過(guò)的事情.重復(fù)的重復(fù).快速的重復(fù).而不能像CPU一樣可以運(yùn)算和邏輯分析.(業(yè)內(nèi)的硬件防火墻我所知道的是NetScreen與Fortigate).
硬件防火墻的優(yōu)勢(shì)就是快速.快到什么程度.說(shuō)白了就是接近線速.行話叫跑背板. 最大的缺點(diǎn)是.不夠智能.防火墻存在的目的是做訪問(wèn)控制與安全.不是交換機(jī). 所以一款沒(méi)有安全性只有速度的防火墻是愚蠢的.非常非常的愚蠢.
而軟件防火墻的優(yōu)勢(shì)我就不說(shuō)了.主要的問(wèn)題是要通過(guò)CPU處理4-7層的應(yīng)用攻擊.比如SQL攻擊. 或者惡意的入侵等.這些攻擊其實(shí)數(shù)據(jù)量很小的.對(duì)于此類(lèi)防御來(lái)說(shuō).AI是最重要的. 當(dāng)然了.也要講究算法.具體什么算法我下面繼續(xù)說(shuō).
3.狀態(tài)檢測(cè)入門(mén).數(shù)據(jù)的流向. 明確這些就不會(huì)問(wèn): "啊?封了我的80那我們不是都不能上網(wǎng)!" 這種可笑的問(wèn)題. 人人似乎都知道三次握手.人人都知道OSI.但是真正理解的有多少?
A訪問(wèn)主機(jī)B.是由A來(lái)主動(dòng)發(fā)起訪問(wèn)請(qǐng)求.并且B回應(yīng)A的請(qǐng)求.并且A與B會(huì)維持一個(gè)正常的網(wǎng)絡(luò)會(huì)話. 這個(gè)過(guò)程是從OSI的1-7層的一系列過(guò)程.我們不能只到3層就放棄繼續(xù)理解了. 在第3層的時(shí)候我們都知道會(huì)Routeing.然后呢?就是建立整個(gè)會(huì)話.協(xié)商窗口.這個(gè)屬于4到7層的范圍.
如果在A和B之間有一臺(tái)4-7層的網(wǎng)絡(luò)設(shè)備.比如.代理也好.防火墻也好.他必然會(huì)有A和B所有的通訊的狀態(tài)與會(huì)話的列表.這個(gè)列表你一旦擁有.你就可以做訪問(wèn)控制也好.做欺騙也好.隨便你.
OK.現(xiàn)在知道了訪問(wèn)是雙向的.并且是需要2者同步維護(hù)的.端口雖然是一樣的.比如80. 但是訪問(wèn)卻不是簡(jiǎn)單的從A到B或者從B到A.需要說(shuō)明的是.如果你是個(gè)3層設(shè)備. 那非常遺憾的告訴你.你只能做的事情就是:要么全部拒絕80端口的流量.要么全部允許. 三層設(shè)備是無(wú)法知道你到底是由A發(fā)起到B的訪問(wèn)還是由B到A發(fā)起的訪問(wèn). 他只知道.這個(gè)數(shù)據(jù)包.流過(guò)我.要去80.那我就砍掉.或者放行. 在三層設(shè)備看來(lái).所有的數(shù)據(jù)包都是一個(gè)一個(gè)獨(dú)立的.一個(gè)接一個(gè)的流過(guò)自己.
但是實(shí)際呢?我們的通訊不是一個(gè)包就可以O(shè)VER的.要很多個(gè)包.每個(gè)包有自己的狀態(tài)和特征. 到目標(biāo)地址后重新邏輯的組合.然后在解開(kāi).這一切的邏輯.三層設(shè)備根本就不知道的. 包與包之間維系的狀態(tài)的檢測(cè)與智能的分析.就叫做狀態(tài)檢測(cè).
訪問(wèn)的發(fā)起.決定了會(huì)話的流向與訪問(wèn)的方式.
4. NAT.PNAT.包過(guò)濾與狀態(tài)檢測(cè)的區(qū)別.
上面已經(jīng)說(shuō)過(guò)了.包過(guò)濾工作在OSI的第三層. 看到的只有源的MAC和IP以及目標(biāo)地址的MAC和IP. 因?yàn)橹挥袧M足了上面的4點(diǎn)數(shù)據(jù)包才能在網(wǎng)絡(luò)上傳輸.
講包過(guò)濾之前我們先看NAT.
同樣的.我們大家熟悉的NAT技術(shù).就是工作在這一層. NAT的原理簡(jiǎn)單的描述就是:替換數(shù)據(jù)報(bào)的源IP地址與源MAC地址.目標(biāo)地址保持不變. 同時(shí)在宿主上增加一條三層會(huì)話表.將此會(huì)話與原始的內(nèi)部源做一一對(duì)應(yīng)的關(guān)系. 等待目標(biāo)返回的數(shù)據(jù)包.當(dāng)收到目標(biāo)返回的數(shù)據(jù)包的時(shí)候做反操作然后路由到對(duì)內(nèi)接口.
智商正常的應(yīng)該已經(jīng)發(fā)現(xiàn)了.關(guān)鍵的問(wèn)題是一一對(duì)應(yīng). 換句話說(shuō).你有3個(gè)私有地址.就必須有對(duì)應(yīng)的3個(gè)公網(wǎng)地址才能一一對(duì)應(yīng)! 但是這顯然是不可能的.否則干嗎還要多對(duì)一的節(jié)約地址呢?干嗎還要NAT呢?
回答是這樣的.NAT技術(shù)是為了保護(hù)內(nèi)部DMZ的服務(wù)器的真實(shí)IP地址. 一一對(duì)應(yīng)的NAT現(xiàn)在更多用在雙向通訊上.也就是說(shuō).內(nèi)部主機(jī)既可以上網(wǎng)出站訪問(wèn). 外部的用戶也可以訪問(wèn)到內(nèi)部的主機(jī).雖然內(nèi)部主機(jī)是私有地址. 這種NAT的模式叫做Static NAT.Cisco稱為靜態(tài)NAT. 在網(wǎng)絡(luò)內(nèi)的主機(jī)Cisco稱為堡壘主機(jī).而網(wǎng)絡(luò)安全業(yè)界更喜歡叫做DMZ主機(jī).
對(duì)于多內(nèi)部私有地址共享上網(wǎng).實(shí)現(xiàn)的技術(shù)叫PNAT.也叫HIDE NAT. NAT必須要建立一個(gè)會(huì)話表來(lái)對(duì)應(yīng)數(shù)據(jù)包與內(nèi)部真實(shí)主機(jī)的對(duì)應(yīng)關(guān)系. 如何使用一個(gè)公共IP地址來(lái)對(duì)應(yīng)多個(gè)主機(jī)呢?其實(shí)很簡(jiǎn)單.就是用端口.
你可以這么想象.地址202.96.128.86這個(gè)地址給A和B和C同時(shí)使用.
當(dāng)A發(fā)起對(duì)外訪問(wèn)的請(qǐng)求的時(shí)候.A將使用202.96.128.86這個(gè)地址做為轉(zhuǎn)換后的地址. 端口呢?可以選擇任意一個(gè).比如1024.即對(duì)應(yīng)關(guān)系表是:
202.96.128.86:1024 <=> A
那么B訪問(wèn)的時(shí)候我們使用1025.C用1026.則:
202.96.128.86:1024 <=> A 202.96.128.86:1025 <=> B 202.96.128.86:1026 <=> C
現(xiàn)在大家看到的.就不是剛才所說(shuō)的三層會(huì)話表.因?yàn)樵O(shè)計(jì)到端口了就進(jìn)入到了第四層. 所以我們可以看到.四層會(huì)話表比三層的多了一個(gè)端口的狀態(tài).所以四層會(huì)話表會(huì)相對(duì)龐大一點(diǎn).當(dāng)然了.端口是有限的.當(dāng)同時(shí)超過(guò)65535-的用戶同時(shí)訪問(wèn)網(wǎng)絡(luò)的時(shí)候.你們會(huì)發(fā)現(xiàn).肯定是丟包嚴(yán)重?zé)o法上網(wǎng).因?yàn)楣睮P只有一個(gè).并且端口只有65535-這么多.顯然不夠用了.
不要懷疑會(huì)不會(huì)出現(xiàn)這種情況.一個(gè)大學(xué)很容易就會(huì)有這種局面.
怎么解決.對(duì)了.我們可以做一個(gè)地址范圍: 202.96.128.86 - 202.96.128.166 之間. 這一段來(lái)作為轉(zhuǎn)換的POOL.我們叫地址池.這樣應(yīng)該就夠了吧.恩.差不多夠了.呵呵.
需要特別說(shuō)明的是.這個(gè)池里的地址是隨機(jī)選擇的.不是順序的. 我的順序的意思是.當(dāng)?shù)谝粋(gè)地址的端口用完以后順著用第二個(gè).其實(shí)不是這樣的. 都是隨機(jī)的.不相信的朋友可以通過(guò)DUMP抓包看看就知道了.
看到這里.希望有人會(huì)有個(gè)初步的印象.看不懂沒(méi)關(guān)系. 如果真看的明白了.那么恭喜你.遠(yuǎn)離了無(wú)聊的IT考試制度.
進(jìn)入了第四層.很高興的通知你.你不是一個(gè)拉線的.不是一個(gè)維護(hù).不是一個(gè)"網(wǎng)管"了.
包過(guò)濾.數(shù)據(jù)包的過(guò)濾.一樣的道理.原始的包過(guò)濾工作在第三層. 與工作在第四層的包過(guò)濾有什么區(qū)別?如果你回答不上來(lái). 我奉勸你節(jié)約社會(huì)與網(wǎng)絡(luò)資源.轉(zhuǎn)行吧.去廣州開(kāi)個(gè)粥粉面的檔口.挺不錯(cuò)的.真的. 我老總他老婆一天毛利7K多.比你現(xiàn)在有前途多了.
答案是: 第三層包過(guò)濾只能按照IP地址來(lái)過(guò)濾. 無(wú)法區(qū)分是哪個(gè)端口的信息.比如80端口.比如21端口的通訊. 在三層設(shè)備看來(lái): 1.1.1.1:21 的數(shù)據(jù)包 與 1.1.1.1:80 的數(shù)據(jù)包是一種類(lèi)型.沒(méi)區(qū)別. 而實(shí)際呢.前者是訪問(wèn)FTP服務(wù)的應(yīng)用.而后者是訪問(wèn)WEB的應(yīng)用.
按照這個(gè)思路.如果在第四層來(lái)做包的過(guò)濾與訪問(wèn)的控制不就完美了? 因?yàn)榭梢钥吹骄唧w是通過(guò)哪個(gè)端口傳輸?shù)?
基本沒(méi)錯(cuò).我只能說(shuō).基本.
有沒(méi)人注意到.我上面說(shuō)的.一直都是用"具體是哪個(gè)端口"的"端口"這個(gè)詞. 而沒(méi)有說(shuō)"具體是哪個(gè)服務(wù).比如FTP".為什么?
人人都知道21端口是FTP.80端口是WEB. 但是我告訴你.并不是21端口就絕對(duì)等于FTP服務(wù).80端口就絕對(duì)是WEB的訪問(wèn).
沒(méi)錯(cuò).人們可以修改端口.同樣可以訪問(wèn).就比如窗戶就是可以打開(kāi)的. 但是具體打開(kāi)窗戶將進(jìn)來(lái)的是垃圾還是陽(yáng)光.你不見(jiàn)得是可以隨時(shí)知道的.
所以.指望通過(guò)第四層的IP+端口來(lái)判斷數(shù)據(jù)包的真實(shí)目的是比較愚蠢的. 因?yàn)槲彝耆梢园袴TP的端口改成22.同樣可以訪問(wèn). 但是人人都知道.22端口是SSH.但這并不影響我把21改成22當(dāng)成FTP來(lái)用.
這個(gè)致命的問(wèn)題.讓無(wú)數(shù)的攻擊者興奮. 普通的防火墻根本無(wú)法區(qū)分端口上到底跑的是什么應(yīng)用? 或許一個(gè)攻擊者在你的服務(wù)器上種植了木馬使用了你原來(lái)沒(méi)有使用的21端口. 而你的防火墻確認(rèn)為21端口是FTP的通訊.默認(rèn)保持放行.那實(shí)在是太悲哀了. 我僅僅是舉個(gè)例子.實(shí)際中我遇到的是將木馬設(shè)置為RTSP的端口或者NETMEETING.
怎么辦?
--- 狀態(tài)檢測(cè)!
防火墻需要應(yīng)用CheckPoint的狀態(tài)檢測(cè)專利技術(shù). 必須要深入的了解到整個(gè)會(huì)話的狀態(tài).通訊的協(xié)議規(guī)范. 很顯然.RFC對(duì)于FTP的通訊協(xié)議規(guī)范肯定與SSH的不同. 否則這2個(gè)協(xié)議不是可以互連互通.那還不如就當(dāng)做一種協(xié)議了.
真正的狀態(tài)檢測(cè)的防火墻會(huì)嚴(yán)格檢測(cè)你端口與其上應(yīng)用的連接和會(huì)話狀態(tài). 只要不符合RFC的標(biāo)準(zhǔn).不符合TCP/IP的規(guī)范.一律給你DROP掉. 比如我防火墻上的策略規(guī)定允許21端口也就是FTP入站訪問(wèn). 假如你的數(shù)據(jù)包通過(guò)防火墻的時(shí)候.雖然端口是21.但是請(qǐng)求與特征不符合RFC里對(duì)FTP特征的定義.那么對(duì)不起.你還是靠邊站吧.
基本了解了吧?恩.好樣的.不過(guò).狀態(tài)檢測(cè)在如今仍然也不算太AI的技術(shù). 是不是覺(jué)得有點(diǎn)受不了了.那什么才叫更安全更AI的呢?
以后在說(shuō)!
經(jīng)典論壇討論帖:http://m.95time.cn/bbs/NewsDetail.asp?id=2387050
出處:藍(lán)色理想
責(zé)任編輯:moby
◎進(jìn)入論壇計(jì)算機(jī)技術(shù)版塊參加討論
|