導航:首頁 > 凈水問答 > 分組過濾防火牆原理上是基於什麼進行分析的

分組過濾防火牆原理上是基於什麼進行分析的

發布時間:2021-02-01 14:42:00

1. 簡述防火牆防護原理

防火牆基本原理

首先,我們需要了解一些基本的防火牆實現原理。防火牆目前主要分包過濾,和狀態檢測的包過濾,應用層代理防火牆。但是他們的基本實現都是類似的。

│-路由器--網卡│防火牆│網卡│-內部網路│

防火牆一般有兩個以上的網路卡,一個連到外部(router),另一個是連到內部網路。當打開主機網路轉發功能時,兩個網卡間的網路通訊能直接通過。當有防火牆時,他好比插在網卡之間,對所有的網路通訊進行控制。

說到訪問控制,這是防火牆的核心了:),防火牆主要通過一個訪問控製表來判斷的,他的形式一般是一連串的如下規則:

1 accept from+ 源地址,埠 to+ 目的地址,埠+ 採取的動作

2 deny .(deny就是拒絕。。)

3 nat .(nat是地址轉換。後面說)

防火牆在網路層(包括以下的煉路層)接受到網路數據包後,就從上面的規則連表一條一條地匹配,如果符合就執行預先安排的動作了!如丟棄包。。

但是,不同的防火牆,在判斷攻擊行為時,有實現上的差別。下面結合實現原理說說可能的攻擊。

二 攻擊包過濾防火牆

包過濾防火牆是最簡單的一種了,它在網路層截獲網路數據包,根據防火牆的規則表,來檢測攻擊行為。他根據數據包的源IP地址;目的IP地址;TCP/UDP源埠;TCP/UDP目的埠來過濾!!很容易受到如下攻擊:

1 ip 欺騙攻擊:

這種攻擊,主要是修改數據包的源,目的地址和埠,模仿一些合法的數據包來騙過防火牆的檢測。如:外部攻擊者,將他的數據報源地址改為內部網路地址,防火牆看到是合法地址就放行了:)。可是,如果防火牆能結合介面,地址來匹配,這種攻擊就不能成功了:(

2 d.o.s拒絕服務攻擊

簡單的包過濾防火牆不能跟蹤 tcp的狀態,很容易受到拒絕服務攻擊,一旦防火牆受到d.o.s攻擊,他可能會忙於處理,而忘記了他自己的過濾功能。:)你就可以饒過了,不過這樣攻擊還很少的。!

3 分片攻擊

這種攻擊的原理是:在IP的分片包中,所有的分片包用一個分片偏移欄位標志分片包的順序,但是,只有第一個分片包含有TCP埠號的信息。當IP分片包通過分組過濾防火牆時,防火牆只根據第一個分片包的Tcp信息判斷是否允許通過,而其他後續的分片不作防火牆檢測,直接讓它們通過。

這樣,攻擊者就可以通過先發送第一個合法的IP分片,騙過防火牆的檢測,接著封裝了惡意數據的後續分片包就可以直接穿透防火牆,直接到達內部網路主機,從而威脅網路和主機的安全。

4 木馬攻擊

對於包過濾防火牆最有效的攻擊就是木馬了,一但你在內部網路安裝了木馬,防火牆基本上是無能為力的。

原因是:包過濾防火牆一般只過濾低埠(1-1024),而高埠他不可能過濾的(因為,一些服務要用到高埠,因此防火牆不能關閉高埠的),所以很多的木馬都在高埠打開等待,如冰河,subseven等。。。
但是木馬攻擊的前提是必須先上傳,運行木馬,對於簡單的包過濾防火牆來說,是容易做的。這里不寫這個了。大概就是利用內部網路主機開放的服務漏洞。

早期的防火牆都是這種簡單的包過濾型的,到現在已很少了,不過也有。現在的包過濾採用的是狀態檢測技術,下面談談狀態檢測的包過濾防火牆。狀態檢測技術最早是checkpoint提出的,在國內的許多防火牆都聲稱實現了狀態檢測技術。

可是:)很多是沒有實現的。到底什麼是狀態檢測?

一句話,狀態檢測就是從tcp連接的建立到終止都跟蹤檢測的技術。

原先的包過濾,是拿一個一個單獨的數據包來匹配規則的。可是我們知道,同一個tcp連接,他的數據包是前後關聯的,先是syn包,-》數據包=》fin包。數據包的前後序列號是相關的。

如果割裂這些關系,單獨的過濾數據包,很容易被精心夠造的攻擊數據包欺騙!!!如nmap的攻擊掃描,就有利用syn包,fin包,reset包來探測防火牆後面的網路。!

