翻轉電子書系列:資訊與網路安全概論  

翻轉工作室:粘添壽

第十章 防火牆

『防火牆?』倒像古代護城牆,不僅防禦外來的侵犯,更要保持居民的進出方便;當一道城牆不足於保護時,可再挖掘護城河,或多建幾道長城環環保護著。

10-1 私有網路安全簡介

10-1-1 各種網路型態簡介

『私有網路』(Private Network)係指一般區域性網路,其範圍可能是組織單位、公司行號、學校、乃至個人的網路系統;應用範圍則涵蓋電子化辦公室、電子化生產系統、行銷系統、或某種特殊目的所構成的網路。基本上,私有網路是組織內獨立網路系統,所傳輸訊息亦較屬機密性,大多不希望讓外人窺視。隨著組織營運規模的擴充,大多需要與外部其他公司資訊系統互相通訊,因此獨立性的私有網路已漸不符所需。更進一步,也許需要提供內部訊息讓其他相關行業存取,或透過網路從事商業性行為,如此一來,內部機密性訊息可能暴露到組織外。

『公眾網路』(Public Network)提供許多私有網路之間的溝通橋樑,其構成可區分為兩大部份,一者是建設基礎線路的電信公司,稱之為『網路服務提供者』(Network Service Provider, NSP),譬如,中華電信公司、速博公司等等;另一者是提供網路服務的公司,稱之為『網際網路服務提供者』(Internet Service Provider, ISP),譬如,HiNet、TANet、SeedNet等等。NSP 公司主要提供數據傳輸專線、ADSL 連線、或國際衛星線路,經由這些連線可以擴展到任何地區,亦稱為『廣域網路』(Wide Area Network, WAN)。ISP 公司向 NSP 公司承租各種傳輸線路,將各地區網路結合一個穩定性較高的網路系統,並提供各種網路服務,如網頁空間、郵件系統、主機代理等服務。因此,習慣上將 ISP 所建構的網路稱為『大都會網路』(MAN)。一般私有網路公司可向 NSP 公司承租線路,加入 ISP 網路下的成員,再透過 ISP 網路連接之後,即可將訊息傳送到全世界任何角落上。由此可見,Internet 網路是由獨立性的私有網路與公眾網路所構成,然而公眾網路是結合全球各地的 ISP 與 NSP 網路而成。圖 10-1 為 Internet 網路系統的概念圖,其中 M、N、T 與 P 是 ISP 所建構的大都會網路,至於 ISP 網路之間則透過 NSP 公司的數據傳輸線路來相互連接;私有網路可以向 NSP 公司承租專線或 ADSL 連線,連接到 ISP 公司的網路上,成為 ISP 網路下的成員。因此,私有網路透過公眾網路連接之後,便可通行於全世界。

圖 10-1 私有網路與公眾網路

10-1-2 建構安全性私有網路

基本上,為了提高訊息流通量,公眾網路大多不會限制傳輸訊息的內容,並允許任何人由公眾網路上存取訊息,且僅依訊息封包之目的地給予轉送到適當位址上。也就是說,任何人都可藉由公眾網路傳送或接收訊息,並且不受限於時間或地點。由此可見,在公眾網路上傳輸的訊息是不安全的,易受有心人士窺視、竄改、或仿造,但話說回來。私有網路非藉由公眾網路傳輸訊息不可,因此如何達成私有網路安全性的問題,更顯得重要。

如何確保私有網路的安全?可由『點』與『線』兩個方向來思考。『點』表示確保某一區域性私有網路的安全;『線』表示如何透過公眾網路結合多個私有網路,並確保之間通訊的安全。前者大多仰賴一個『防火牆』(Firewall)作為私有網路與公眾網路之間的隔離措施,它可以是一部主機電腦或一套網路設施,本章將介紹其相關技術。

圖 10-1-1

10-2 防火牆簡介

何謂『防火牆』(Firewall)? 這是初學者最迫切想知道的答案,如果從字面來解釋,好像是防止火災氾濫,建構一道堅固如銅牆鐵壁般的隔離措施。其實這樣解釋並不能完全表現出防火牆的功能,倒比較像中國古代的護城牆。護城牆保護著城內的居民免受外敵侵犯(如秦始皇所建的萬里長城),它除了阻擋外敵侵犯外,還必須維持城內和城外居民進出暢通,因此必須設有進出城門。有了城牆與城門之後,如何管制人民的進出?如何限制城內外人民的通訊方式?如何防範敵人偽裝混入城內從事破壞的工作?如何偵測出偽裝入城的敵人?以及如何恢復入侵敵人的破壞?以上等等便是『防火牆』所涵蓋的安全措施。

