防火牆(Firewall)是在一個可信的網路和不可信的網路之間建立安全屏障的軟體或硬體產品。Linux作業系統核心具有包過濾能力,系統管理員通過管理工具設定一組規則即可建立一個基於Linux的防火牆,用這組規則過濾被主機接收、發送的包或主機從一個網卡轉寄到另一個網卡的包,無須花費額外資金購買專門的防火牆產品,比較適用於某些中小企業或部門級使用者。
一、防火牆的類型和設計策略
在構造防火牆時,常採用2種方式,包過濾和應用代理服務。包過濾是指建立包過濾規則,根據這些規則及IP包頭的資訊,在網路層判定允許或拒絕包的通過。如允許或禁止FTP的使用,但不能禁止FTP特定的功能(例如Get和Put的使用)。應用代理服務是由位於內部網和外部網之間的Proxy 伺服器完成的,它工作在應用程式層,代理使用者進、出網的各種服務要求,如FTP和Telenet等。
目前,防火牆一般採用雙宿主機(Dual-homed Firewall)、屏蔽主機(Screened Host Firewall)和屏蔽子網(Screened Subnet Firewall)等結構。雙宿主機結構是指承擔代理服務任務的電腦至少有2個網路介面串連到內部網和外部網之間。屏蔽主機結構是指承擔代理服務任務的電腦僅僅與內部網的主機相連。屏蔽子網結構是把額外的安全層添加到屏蔽主機的結構中,即添加了周邊網路,進一步把內部網和外部網隔開。
防火牆規則用來定義哪些資料包或服務允許/拒絕通過,主要有2種策略。一種是先允許任何接入,然後指明拒絕的項; 另一種是先拒絕任何接入,然後指明允許的項。一般地,我們會採用第2種策略。因為從邏輯的觀點看,在防火牆中指定一個較小的規則列表允許通過防火牆,比指定一個較大的列表不允許通過防火牆更容易實現。從Internet的發展來看,新的協議和服務不斷出現,在允許這些協議和服務通過防火牆之前,有時間審查安全性漏洞。
二、基於Linux作業系統防火牆的實現
基於Linux作業系統的防火牆是利用其核心具有的包過濾能力建立的包過濾防火牆和包過濾與代理服務組成的複合型防火牆。下面,讓我們來看看怎樣配置一個雙宿主機的基於Linux的防火牆。
由於Linux的核心各有不同,提供的包過濾的設定辦法也不一樣。IpFwadm是基於 Unix 中的ipfw,它只適用於Linux2.0.36以前的核心;對於Linux2.2以後的版本,使用的是Ipchains。IpFwadm和Ipchains的工作方式很相似。用它們配置的4個鏈中,有3個在Linux核心啟動時進行定義,分別是:進入鏈(Input Chains)、外出鏈(Output Chains )和轉寄鏈(Forward Chains),另外還有一個使用者自訂的鏈(User Defined Chains)。進入鏈定義了流入包的過濾規則,外出鏈定義了流出包的過濾規則,轉寄鏈定義了轉寄包的過濾規則。這些鏈決定怎樣處理進入和外出的IP包,即當一個包從網卡上進來的時候,核心用進入鏈的規則決定了這個包的流向; 如果允許通過,核心決定這個包下一步發往何處,如果是發往另一台機器,核心用轉寄鏈的規則決定了這個包的流向; 當一個包發送出去之前,核心用外出鏈的規則決定了這個包的流向。某個特定的鏈中的每條規則都是用來判定IP包的,如果這個包與第一條規則不匹配,則接著檢查下一條規則,當找到一條匹配的規則後,規則指定包的目標,目標可能是使用者定義的鏈或者是Accept、Deny、Reject、Return、Masq和Redirect等。