相反,一個完全的狀態檢測防火牆,他在發起連接就判斷,如果符合規則,就在內存登記了這個連接的狀態信息(地址,port,選項。。),後續的屬於同一個連接的數據包,就不需要在檢測了。直接通過。而一些精心夠造的攻擊數據包由於沒有在內存登記相應的狀態信息,都被丟棄了。這樣這些攻擊數據包,就不能饒過防火牆了。

說狀態檢測必須提到動態規則技術。在狀態檢測里,採用動態規則技術,原先高埠的問題就可以解決了。實現原理是:平時,防火牆可以過濾內部網路的所有埠(1-65535),外部攻擊者難於發現入侵的切入點,可是為了不影響正常的服務,防火牆一但檢測到服務必須開放高埠時,如(ftp協議,irc等),防火牆在內存就可以動態地天加一條規則打開相關的高埠。等服務完成後,這條規則就又被防火牆刪除。這樣,既保障了安全,又不影響正常服務,速度也快。!
一般來說,完全實現了狀態檢測技術防火牆,智能性都比較高,一些掃描攻擊還能自動的反應,因此,攻擊者要很小心才不會被發現。

2. 包過濾防火牆的基本原理分析屏蔽主機防火牆,屏蔽子網防火牆,多宿主主機防火牆的特點以及之間的區別

同學,你是湖南大學的吧,選修了計算機網路安全吧。。。其實。。。你去看老師的PPT,備注裡面基本都有的,都不用你上網去找了。

3. 簡述包過濾防火牆的工作原理

包過濾防火牆是最簡單的一種防火牆,它在網路層截獲網路數據包,根據防火牆的規則專表,來檢屬測攻擊行為。包過濾防火牆一般作用在網路層(IP層),故也稱網路層防火牆(Network Lev Firewall)或IP過濾器(IP filters)。數據包過濾(Packet Filtering)是指在網路層對數據包進行分析、選擇。通過檢查數據流中每一個數據包的源IP地址、目的IP地址、源埠號、目的埠號、協議類型等因素或它們的組合來確定是否允許該數據包通過。在網路層提供較低級別的安全防護和控制。

4. 闡述數據包過濾防火牆的工作原理_______.

推薦看一看 朱雁冰 寫的《Windows防火牆與網路封包截獲技術》,上面介紹了三種分別基於用戶態和核心態下的防火牆編譯,雖然他提到的三種技術現在看來都有不足,但是是一本講解詳細的好書~~~!!

防火牆就是一種過濾塞(目前你這么理解不算錯),你可以讓你喜歡的東西通過這個塞子,別的玩意都統統過濾掉。在網路的世界裡,要由防火牆過濾的就是承載通信數據的通信包。

天下的防火牆至少都會說兩個詞:Yes或者No。直接說就是接受或者拒絕。最簡單的防火牆是乙太網橋。但幾乎沒有人會認為這種原始防火牆能管多大用。大多數防火牆採用的技術和標准可謂五花八門。這些防火牆的形式多種多樣:有的取代系統上已經裝備的TCP/IP協議棧;有的在已有的協議棧上建立自己的軟體模塊;有的乾脆就是獨立的一套操作系統。還有一些應用型的防火牆只對特定類型的網路連接提供保護(比如SMTP或者HTTP協議等)。還有一些基於硬體的防火牆產品其實應該歸入安全路由器一類。以上的產品都可以叫做防火牆,因為他們的工作方式都是一樣的:分析出入防火牆的數據包,決定放行還是把他們扔到一邊。

所有的防火牆都具有IP地址過濾功能。這項任務要檢查IP包頭,根據其IP源地址和目標地址作出放行/丟棄決定。看看下面這張圖,兩個網段之間隔了一個防火牆,防火牆的一端有台UNIX計算機,另一邊的網段則擺了台PC客戶機。

當PC客戶機向UNIX計算機發起telnet請求時,PC的telnet客戶程序就產生一個TCP包並把它傳給本地的協議棧准備發送。接下來,協議棧將這個TCP包「塞」到一個IP包里,然後通過PC機的TCP/IP棧所定義的路徑將它發送給UNIX計算機。在這個例子里,這個IP包必須經過橫在PC和UNIX計算機中的防火牆才能到達UNIX計算機。

現在我們「命令」(用專業術語來說就是配製)防火牆把所有發給UNIX計算機的數據包都給拒了,完成這項工作以後,「心腸」比較好的防火牆還會通知客戶程序一聲呢!既然發向目標的IP數據沒法轉發,那麼只有和UNIX計算機同在一個網段的用戶才能訪問UNIX計算機了。