10-2-1 防火牆的功能

簡單的說,防火牆好比是城門的防護措施,如果防護太過嚴密(甚至關閉城門),便會失去建構網路的目的;但過於鬆散,易使內部資料暴露於外人之手,其間實難取捨。一般就安全措施的鬆緊度而言,主要依照私有網路的『安全政策』(Security Policy)而定,並沒有一定的標準。

圖 10-2 防火牆的功能

我們可用圖 10-2 來說明防火牆的功能。防火牆是介於公眾網路和私有網路(或稱內部網路、受保護的網路)之間,是所有對內/對外通訊的『咽喉點』。當外部網路使用者欲傳送訊息進入內部網路,稱為『進入』(Inbound)封包;而內部使用者送往外部網路的訊息,則稱為『外出』(Outbound)封包。防火牆功能就是管制『進入』與『外出』封包的進出,以達到安全防護的目的。

圖 10-2-1防火牆架構

圖 10-3 防火牆協定堆疊

10-2-2 防火牆的措施

為了管制封包進出,一般建構防火牆有以下三大措施:

雖然 NAT 位址轉譯功能也是屬於防火牆的一種,但透過位址轉譯的伺服器將無法獨立運作於外部網路,它可說是接近於『鐵幕』般的安全措施。一般討論防火牆功能還是以封包過濾、電路閘門與應用層閘門等三種為主。

10-3 防火牆架構

10-3-1 防火牆設備

防火牆架構的型態是安全防護能力的主要關鍵,這是一般網路管理者必須詳細研究的課題。不安全的防火牆架構除了浪費許多精神維護之外,說不定連最基本的安全性也無法達成。但話又說回來,也不可能存在百分之百的安全架構,如欲達到一定的安全性,仍需仰賴維護人員隨時摸索,尋找網路的破綻以防止被攻擊。再說,各私有網路的情況不同,所面臨的挑戰也不會相同,因此,毫無標準規範可循。在介紹防火牆架構之前,首先介紹一些相關名詞及其所需的設備:

接下來,我們將介紹三種防火牆的基本架構,一般私有網路的防火牆措施多半是由這三種基本架構演變而來。

10-3-2 雙介面主機架構

『雙介面主機』(Dual-homed Host)是最簡單的防火牆架構,網路型態如圖 10-4 所示。它利用一部雙介面主機作為隔離外部網路與內部網路(受保護網路),並依照防火牆的安全保護層次,決定雙介面主機是『屏蔽路由器』或『防禦主機』。如果採用防禦主機,則此主機上必須安裝有代理程式(如 SOCKS 或 ISA 2000);如果採用屏蔽路由器,則此路由器必須安裝封包過濾程式,當然防禦主機上也可以安裝封包過濾程式,同時達到封包過濾與代理器的功能。一般較小企業公司喜歡採用此種架構,因為它的價格最便宜,但防護能力有限,容易被攻破。

圖 10-4 雙介面主機式架構

無論主機是採用防禦主機或屏蔽路由器,它都將直接暴露於外界網路上,攻擊者只要尋找出該主機的漏洞,便可趁虛而入侵系統。最簡單的方法是搜尋主機是否有其它埠口打開(通常選擇較少使用或較不起眼的埠口),再利用此埠口從事破壞的工作。另外,既然外部使用者可以直接進入內部網路,便可循正規管道將病毒帶入系統內,利用該病毒打開一些較不起眼的埠口(一般都是 1024 以後的埠口,又稱為開後門),讓外界入侵者長驅直入。

10-3-3 屏蔽主機架構

『屏蔽主機』(Screening Host)架構會比雙介面主機的安全性高一點,也是目前私有網路中普遍採用的型態。屏蔽主機架構是由一部屏蔽路由器及一部防禦主機所構成,如圖 10-5 所示,其中屏蔽路由器的功能是過濾封包,限制封包進出私有網路,至於防禦主機則是扮演代理伺服器的功能,代理外部使用者存取內部伺服器,或代理內部使用者存取外部伺服器。兩者的工作項目必須互相配合,最基本的設定是:

