隨著網路日漸普及,網路安全相關議題也越來越受重視,防火牆作為網路安全的第一道防線,其重要性不言可喻。如果將系統比喻成大樓,防火牆就如同大門的警衛過濾來往的訪客,以避免引狼入室。一旦警衛功能失效,任何惡意的訪客就能長驅直入。
防火牆是建立在封包來往的閘道器(Gateway)上,過濾來往的惡意封包,以避免內部網域的主機遭受到惡意的攻擊。雖然目前市面上相關產品相當普及,價格也不昂貴,但有時想要做些客製化的功能,例如想要記錄暴力攻擊的來源或分析內部網域主機對外連線的紀錄,就不是那麼的方便。
有鑑於此,本文將以開源碼社群中最有名的防火牆軟體netfilter來建立L4防火牆。並以ulogd軟體利用資料庫來儲存相關的封包資訊,以利後續網路行為分析。本解決方案期望能達到下列幾項功能:
1. 支援基本的IP分享器功能(以SNAT實作)。
2. 支援記錄由外部(Internet)來的洪水(Flooding)攻擊的惡意IP。
3. 支援阻擋DoS(Denial of Service)功能。
4. 支援記錄內部網域主機對外連線的相關紀錄。
什麼是L4防火牆
netfilter是Linux系統中最有名的L4防火牆軟體。但其實netfilter加上相關的外掛模組,也可以實作L7的防火牆功能,但這不在此次探討的議題內。而L4(Level 4)指的是OSI模型中的第四層。
1977年,國際標準組織開始發展一套共通標準化的通訊協定標準,以利各廠商在發展網路相關產品時能有相關的依據,並於1984年時頒布OSI(Open System Interconnec tion)模型,將網路通訊協定區分為7層,各層各司其職,如下圖示,由實體層至應用層,分屬1至7層。
|
▲OSI模型。 |
由上得知,L4位於傳輸層,而在此層中防火牆僅將封包拆解至傳輸層(Transport Layer),在傳輸層中的封包資訊僅涵蓋MAC、IP、PORT等相關資訊。也因此,L4防火牆僅可利用IP等相關資訊如IP、埠、MAC等來進行相關的過濾工作,而無法進行L7(應用層)資料的過濾,例如限制企業內部的主機不能瀏覽內含某些關鍵字的網頁(亦即「內容過濾」)。而防火牆依其工作原理可分成封包篩選式(Packet Filtering)、動態封包篩選(Stateful Inspec tion Filtering)應用層閘道式(Application-Level Gateway)等三種防火牆,以下分別加以說明。
封包篩選式防火牆
封包篩選式防火牆主要以IP封包層次的篩選方式來過濾進出網路的資料,使用IP封包層次的篩選,可以概括許多不同通訊協定的網路封包,封包篩選式防火牆主要是利用解析IP封包表頭的方式來過濾封包。例如可利用IP封包表頭中的來源IP、來源埠、目的IP、目的埠及通訊協定等資訊來過濾封包,因此封包篩選式防火牆能夠完成下列的工作:
● 可允許某些IP(包含來源及目的IP)連線或不允許某些IP的連線,例如允許某些來源IP可連線至企業所提供的網路服務伺服器,或限制內部網域的主機連線至外部某些服務主機。
● 僅允許某些MAC(包含來源MAC和目的MAC)的網卡連線,或不允許某些MAC的網卡連線。
● 建立NAT(Network Address Translation,網路地址轉換),如SNAT(Source Network Address Translation,來源網路位址轉換)、DNAT(Destination Network Address Translation,目的位址轉換)及PNAT(Prefix based NAT),來完成多人共用一個公共IP上網或虛擬伺服器功能或埠轉換的功能。
由於IP位址容易被更改,一般若想利用封包篩選式防火牆來控管連線,建議以MAC控管取代IP控管來控制連線。MAC可視為網卡的身分證,網路廠商會在每一張出廠的網路卡烙上全球唯一的識別符號(相較於IP資訊,MAC較不易偽造)。在Linux系統下,可使用「ifconfig」命令來取得網卡的MAC資訊。
|
▲使用ifconfig命令來取得網卡的MAC資訊。 |
以學校宿網管理為例,常利用鎖MAC的方式來管理學生使用網路的情形,在開學時,學生可能須要至計網中心註冊自己電腦MAC的資訊,一旦學生利用網卡的MAC資訊註冊成功後,即可使用該網卡上網。如果中途學生換電腦或換掉網路卡,即無法上網(因為與原來註冊網卡的MAC資訊不一致),藉此來管制網路的使用情況。一般家用的無線基地台(Access Point)也會提供相似的功能,除了原先的帳號及密碼限制外,也可限制某些IP或MAC來連線,如此可預防因無線網路溢波問題,而造成其他使用者入侵的可能性。
一般而言,過濾封包的規則主要分為兩種。一種是允許符合清單上特定規則的封包通過,其餘的一概禁止穿越防火牆(原則禁止,例外放行);另一種為較寬鬆的規則,只要封包不符合任何一項「否定規則」(符合此種規則的封包將被阻擋在防火牆外),其餘的封包即予以放行(原則放行,例外禁止)。
接著解釋何謂NAT、SNAT、DNAT及其發展的源由。
NAT(Network Address Translation)是一種IP封包通過防火牆時改寫IP表頭資訊的技術。改寫封包的來源位址資訊,稱為SNAT(Source Network Address Translate),改寫封包的目的位址資訊則稱為DNAT,而改寫封包埠(包含來源及目的)資訊稱之為PNAT。
由於IP的資源有限,如果每個上網的使用者均須配發一個真實IP,那麼資源將不敷使用。為了解決IP位址不夠的問題。而有了SNAT的想法。SNAT是IETF(Internet Engineering Task Force,網際網路工程任務組)的一種標準,允許內部的機器(使用私有IP的主機)能共用使用一個公共的IP位址上網,藉以節省寶貴的IP資源。這裡所指的私有IP,意指如下的IP位址:
這些網段的IP是不允許在公共的網路上出現,而SNAT主要功能即是置換這些IP成一個公共IP,而能正常地上網。讀者家裡所使用的IP分享器即是使用相同的原理,當讀者申請家用寬頻服務時,ISP業者(如HiNet)僅會在使用者上網時,利用撥接技術配發一個公共的IP給使用者。
而後,IP分享器再利用此公共IP實作SNAT功能,讓家裡的其他電腦可利用此IP上網。可利用兩台(IP設為私有IP)電腦分別透過IP分享器連線至「http://ipid.shat.net/」網站取得目前上網的真實IP。此時,兩台電腦所取到的真實IP均會相同,這是因為SNAT已將內部電腦的IP轉換成外部可使用的公共IP。
當內部主機(使用私有IP)欲連上網路時,可利用SNAT置換封包中的來源位址成公共IP,而使得封包能連上公共網路。如此就能讓位於內部網域中的多台電腦共用一個公共IP連上網際網路,以減少公共IP的使用,相關流程如下圖所示:
1. 當內部網域主機(假設為192.168.2.1)欲透過防火牆的SNAT機制連線到example.com,從內部網域到防火牆時封包內容,來源位址(以下稱為SIP)為192.168.2.1,目的IP(以下稱為DIP)為example.com。
2. 封包到達防火牆時,防火牆會針對此連線建立SNAT對應表,並記錄此次的連線記錄(如來源IP,來源埠,目的IP及目的埠),並將封包的來源位址改為防火牆對外的真實IP(59.125.130.39),然後送到Example.com主機。
3. Example.com回覆封包給過防火牆(59.125.130.39)。
4. 此時防火牆會比對SNAT對應表,找出連線到example.com的紀錄。
5. 將封包的目的IP改為從SNAT對應表上比對到的IP(在此為192.168.2.1)。
6. Example.com回覆的封包正確地傳遞到192.168.2.1,雙方建立正常連線。
使用SNAT架構,可使內部的電腦僅利用單一的公共IP即可正常連線到Internet上,但外部Internet上的電腦無法直接存取內部電腦(對位於Internet的電腦而言,它通訊的對象是NAT主機如IP分享器,而非內部的主機)。
這除了解決了IP位址不足的問題外,以資安的角度來看,更大大加強了內部電腦的安全,因為對外部使用者而言,他們通訊的對象是防火牆,而非實際的內部主機。
在本解決方案中,筆者將會使用MASQUERADE來實作SNAT功能,MASQUERADE與SNAT最大的差別,在於MASQUERADE無須知道公共IP的資訊,即可使用SNAT主機當成來源IP。此功能對於使用PPPoE撥接用戶特別有用,因為每次取得的公共IP均不同,所以無法使用SNAT直接設定公共IP。(更多精彩文章詳見網管人第61期﹚