還有一種情況,你可以命令防火牆專給那台可憐的PC機找茬,別人的數據包都讓過就它不行。這正是防火牆最基本的功能:根據IP地址做轉發判斷。但要上了大場面這種小伎倆就玩不轉了,由於黑客們可以採用IP地址欺騙技術,偽裝成合法地址的計算機就可以穿越信任這個地址的防火牆了。不過根據地址的轉發決策機制還是最基本和必需的。另外要注意的一點是,不要用DNS主機名建立過濾表,對DNS的偽造比IP地址欺騙要容易多了。

伺服器TCP/UDP 埠過濾

僅僅依靠地址進行數據過濾在實際運用中是不可行的,還有個原因就是目標主機上往往運行著多種通信服務,比方說,我們不想讓用戶採用 telnet的方式連到系統,但這絕不等於我們非得同時禁止他們使用SMTP/POP郵件伺服器吧?所以說,在地址之外我們還要對伺服器的TCP/ UDP埠進行過濾。

比如,默認的telnet服務連接埠號是23。假如我們不許PC客戶機建立對UNIX計算機(在這時我們當它是伺服器)的telnet連接,那麼我們只需命令防火牆檢查發送目標是UNIX伺服器的數據包,把其中具有23目標埠號的包過濾就行了。這樣,我們把IP地址和目標伺服器TCP/UDP埠結合起來不就可以作為過濾標准來實現相當可靠的防火牆了嗎?不,沒這么簡單。

客戶機也有TCP/UDP埠

TCP/IP是一種端對端協議,每個網路節點都具有唯一的地址。網路節點的應用層也是這樣,處於應用層的每個應用程序和服務都具有自己的對應「地址」,也就是埠號。地址和埠都具備了才能建立客戶機和伺服器的各種應用之間的有效通信聯系。比如,telnet伺服器在埠23偵聽入站連接。同時telnet客戶機也有一個埠號,否則客戶機的IP棧怎麼知道某個數據包是屬於哪個應用程序的呢?

由於歷史的原因,幾乎所有的TCP/IP客戶程序都使用大於1023的隨機分配埠號。只有UNIX計算機上的root用戶才可以訪問1024以下的埠,而這些埠還保留為伺服器上的服務所用。所以,除非我們讓所有具有大於1023埠號的數據包進入網路,否則各種網路連接都沒法正常工作。

這對防火牆而言可就麻煩了,如果阻塞入站的全部埠,那麼所有的客戶機都沒法使用網路資源。因為伺服器發出響應外部連接請求的入站(就是進入防火牆的意思)數據包都沒法經過防火牆的入站過濾。反過來,打開所有高於1023的埠就可行了嗎?也不盡然。由於很多服務使用的埠都大於1023,比如X client、基於RPC的NFS服務以及為數眾多的非UNIX IP產品等(NetWare/IP)就是這樣的。那麼讓達到1023埠標準的數據包都進入網路的話網路還能說是安全的嗎?連這些客戶程序都不敢說自己是足夠安全的。

雙向過濾

OK,咱們換個思路。我們給防火牆這樣下命令:已知服務的數據包可以進來,其他的全部擋在防火牆之外。比如,如果你知道用戶要訪問Web伺服器,那就只讓具有源埠號80的數據包進入網路:

不過新問題又出現了。首先,你怎麼知道你要訪問的伺服器具有哪些正在運行的埠號呢? 象HTTP這樣的伺服器本來就是可以任意配置的,所採用的埠也可以隨意配置。如果你這樣設置防火牆,你就沒法訪問哪些沒採用標准埠號的的網路站點了!反過來,你也沒法保證進入網路的數據包中具有埠號80的就一定來自Web伺服器。有些黑客就是利用這一點製作自己的入侵工具,並讓其運行在本機的80埠!

檢查ACK位

源地址我們不相信,源埠也信不得了,這個不得不與黑客共舞的瘋狂世界上還有什麼值得我們信任呢?還好,事情還沒到走投無路的地步。對策還是有的,不過這個辦法只能用於TCP協議。

TCP是一種可靠的通信協議,「可靠」這個詞意味著協議具有包括糾錯機制在內的一些特殊性質。為了實現其可靠性,每個TCP連接都要先經過一個「握手」過程來交換連接參數。還有,每個發送出去的包在後續的其他包被發送出去之前必須獲得一個確認響應。但並不是對每個TCP包都非要採用專門的ACK包來響應,實際上僅僅在TCP包頭上設置一個專門的位就可以完成這個功能了。所以,只要產生了響應包就要設置ACK位。連接會話的第一個包不用於確認,所以它就沒有設置ACK位,後續會話交換的TCP包就要設置ACK位了。