圖 10-5 屏蔽主機架構

乍看之下,防禦主機架構好像對外或對內都可達到很好的安全措施,但無論如何,攻擊者還是可以通過屏蔽路由器(無論合法或非法擊破)進入內部網路。另一方面,我們雖然可禁止內部連線通過屏蔽路由器,達到隱藏內部主機的目的。若不幸讓入侵者通過屏蔽路由器,便可以在內部網路上收集所有通訊訊息,再由訊息中分析出系統主機;只要得到主機的相關資料,欲從事破壞或偷竊的行為就不會很難了。由此可見,防禦主機架構的安全性並非如想像中的完美,有心人士還是可以輕而易舉攻破它。

10-3-4 屏蔽網路架構

在防火牆概念中,並無所謂百分之百的安全架構,而是設法架設一種讓攻擊者較不容易擊破的防護措施,也就是說,『建立一種讓攻擊者必須耗費多時難以擊破的防火牆』。上述兩種架構只築一面城牆(或城門)從事安全措施,攻擊者祇要突破這個城門便可長驅直入內部網路。為了延長被攻擊進入內部網路的時間,簡單的方法就是多建立幾道城牆,亦即當入侵者擊破第一道門之後,必須再經過第二道、第三道、等等,始可進入到內部網路。因此,網路管理者必須隨時監視是否有被入侵的情況,只要在入侵者尚未完全進入到內部網路之前,將之揪出,正所謂亡羊補牢,尤時未晚。

多建立幾道城門(或城牆)之後,城牆和城牆之間稱為『周圍網路』(Perimeter Network),一般將周圍網路稱為『非軍事區網路』(DMZ 網路,De-Militarized Zone),如南北韓之間的停戰區。但在防火牆措施上稱之為『屏蔽式子網路』(Screened Subnet,簡稱屏蔽網路)架構,網路基礎型態如圖 10-6 所示。

圖 10-6 屏蔽網路架構

圖 10-6 中包含外部路由器、內部路由器與防禦主機等三個主要設備,並沒有一定的規則來定義它們應該處理什麼樣的安全措施,完全視私有網路的『安全政策』而定。簡單的設定是將外部與內部路由器設定成封包過濾器,而將防禦主機安裝成代理伺服器(如:Proxy Server、FTP Server、SOCKS Server),其管理措施如下:

在 DMZ 網路之下,入侵者擊破外部路由器之後,還隔著一道牆,因此無法直接觀察到內部網路的通訊行為,仍需花費一段時間才能攻擊內部路由器。一旦入侵者擊破內部路由器之後,始可搜尋到內部網路訊息,所以在這個期間,管理者必須設法將入侵者找出來,並將它堵死。這個情況好比,入侵者先派間諜進入城內(無論合法或非法進入),並開啟另一道門(也就是通訊埠口),再讓入侵程式直接由那一道城門進入;另一種情況是,間諜並不開啟後門(通訊埠口),直接將收集的資料透過合法管道傳送給外部入侵者。當然有許多入侵方法不勝枚舉,但無論如何,管理者必須在入侵者得逞之前發現,並將它刪除。

10-4 封包過濾器

10-4-1 封包過濾器的種類

『封包過濾』(Packet Filtering)是防火牆最基本的功能,是最不可或缺的工具。在 Internet 網路上,訊息跨越網路之間傳輸的最基本資料單元為 IP 封包,當 IP 封包經過某一路由器時,路由器將會拆解它,再由封包標頭上的目的位址決定如何轉送(或是否給予轉送)。如果路由器除了判斷目的位址之外,還增加判斷其他訊息(如來源位址或協定型態),再決定是否給予轉送,便成為『封包過濾器』。基本上,由一般路由器改變成為封包過濾器並不困難,所以一般路由器都兼具有封包過濾功能。

再說,Internet 網路上各種通訊協定(如 TCP、UDP、ICMP),都是利用 IP 封包傳輸,因此,只要針對 IP 封包來過濾,便能達到防火牆的功能。但封包過濾並不只拆解到 IP 封包標頭,隨著防火牆的安全考量,或許會拆解到上一層的協定封包,所以有所謂 IP/TCP、IP/UDP、以及 IP/ICMP 等封包過濾功能。但無論封包拆解到何種程度,都是由該協定標頭上的訊息決定是否給予過濾。