舉個例子,PC向遠端的Web伺服器發起一個連接,它生成一個沒有設置ACK位的連接請求包。當伺服器響應該請求時,伺服器就發回一個設置了ACK位的數據包,同時在包里標記從客戶機所收到的位元組數。然後客戶機就用自己的響應包再響應該數據包,這個數據包也設置了ACK位並標記了從伺服器收到的位元組數。通過監視ACK位,我們就可以將進入網路的數據限制在響應包的范圍之內。於是,遠程系統根本無法發起TCP連接但卻能響應收到的數據包了。

這套機制還不能算是無懈可擊,簡單地舉個例子,假設我們有台內部Web伺服器,那麼埠80就不得不被打開以便外部請求可以進入網路。還有,對UDP包而言就沒法監視ACK位了,因為UDP包壓根就沒有ACK位。還有一些TCP應用程序,比如FTP,連接就必須由這些伺服器程序自己發起。

FTP帶來的困難

一般的Internet服務對所有的通信都只使用一對埠號,FTP程序在連接期間則使用兩對埠號。第一對埠號用於FTP的「命令通道」提供登錄和執行命令的通信鏈路,而另一對埠號則用於FTP的「數據通道」提供客戶機和伺服器之間的文件傳送。

在通常的FTP會話過程中,客戶機首先向伺服器的埠21(命令通道)發送一個TCP連接請求,然後執行LOGIN、DIR等各種命令。一旦用戶請求伺服器發送數據,FTP伺服器就用其20埠 (數據通道)向客戶的數據埠發起連接。問題來了,如果伺服器向客戶機發起傳送數據的連接,那麼它就會發送沒有設置ACK位的數據包,防火牆則按照剛才的規則拒絕該數據包同時也就意味著數據傳送沒戲了。通常只有高級的、也就是夠聰明的防火牆才能看出客戶機剛才告訴伺服器的埠,然後才許可對該埠的入站連接。

UDP埠過濾

好了,現在我們回過頭來看看怎麼解決UDP問題。剛才說了,UDP包沒有ACK位所以不能進行ACK位過濾。UDP 是發出去不管的「不可靠」通信,這種類型的服務通常用於廣播、路由、多媒體等廣播形式的通信任務。NFS、DNS、WINS、NetBIOS-over-TCP/IP和 NetWare/IP都使用UDP。

看來最簡單的可行辦法就是不允許建立入站UDP連接。防火牆設置為只許轉發來自內部介面的UDP包,來自外部介面的UDP包則不轉發。現在的問題是,比方說,DNS名稱解析請求就使用UDP,如果你提供DNS服務,至少得允許一些內部請求穿越防火牆。還有IRC這樣的客戶程序也使用UDP,如果要讓你的用戶使用它,就同樣要讓他們的UDP包進入網路。我們能做的就是對那些從本地到可信任站點之間的連接進行限制。但是,什麼叫可信任!如果黑客採取地址欺騙的方法不又回到老路上去了嗎?

有些新型路由器可以通過「記憶」出站UDP包來解決這個問題:如果入站UDP包匹配最近出站UDP包的目標地址和埠號就讓它進來。如果在內存中找不到匹配的UDP包就只好拒絕它了!但是,我們如何確信產生數據包的外部主機就是內部客戶機希望通信的伺服器呢?如果黑客詐稱DNS伺服器的地址,那麼他在理論上當然可以從附著DNS的UDP埠發起攻擊。只要你允許DNS查詢和反饋包進入網路這個問題就必然存在。辦法是採用代理伺服器。

所謂代理伺服器,顧名思義就是代表你的網路和外界打交道的伺服器。代理伺服器不允許存在任何網路內外的直接連接。它本身就提供公共和專用的DNS、郵件伺服器等多種功能。代理伺服器重寫數據包而不是簡單地將其轉發了事。給人的感覺就是網路內部的主機都站在了網路的邊緣,但實際上他們都躲在代理的後面,露面的不過是代理這個假面具。

小結

IP地址可能是假的,這是由於IP協議的源路有機制所帶來的,這種機制告訴路由器不要為數據包採用正常的路徑,而是按照包頭內的路徑傳送數據包。於是黑客就可以使用系統的IP地址獲得返回的數據包。有些高級防火牆可以讓用戶禁止源路由。通常我們的網路都通過一條路徑連接ISP,然後再進入Internet。這時禁用源路由就會迫使數據包必須沿著正常的路徑返回。

還有,我們需要了解防火牆在拒絕數據包的時候還做了哪些其他工作。比如,防火牆是否向連接發起系統發回了「主機不可到達」的ICMP消息?或者防火牆真沒再做其他事?這些問題都可能存在安全隱患。ICMP「主機不可達」消息會告訴黑客「防火牆專門阻塞了某些埠」,黑客立即就可以從這個消息中聞到一點什麼氣味。如果ICMP「主機不可達」是通信中發生的錯誤,那麼老實的系統可能就真的什麼也不發送了。反過來,什麼響應都沒有卻會使發起通信的系統不斷地嘗試建立連接直到應用程序或者協議棧超時,結果最終用戶只能得到一個錯誤信息。當然這種方式會讓黑客無法判斷某埠到底是關閉了還是沒有使用。

5. 分組過濾防火牆的工作原理謝謝大家了

回答:mengzpabc
學弟自
12月13日 13:48 哦。。
黑客主要就是利用我們計算機的埠。
來對我們的計算機進行訪問和攻擊。
防火牆主要就是關閉這些埠。
如果你是XP-SP2的系統只要打開系統的防火牆入可以了。
不用再裝天網了。
除非你想做一些其它的事情(查看自己登陸伺服器的IP)

6. 數據包過濾防火牆的工作原理是什麼

防火牆的工作原理:防火牆就是一種過濾塞(目前你這么理解不算錯)版,你可以讓你權喜歡的東西通過這個塞子,別的玩意都統統過濾掉。在網路的世界裡,要由防火牆過濾的就是承載通信數據的通信包。
天下的防火牆至少都會說兩個詞:Yes或者No。直接說就是接受或者拒絕。最簡單的防火牆是乙太網橋。但幾乎沒有人會認為這種原始防火牆能管多大用。大多數防火牆採用的技術和標准可謂五花八門。這些防火牆的形式多種多樣:有的取代系統上已經裝備的T CP/IP協議棧;有的在已有的協議棧上建立自己的軟體模塊;有的乾脆就是獨立的一套操作系統。還有一些應用型的防火牆只對特定類型的網路連接提供保護(比如S MTP或者HTTP協議等)。還有一些基於硬體的防火牆產品其實應該歸入安全路由器一類。以上的產品都可以叫做防火牆,因為他們的工作方式都是一樣的:分析出入防火牆的數據包,決定放行還是把他們扔到一邊。
所有的防火牆都具有IP地址過濾功能。這項任務要檢查IP包頭,根據其IP源地址和目標地址作出放行/丟棄決定。

7. 說明分組過濾防火牆的基本原理

防火牆技術可根據防範的方式和側重點的不同而分為很多種類型,但總體來講可分為二大類:分組過濾、應用代理!----分組過濾(Packet filtering):作用在網路層和傳輸層,它根據分組包頭源地址,目的地址和埠號、協議類型等標志確定是否允許數據包通過。只有滿足過濾邏輯的數據包才被轉發到相應的目的地出口端,其餘數據包則被從數據流中丟棄。
------應用代理型防火牆是內部網與外部網的隔離點,起著監視和隔絕應用層通信流的作 用。同時也常結合入過濾器的功能。它工作在OSI模型的最高層,掌握著應用系統中可用作安全決策的全部信息。--
-- --應用代理(Application Proxy):也叫應用網關(Application Gateway),它作用在應用層,其特點是完全阻隔了網路通信流,通過對每種應用服務編制專門的代理程序,實現監視和控制應用層通信流的作用。實際中的應用網關通常由專用工作站實現!---分組過濾的優點是不用改動客戶機和主機上的應用程序,因為它工作在網路層和傳輸層,與應用層無關。但其弱點也是明顯的:據以過濾判別的只有網路層和傳輸層的有限信息,因而各種安全要求不可能充分滿足;在許多過濾器中,過濾規則的數目是有限制的,且隨著規則數目的增加,性能會受到很大地影響;由於缺少上下文關聯信息,不能有效地過濾如UDP、RPC一類的協議;另外,大多數過濾器中缺少審計和報警機制,且管理方式和用戶界面較差;對安全管理人員素質要求高,建立安全規則時,必須對協議本身及其在不同應用程序中的作用有較深入的理解。因此,過濾器通常是和應用網關配合使用,共同組成防火牆系統.

8. 基於包過濾防火牆的原理和實現技術是怎樣的