但話說回來,限制何種封包可以進出防火牆,看似非常容易,其實這些規則設定時可說是漏洞百出,而且有些漏洞不易被發現,於是便成為被攻擊的目標,這對網路管理者而言不失為一大挑戰。

10-4-2 封包過濾器的設定規則

如將封包過濾功能安裝於路由器上,便稱之為『封包過濾路由器』(Packet Filtering Router),它與一般路由器有很大的不同,以下是封包過濾路由器應該注意的事項:

至於 IP 封包內有那些訊息可以作為過濾判斷的條件,這並沒有一定的規範可循。基本上,若依照封包上的訊息來判斷過濾的條件,就封包被拆解程度,以及封包種類,可區分為:IP 封包過濾、IP/TCP 封包過濾、IP/UDP 封包過濾、以及 IP/ICMP 封包過濾等四種型態,下一節將會說明這些封包過濾的設定原則。

封包過濾器必須依照安全措施,設定某些過濾規則。然而在建立規則時必須考慮到該通訊協定(如 IP、TCP)的運作方式,如此說來,設定過濾規則恐非易事,一般可依照下列步驟設定:

並非所有應用都需要依照這些規則來設定,可視管理者自己如何變通。

10-5 IP 封包過濾

所謂 IP 封包過濾係路由器(或防禦主機)祇拆解到 IP 協定標頭,其中可供過濾判斷的條件如下:(如圖 10-8 所示)

10-8 IP 封包過濾訊息

10-5-1 IP 過濾訊息與範例

IP 封包過濾大多祇針對網路位址作為過濾的依據,我們舉一個範例來說明它的運作情形,以其過濾規則的設定。圖 10-9 為一簡單的防火牆設備,內部網路的網路位址為 163.15.0.0/16(網路遮罩為 255.255.0.0),希望設定的條件為:

圖 10-9 IP 封包過濾範例

依照上述條件,所制定的防火牆規則如表 13-1 所示。

表 10-1 IP 封包過濾規則表

規則

方向

來源位址

目的位址

措施

A

進入

任意

 163.15.0.0/16

允許

B

出去

任意

任意

允許

C

皆可

任意

任意

拒絕

其中規格 C 為內定值,並預設為『拒絕』。我們用幾個範例來探討看看,這些規則是否符合所期望的防火牆條件:

由此可見,僅利用 IP 標頭訊息來過濾封包,其安全性功能非常的低,幾乎與原來路徑選擇的功能沒有兩樣;接下來介紹其他較有效果的過濾方法。

10-6 IP/TCP 封包過濾

對一般應用而言,僅利用 IP 封包標頭從事過濾條件是不夠的,若能拆解到上一層協定(如TCP、UDP)標頭,了解該封包功能之後,再判斷是否允許通過防火牆,這樣可能比較實際一點。圖 13-10 為 IP 封包中包裝 TCP 訊息,一般防火牆所採用的判斷訊息如下:

圖 10-10 IP/TCP 過濾封包訊息

一般 TCP/UDP 1024 以前的埠口皆歸劃為系統管理者使用,並且將較常用的『著名埠口』(Well-known)設定在 1024 之前的埠口,至於使用者的隨機埠口都介於 1024 ~ 65535 之間。在正常的情況下,由埠口號碼就可以知道該封包所欲連結之伺服器,譬如,HTTP 伺服器固定在埠口 80、Telnet 伺服器則在埠口 23。

封包過濾條件是由 IP 和 TCP 標頭上的訊息所構成,更能表示出封包的特性。再說,一般系統為了達到多重連線的功能(譬如,一個 Web 伺服器可同時接受多個客戶端連線),每一個通訊連線都是由雙方的 IP 位址與 TCP 埠口號碼來表示,譬如,192.38.24.50:80 ←→ 163.15.2.30:3456,則表示兩部電腦(192.38.24.50 與 163.15.2.30)的傳輸埠口(80 與 3456)之間的連線。由此可見,的確須拆解到 TCP 封包標頭,對於封包過濾的條件判斷才具意義。

10-6-1 TCP 過濾訊息與 ack 參數