推薦看一看 朱雁冰 寫的《Windows防火牆與網路封包截獲技術》,上面介紹了三種分別基於用戶態和核心態下的防火牆編譯,雖然他提到的三種技術現在看來都有不足,但是是一本講解詳細的好書~~~!!

防火牆就是一種過濾塞(目前你這么理解不算錯),你可以讓你喜歡的東西通過這個塞子,別的玩意都統統過濾掉。在網路的世界裡,要由防火牆過濾的就是承載通信數據的通信包。

天下的防火牆至少都會說兩個詞:Yes或者No。直接說就是接受或者拒絕。最簡單的防火牆是乙太網橋。但幾乎沒有人會認為這種原始防火牆能管多大用。大多數防火牆採用的技術和標准可謂五花八門。這些防火牆的形式多種多樣:有的取代系統上已經裝備的TCP/IP協議棧;有的在已有的協議棧上建立自己的軟體模塊;有的乾脆就是獨立的一套操作系統。還有一些應用型的防火牆只對特定類型的網路連接提供保護(比如SMTP或者HTTP協議等)。還有一些基於硬體的防火牆產品其實應該歸入安全路由器一類。以上的產品都可以叫做防火牆,因為他們的工作方式都是一樣的:分析出入防火牆的數據包,決定放行還是把他們扔到一邊。

所有的防火牆都具有IP地址過濾功能。這項任務要檢查IP包頭,根據其IP源地址和目標地址作出放行/丟棄決定。看看下面這張圖,兩個網段之間隔了一個防火牆,防火牆的一端有台UNIX計算機,另一邊的網段則擺了台PC客戶機。

當PC客戶機向UNIX計算機發起telnet請求時,PC的telnet客戶程序就產生一個TCP包並把它傳給本地的協議棧准備發送。接下來,協議棧將這個TCP包「塞」到一個IP包里,然後通過PC機的TCP/IP棧所定義的路徑將它發送給UNIX計算機。在這個例子里,這個IP包必須經過橫在PC和UNIX計算機中的防火牆才能到達UNIX計算機。

現在我們「命令」(用專業術語來說就是配製)防火牆把所有發給UNIX計算機的數據包都給拒了,完成這項工作以後,「心腸」比較好的防火牆還會通知客戶程序一聲呢!既然發向目標的IP數據沒法轉發,那麼只有和UNIX計算機同在一個網段的用戶才能訪問UNIX計算機了。

還有一種情況,你可以命令防火牆專給那台可憐的PC機找茬,別人的數據包都讓過就它不行。這正是防火牆最基本的功能:根據IP地址做轉發判斷。但要上了大場面這種小伎倆就玩不轉了,由於黑客們可以採用IP地址欺騙技術,偽裝成合法地址的計算機就可以穿越信任這個地址的防火牆了。不過根據地址的轉發決策機制還是最基本和必需的。另外要注意的一點是,不要用DNS主機名建立過濾表,對DNS的偽造比IP地址欺騙要容易多了。

伺服器TCP/UDP 埠過濾

僅僅依靠地址進行數據過濾在實際運用中是不可行的,還有個原因就是目標主機上往往運行著多種通信服務,比方說,我們不想讓用戶採用 telnet的方式連到系統,但這絕不等於我們非得同時禁止他們使用SMTP/POP郵件伺服器吧?所以說,在地址之外我們還要對伺服器的TCP/ UDP埠進行過濾。

比如,默認的telnet服務連接埠號是23。假如我們不許PC客戶機建立對UNIX計算機(在這時我們當它是伺服器)的telnet連接,那麼我們只需命令防火牆檢查發送目標是UNIX伺服器的數據包,把其中具有23目標埠號的包過濾就行了。這樣,我們把IP地址和目標伺服器TCP/UDP埠結合起來不就可以作為過濾標准來實現相當可靠的防火牆了嗎?不,沒這么簡單。

客戶機也有TCP/UDP埠

TCP/IP是一種端對端協議,每個網路節點都具有唯一的地址。網路節點的應用層也是這樣,處於應用層的每個應用程序和服務都具有自己的對應「地址」,也就是埠號。地址和埠都具備了才能建立客戶機和伺服器的各種應用之間的有效通信聯系。比如,telnet伺服器在埠23偵聽入站連接。同時telnet客戶機也有一個埠號,否則客戶機的IP棧怎麼知道某個數據包是屬於哪個應用程序的呢?

由於歷史的原因,幾乎所有的TCP/IP客戶程序都使用大於1023的隨機分配埠號。只有UNIX計算機上的root用戶才可以訪問1024以下的埠,而這些埠還保留為伺服器上的服務所用。所以,除非我們讓所有具有大於1023埠號的數據包進入網路,否則各種網路連接都沒法正常工作。

這對防火牆而言可就麻煩了,如果阻塞入站的全部埠,那麼所有的客戶機都沒法使用網路資源。因為伺服器發出響應外部連接請求的入站(就是進入防火牆的意思)數據包都沒法經過防火牆的入站過濾。反過來,打開所有高於1023的埠就可行了嗎?也不盡然。由於很多服務使用的埠都大於1023,比如X client、基於RPC的NFS服務以及為數眾多的非UNIX IP產品等(NetWare/IP)就是這樣的。那麼讓達到1023埠標準的數據包都進入網路的話網路還能說是安全的嗎?連這些客戶程序都不敢說自己是足夠安全的。

雙向過濾

OK,咱們換個思路。我們給防火牆這樣下命令:已知服務的數據包可以進來,其他的全部擋在防火牆之外。比如,如果你知道用戶要訪問Web伺服器,那就只讓具有源埠號80的數據包進入網路:

不過新問題又出現了。首先,你怎麼知道你要訪問的伺服器具有哪些正在運行的埠號呢? 象HTTP這樣的伺服器本來就是可以任意配置的,所採用的埠也可以隨意配置。如果你這樣設置防火牆,你就沒法訪問哪些沒採用標准埠號的的網路站點了!反過來,你也沒法保證進入網路的數據包中具有埠號80的就一定來自Web伺服器。有些黑客就是利用這一點製作自己的入侵工具,並讓其運行在本機的80埠!

檢查ACK位

源地址我們不相信,源埠也信不得了,這個不得不與黑客共舞的瘋狂世界上還有什麼值得我們信任呢?還好,事情還沒到走投無路的地步。對策還是有的,不過這個辦法只能用於TCP協議。

TCP是一種可靠的通信協議,「可靠」這個詞意味著協議具有包括糾錯機制在內的一些特殊性質。為了實現其可靠性,每個TCP連接都要先經過一個「握手」過程來交換連接參數。還有,每個發送出去的包在後續的其他包被發送出去之前必須獲得一個確認響應。但並不是對每個TCP包都非要採用專門的ACK包來響應,實際上僅僅在TCP包頭上設置一個專門的位就可以完成這個功能了。所以,只要產生了響應包就要設置ACK位。連接會話的第一個包不用於確認,所以它就沒有設置ACK位,後續會話交換的TCP包就要設置ACK位了。

舉個例子,PC向遠端的Web伺服器發起一個連接,它生成一個沒有設置ACK位的連接請求包。當伺服器響應該請求時,伺服器就發回一個設置了ACK位的數據包,同時在包里標記從客戶機所收到的位元組數。然後客戶機就用自己的響應包再響應該數據包,這個數據包也設置了ACK位並標記了從伺服器收到的位元組數。通過監視ACK位,我們就可以將進入網路的數據限制在響應包的范圍之內。於是,遠程系統根本無法發起TCP連接但卻能響應收到的數據包了。

這套機制還不能算是無懈可擊,簡單地舉個例子,假設我們有台內部Web伺服器,那麼埠80就不得不被打開以便外部請求可以進入網路。還有,對UDP包而言就沒法監視ACK位了,因為UDP包壓根就沒有ACK位。還有一些TCP應用程序,比如FTP,連接就必須由這些伺服器程序自己發起。

FTP帶來的困難

一般的Internet服務對所有的通信都只使用一對埠號,FTP程序在連接期間則使用兩對埠號。第一對埠號用於FTP的「命令通道」提供登錄和執行命令的通信鏈路,而另一對埠號則用於FTP的「數據通道」提供客戶機和伺服器之間的文件傳送。

在通常的FTP會話過程中,客戶機首先向伺服器的埠21(命令通道)發送一個TCP連接請求,然後執行LOGIN、DIR等各種命令。一旦用戶請求伺服器發送數據,FTP伺服器就用其20埠 (數據通道)向客戶的數據埠發起連接。問題來了,如果伺服器向客戶機發起傳送數據的連接,那麼它就會發送沒有設置ACK位的數據包,防火牆則按照剛才的規則拒絕該數據包同時也就意味著數據傳送沒戲了。通常只有高級的、也就是夠聰明的防火牆才能看出客戶機剛才告訴伺服器的埠,然後才許可對該埠的入站連接。

UDP埠過濾