我們不可能為了架設防火牆設施,去修改目前運作中的 TCP 協定,只能就現有運作的程序中找尋可能過濾的條件因素。TCP 協定是屬於連接導向的傳輸方式,通訊雙方必須先建立連線,才可以傳輸資料。因此,如欲限制 TCP 連線是否可通過防火牆的話,只要限制其連線與否即可。也就是說,只要過濾 TCP 建立連線的封包,即可決定是否允許該訊息通過防火牆。

TCP 連線是採用三向握手式連絡法,如圖 10-11 所示。它是利用封包標頭上的兩個旗號:SYN(Synchronous,要求連線)與 ACK(Acknowledge,確認),達到雙方溝通的目的,其運作程序如下:發起者發送要求連線封包(SYN = 1、ACK = 0,訊號 (1)),回應者發送同意連線封包(SYN = 0、ACK = 1,訊號 (2)),發起者再確認同意連線(SYN = 0、ACK = 1,訊號 (3))。由此可以發現一個重要現象,除了要求連線封包的 ACK 旗號為零外(ACK=0),其它封包的 ACK 旗號都為 1(ACK=1),因此只要從 ACK 的內容即可判斷是否為連線要求封包,其中:

如此一來,再由 ACK 旗號、目的位址、以及來源位址,便可判斷出是外出或進入的連線要求,或是回應連線要求的訊號;如果再增加傳輸埠口號碼,更可以瞭解該連線所欲連接的應用系統(如 Telnet 或 FTP),一般只要利用這些參數來過濾封包,皆可達到防火牆的功能。

圖 10-11 TCP 三向握手式連絡法

10-6-2 TCP 過濾範例:Telnet 連線

接下來,我們利用 Telnet 連線為範例來說明 IP/TCP 封包過濾規則的設定方法,以及是否加入 ACK 旗號可能出現的問題。圖 10-12 為 Telnet 連線範例,首先我們來觀察 Telnet 連線會產生哪些訊號,如下:(IP 與 TCP 埠口位址皆為假設值,Telnet 埠口位於 23/tcp)

圖 10-12 IP/TCP 封包過濾範例

吾人依照網路內外發送 Telnet 連線,可能產生的訊息建立一個『封包訊息表』,如表 10-2 所示。

表 10-2 Telnet 封包訊息表

序號

服務方向

封包

方向

來源

位址

目的

位址

封包型態

來源埠口

目的埠口

設定 ACK

1

出去

出去

任意

內部

TCP

>1024

23

No

2

出去

進入

內部

任意

TCP

23

>1024

Yes

3

進入

進入

任意

內部

TCP

> 1024

23

No

4

進入

出去

內部

任意

TCP

23

>1024

Yes

序號(1) 為內部工作站利用 telnet 連結外部工作站,所產生的封包訊息。序號(2) 是外部工作站同意 telnet 連結所產生的訊息。序號(3) 與 (4) 則是外部工作站向內部發送 telnet 連線與回應所產生的訊息。接下來,我們依照幾個防火牆的安全措施,再參照『訊息封包表』,來建立『封包過濾規則表』,以及討論可出現哪些問題。

10-6-3 允許 Telnet 無 ack

假設防火牆僅允許內部與外部之間利用 telnet 通訊,且不允許利用其他協定連線。假設吾人所採用的封包過濾表不考慮 ACK 訊號,依照表 13-2 的封包訊息表,所建立『封包過濾表』,如表 10-3 所示(未採用 ACK 旗號)。

表 10-3 Telnet 封包過濾規則表之一(無 ACK 旗號)

規則

封包方向

來源位址

目的位址

協定

來源埠口

目的埠口

措施

A

出去

內部

任意

TCP

>1023

23

允許

B

進入

任意

內部

TCP

23

>1024

允許

C

進入

任意

內部

TCP

>1023

23

允許

D

出去

內部

任意

TCP

23

>1024

允許

E

皆可

任意

任意

TCP

任意

任意

拒絕

在正常情況下,測試這些規則是否可行,如下:

圖 13-14 SNMP 封包過濾設定範例

(A) SNMP 封包訊息表

假設外部網路有一個 SNMP Manager,想通過防火牆來操控內部網路的 SNMP Agent(使用 Set/Get 等命令),此外,內部 SNMP Agent 也可能以 Trap 命令,將網路狀態傳送給外部 SNMP Manager。若採用 TCP 或 UDP 協定傳輸,則可能出現的封包如表 13-8。

表 13-8 SNMP 封包訊息表

(B)僅允許外部某主機連線

我們假設允許某一外部主機(138.45.6.32),可以經過防火牆來管理內部網路,但不允許內部網路設備以 Trap 命令通知外部 SNMP Manager,所設定的規則如表 13-9 所示。

表 13-9 SNMP 封包過濾表

如果欲增加內部電腦可以利用 Trap 命令與外部電腦(138.45.6.32)通訊,可再加入 Trap 的相關規則,這留給讀者自行練習,作者不再贅言。

10-8 IP/ICMP 封包過濾

10-8-1 ICMP 過濾訊息

攻擊者最喜歡利用 ICMP 封包來探測網路的狀態;相對的,防火牆必須針對ICMP 封包做特殊處理,才可達到隱藏內部網路狀態的目的。一般來講,ICMP 訊息並不一定要通過防火牆,只要由防火牆回應 ICMP 的訊息中,也可以瞭解內部網路的狀態。因此,封包過濾器收到 ICMP 封包後,除了必須判斷是否給予通過之外,還必須考慮是否可以給予回覆 ICMP 訊息。IP/ICMP 封包過濾可供判斷的訊息如下:(如圖 10-15 所示)

圖 10-15 IP/ICMP 封包過濾訊息

10-8-2 ping 封包過濾範例

ping 命令是測試網路連結狀態的最佳利器,也是入侵者所喜歡用來探測內部網路情況;因此,一般防火牆都會限制 ping 封包的進出。我們用圖 13-16 來說明 ping 命令的運作程序;ping 命令是利用 ICMP Echo Request 封包(Echo 請求)來探測網路,當目的主機(或路由器)收到該封包後,立即以 ICMP Echo Response(Echo 回應)給原發送端,ICMP Echo Request 的訊息型態為 0(MT = 0),又 ICMP Echo Response 為 8(MT = 8)。接下來,我們將 ping 命令可能產生的封包歸類如表 13-10 所示(進出防火牆)。

表 10-10 ping 命令封包訊息表

圖 10-16 ping 封包過濾範例

如果將防火牆設定成內部主機可以用 ping 來測試外部網路,但外部主機不可以用 ping 測試內部網路,設定過濾規則如表 10-11 所示。

表 10-11 ping 命令封包過濾規則

 

10-8-3 traceroute 封包過濾範例

另一個重要的管理命令是 traceroute,當我們希望瞭解封包到達目的地的路徑時,就必須利用 traceroute 來追蹤封包所經過的路徑。入侵者常利用 traceroute 探測內部網路的架構,防火牆也大多會阻止 traceroute 封包進入內部網路,以達到隱密性的要求。

traceroute 是使用 ICMP 及 IP 標頭裡的 TTL(Time-to-Live)欄位,作為判斷已經追蹤過多少個網路端點(路由器)。一般情況下,封包每經過一個網路閘門 TTL 值就被減 1,如果路由器收到一個 TTL 值減 1 以後為 0 時,便會回送一個 ICMP Time Exceeded(Type 11)(逾時)給原發送端,並將該封包丟棄,traceroute 就是利用這種特性來追蹤路徑。它的運作情況如下:首先 traceroute 送出一個 TTL 為 1 的 IP 封包到目的主機,第一個收到的路由器將 TTL 減 1,丟棄該封包,並回送 ICMP 給原發送主機,這個過程確認了這條路徑的第一個路由器;接下來,traceroute 再送 TTL 為 2 的 IP 封包,又可以得到第二個路由器位址,如此重覆一直到封包到達目的主機為止。但當封包到達目的位址時,它的 TTL 同樣被減成 0,也回應 ICMP Time Exceeded 封包,發送端如何判斷封包已到達目的與否?

因為 traceroute 是以 UDP 封包格式發送,我們只要將 UDP 埠口設定在不可能使用的埠口,一般都會將它設定較大的值,通常是在 33434 到 33523 之間任一個即可。當目的主機收到後,判斷是自己的 IP 位址,但無此埠口服務,便會回應一個 ICMP Port Unreachable(埠口無法到達)給發送端。發送端就可利用『ICMP 埠口無法到達』和『ICMP 逾時』來判斷是否到達目的主機。一般封包的 TTL 欄位預設值為 255(如 ping),這可能造成 traceroute 的封包在網路上無窮的回繞,因此,traceroute 的 TTL 預設值為 30,表示最高可以追蹤 30 個經過的網路閘門,但可以設定改變其大小。