好了,現在我們回過頭來看看怎麼解決UDP問題。剛才說了,UDP包沒有ACK位所以不能進行ACK位過濾。UDP 是發出去不管的「不可靠」通信,這種類型的服務通常用於廣播、路由、多媒體等廣播形式的通信任務。NFS、DNS、WINS、NetBIOS-over-TCP/IP和 NetWare/IP都使用UDP。

看來最簡單的可行辦法就是不允許建立入站UDP連接。防火牆設置為只許轉發來自內部介面的UDP包,來自外部介面的UDP包則不轉發。現在的問題是,比方說,DNS名稱解析請求就使用UDP,如果你提供DNS服務,至少得允許一些內部請求穿越防火牆。還有IRC這樣的客戶程序也使用UDP,如果要讓你的用戶使用它,就同樣要讓他們的UDP包進入網路。我們能做的就是對那些從本地到可信任站點之間的連接進行限制。但是,什麼叫可信任!如果黑客採取地址欺騙的方法不又回到老路上去了嗎?

有些新型路由器可以通過「記憶」出站UDP包來解決這個問題:如果入站UDP包匹配最近出站UDP包的目標地址和埠號就讓它進來。如果在內存中找不到匹配的UDP包就只好拒絕它了!但是,我們如何確信產生數據包的外部主機就是內部客戶機希望通信的伺服器呢?如果黑客詐稱DNS伺服器的地址,那麼他在理論上當然可以從附著DNS的UDP埠發起攻擊。只要你允許DNS查詢和反饋包進入網路這個問題就必然存在。辦法是採用代理伺服器。

所謂代理伺服器,顧名思義就是代表你的網路和外界打交道的伺服器。代理伺服器不允許存在任何網路內外的直接連接。它本身就提供公共和專用的DNS、郵件伺服器等多種功能。代理伺服器重寫數據包而不是簡單地將其轉發了事。給人的感覺就是網路內部的主機都站在了網路的邊緣,但實際上他們都躲在代理的後面,露面的不過是代理這個假面具。

小結

IP地址可能是假的,這是由於IP協議的源路有機制所帶來的,這種機制告訴路由器不要為數據包採用正常的路徑,而是按照包頭內的路徑傳送數據包。於是黑客就可以使用系統的IP地址獲得返回的數據包。有些高級防火牆可以讓用戶禁止源路由。通常我們的網路都通過一條路徑連接ISP,然後再進入Internet。這時禁用源路由就會迫使數據包必須沿著正常的路徑返回。

還有,我們需要了解防火牆在拒絕數據包的時候還做了哪些其他工作。比如,防火牆是否向連接發起系統發回了「主機不可到達」的ICMP消息?或者防火牆真沒再做其他事?這些問題都可能存在安全隱患。ICMP「主機不可達」消息會告訴黑客「防火牆專門阻塞了某些埠」,黑客立即就可以從這個消息中聞到一點什麼氣味。如果ICMP「主機不可達」是通信中發生的錯誤,那麼老實的系統可能就真的什麼也不發送了。反過來,什麼響應都沒有卻會使發起通信的系統不斷地嘗試建立連接直到應用程序或者協議棧超時,結果最終用戶只能得到一個錯誤信息。當然這種方式會讓黑客無法判斷某埠到底是關閉了還是沒有使用。

閱讀全文

與分組過濾防火牆原理上是基於什麼進行分析的相關的資料

熱點內容
安吉爾凈水器好不好多少錢1台 瀏覽:678
賽歐2空調濾芯怎麼裝 瀏覽:512
哪些液體普通蒸餾 瀏覽:192
汽車空氣濾芯真假如何鑒別 瀏覽:97
什麼叫ro反滲透濾芯 瀏覽:401
浙江新雅樹脂 瀏覽:922
九州凈水機多少錢一台 瀏覽:3
萊克吉米凈化器濾網怎麼清洗 瀏覽:35
69元凈水機多少錢 瀏覽:438
弱鹼性離子交換樹脂 瀏覽:496
蒸餾釜的功率 瀏覽:22
廣東超濾凈水器貼牌 瀏覽:121
污水井怎麼打開專用工具 瀏覽:603
凈水器中水泵接頭怎麼拆 瀏覽:501
污水排放申請報告怎麼寫 瀏覽:84
珍奧尚飲水機的廠家在什麼地方 瀏覽:644
熱水器水垢清除材料 瀏覽:984
酚醛樹脂生產企業 瀏覽:224
小飯店過濾池怎麼做 瀏覽:798
蒸餾是溫度降低 瀏覽:54