圖 10-17 traceroute 運作原理

 

圖 10-17-1 traceroute 封包過濾範例

圖 10-17 為 traceroute 封包過濾範例,它可能通過防火牆的封包如表 10-12 所示。

表 10-12 traceroute 命令封包訊息表

如將圖 10-16 防火牆設定成允許內部主機以 traceroute 去追蹤外部網路,也就是說,允許內部主機的 traceroute 命令通過防火牆;但另一方面,不允許外部網路以 traceroute 命令來測試內部網路,則封包過濾規則如表 10-13 所示。

表 10-13 traceroute 命令封包過濾規則

由上述表格可以發現,為了開放 tranceroute 命令,我們幾乎允許所有 UDP 封包通過防火牆到達外部網路;開放了這一條規則,可能會影響到其他連線的限制,這便是設定封包過濾規則的風險所在。

10-9 代理系統

10-9-1 代理系統簡介

早期『代理系統』(Proxy)的使用主要為了提高網路傳輸效應,將較常被連結之網頁儲存於『代理伺服器』(Proxy Server)上,以備其他使用者瀏覽相同網頁時,直接回應給它,以減少網路傳輸的機會。在 Internet 網路未進入電子商務領域之前,代理系統的確在這方面扮演極重要的角色。但近年來,代理伺服器僅為了提高傳輸速率已漸不符環境所需,其主要原因有三:(1) 網路傳輸速率已經提高了許多,客戶端漸漸不需要仰賴代理伺服器來抓取網頁;(2) 電子商務上網路更新非常快速,代理伺服器上的快取網頁可能已經過時;(3) 目前網頁上大多有動態伺服的功能(譬如,Active X、ASP),無論是否經過代理伺服器轉接,都需要再連結原伺服器端,來做動態伺服的處理。

然而電子商務的風行,各公司行號都期望建立一個固若金湯的防火牆,代理伺服器的轉接功能,剛好能符合防火牆的需求,於是代理系統又熱絡起來。利用代理系統來建設防火牆,又稱為『代理防火牆』(Proxy Firewall),其安全性功能如下:

以上所介紹是代理伺服器扮演防火牆可以提供哪些安全性的功能,接下來介紹代理伺服器的種類,以及其運作原理。如果以使用者(外部或內部)進出防火牆的方向來觀察,代理伺服器可區分為『聯外代理伺服』與『轉向代理伺服』兩種,以下分述之。

10-9-2 聯外代理伺服

所謂『聯外代理伺服』,係指內部網路透過代理系統轉接到外部伺服器,如圖 10-18 所示。我們以網頁伺服器為範例,當內部使用者欲抓取外部伺服器之網頁時,首先將連結到代理伺服器上(訊號 (1)),代理伺服器檢視網頁位址(一般都檢視 IP 位址)是否允許存取,再稽核使用者存取權限及存取時間,如果允許存取該網頁,則代理伺服器搜尋快取伺服器是否有該網頁,如果有便直接將網頁傳送給使用者(訊號 (1-1));如果快取伺服器上沒有備存網頁,則代理伺服器便發送存取命令向外部伺服器抓取(訊號 (2))。接著,外部伺服器將網頁傳送給代理伺服器,首先代理伺服器檢視網頁內容是否有違反安全政策(譬如色情網頁或不雅圖片),如果違反安全政策便丟棄該網頁而不轉送給使用者;如果沒有,便將其儲存於快取伺服器上,並轉送給客戶端。

圖 10-18 聯外代理伺服器

10-9-3 轉向代理伺服

當外部使用者欲存取內部伺服器時,可經由『轉向代理伺服』轉送到適當的伺服器上。內部網路只公佈轉向代理伺服器的位址,由外部網路來看,根本不曉得真正伺服器的所在位址,所有存取內部網路資源都需要經由代理伺服器轉送,這個行為又稱為『打洞』,而代理伺服器都安裝在『防禦主機』上。圖 10-19 為轉向代理伺服器的運作程序,它的運作程序和聯外代理伺服器大同小異,祇不過方向相反而已。

圖 10-19 轉向代理伺服器

轉向代理伺服器在使用者稽核方面要比聯外代理伺服器不容易達成,聯外代理伺服器對認證使用者身份大多可以仰賴內部的網路作業系統(如 Windows 2000)來達成,但轉向代理的使用者可能來自 Internet 網路的任何角落,因此,對使用者的認證問題就需要一個共通的協定來達成。目前 Internet 網路上最普遍的認證協定是 Kerberos 認證協定,也有許多防火牆採用此協定來實現,譬如 ISA Server 或 SOCKS 5。由另一角度來看,轉向代理也是『私有虛擬網路』(VPN)的最佳利器,遠端使用者可以經由認證程序來存取內部網路,如果再附加資料加密的功能,不失為一個很好的防範措施。

圖 10-20 為轉向代理的防火牆架構,一般在防禦主機上安裝有轉向代理程式,並公佈它的傳輸埠口(一般都使用著名埠口),對外界網路而言,防禦主機上的埠口便是伺服器的所在位址,而防禦主機將所收到的資源請求命令(如 HTTP、FTP、SMTP),再將其轉送到內部網路的伺服器位址上,如此便可以完全隱藏內部網路。

圖 10-20 轉向代理的防火牆功能

圖 10-20-1 負載平衡

10-10 網路位址轉譯

『網路位址轉譯』(Network Address Translator, NAT)是屬於防火牆的一種設施,它主要的功能是做內部網路位址和外部網路位址之間的轉譯,一般企業將它作為合法 IP 位址和私有位址之間的轉譯功能。目前 IP 位址漸漸不足,因此對外網路位址不可能分配太多,便利用 NAT 來建構私有網路空間。一般 ISP 公司為了克服 IP 位址不足的問題,都給予客戶動態 IP 位址,我們也可以透過 NAT 將動態 IP 轉譯成私有網路空間。

NAT 的基本原理是多個連線共用一個 IP 位址來往外傳送封包,既然我們瞭解 IP 連線是由『IP 位址 + TCP 傳輸埠口』所構成,因此對內的每一個 IP 位址對應到一個 IP 連線(IP + TCP Port),並且在主機內維護一只對照表,便可達到 NAT 的功能。我們用圖 10-24 來說明 NAT 的運作程序,其中主機 A 作為 NAT 主機,外部網路位址是 168.15.0.50,而轉譯內部網路 165.15.2.0/24,NAT 主機的內部位址是 165.15.2.62。假設內部主機 B(165.15.3.30)連結到外部主機 M(147.15.3.12)的 Telnet Server(Port 23);另外主機 C(165.15.2.34)連結到 Web Server(180.3.2.67:80)。我們來觀察主機 B 連線的轉譯運作,首先主機 B 連結(165.15.2.30:4520)到 NAT 主機上的某一傳輸埠口(165.15.2.62:1458),並將其填入內部對照表,由 NAT 主機的內部位址(165.15.2.62:1458)轉換到外部位址(168.15.0.50:3045),也將其填入 NAT 轉譯表內。再由 NAT 主機要求連線到主機 M的 Web Server,連線成功後將其填入外部對照表。因此由主機 B 到主機 M 之間的連線,就利用 NAT 主機內三個對照表建立而成,如果由主機 M 下載資料到主機 B之間連線運作就經由: 147.15.3.12:23 到 168.15.0.50:3045,再轉送到 165.15.2.62:1458,最後再轉送到 165.15.2.30:4520。同樣的道理,上傳資料也是經由這條連線傳送。對外部網路而言,連線是經由 168.15.0.50 的位址通訊,外部網路無法知道內部網路的 IP 位址,如此便可達到內部網路主機的隱密性,因此,也稱之為『IP 偽裝』(IP Masquerade)。主機 C 連結到主機 K 的運作程序亦相同,不再另述。

圖 10-24 NAT 運作原理

當內部網路位址透過 NAT 轉換之後,內部網路位址有可能流露於外,一般為了分辨是合法位址或內部虛擬位址,都將私有位址的範圍設定在:(RFC 1918)

當外部路由器接收到一個目的位址為上述範圍內的封包,便將它拋棄不予轉送。