眾所周知,Linux可以作為一個優秀的防火牆軟件使用。無論是結合Web或FTP網站使用,還是作為內部LAN的前端服務器,Linux都能夠為構造滿足用戶特殊需求的防火牆提供必需的工具。 ipchains內建於Linux內核,它是一個在系統之間拒絕、接受、路由數據包的基本防火牆工具。由於有了ipchains,再加上Linux操作系統固有的低成本優勢,對於LAN或者連接Internet的企業網防火牆來說,Linux無疑是一種價廉物美的選擇。 防火牆類型 Linux內核定義了三種類型的防火牆通信過濾,把不同的規則應用到各種通信方式就形成了功能極其廣泛的防火牆。三種基本類型如下: 輸入防火牆(Input Firewall):所有傳入的數據在接收之前都經過輸入防火牆規則檢查。 輸出防火牆(Output Firewall):所有傳出的數據在發送之前都經過輸出防火牆規則檢查。 轉發防火牆(Forwarding Firewall):所有轉發的數據在發送之前都經過轉發防火牆規則檢查。 用戶可以自己定義規則(或稱為“鏈”,即chains),其作用相當於對三種基本防火牆規則的擴展。 防火牆策略 所有這三種規則類型以及用戶定義的附加規則都有默認的策略,默認策略控制系統如何處理到達防火牆的特殊數據包。用戶既可以對任何規則使用標准策略,也可以轉入另一個用戶定義的規則進一步處理。這些標准的策略為: ACCEPT(接受):允許數據包通過防火牆。 REJECT(駁回):丟棄數據包,並發送一個ICMP錯誤消息給該數據包的發送者。這裡的ICMP是指Internet Control Message Protocol,即Internet控制消息協議。 DENY(拒絕):直接丟棄數據包,不向發送者提供任何錯誤信息。 MASQ(偽裝):偽裝(Masquerade)數據包,使其看起來就像來自本地系統一樣。當Linux用作路由器時這種策略尤其有用。 REDIRECT(轉發):不管數據包的目的地是哪裡,把它轉發到本地系統的指定端口。 RETURN(返回):該策略只對用戶定義規則有效,它是指直接返回調用鏈。如果在某種內核鏈上應用該策略,意味著脫離該鏈並用該鏈的默認策略取代。 構造規則鏈 ipchains構造規則鏈的方法相當簡單,而且非常靈活。對於任何一個鏈,用戶可以指定一系列選項,包括: 協議類型(TCP,UDP,ICMP或者ALL)。 數據包源地址(格式為:address[/mask] [port[:port]])。 數據包目標地址(格式與源地址相同)。 目標端口號(格式為:port[:port]])。 ICMP包類型(ICMP消息的種類有很多,可以將規則指定到某種特定的類型)。 規則所應用的接口(例如eth0)。 還有其他一些選項,通過它們可以指定不同類型TCP包的優先級。例如,賦予FTP包比IRC(Internet Relay Chat)包更高的優先級。又如,為某些鏈提供日志記錄;設置更加詳細的選項,如包類型、大小等等。 鑒於ipchains豐富的功能和選項的繁多,構建防火牆可能很簡單,也可能異常復雜,這與具體的需求有關。簡單的防火牆可以只由4到5個命令組成;復雜的防火牆可以由數百個ipchanins命令組成,鎖定一切,只在用戶需要的時候打開特定的服務和端口。 構建好的防火牆是一項非常復雜的工作,我們強烈建議讀者參閱www.linux-firewall-tools.com/linux/firewall的Linux Firewall Design Toolkit。它提供了一個簡潔而詳盡的防火牆在線設計界面,即使不熟悉如何使用ipchains也可用它來生成直接可以使用的防火牆腳本。 防火牆腳本實例 下面是一個簡單的防火牆腳本。 ipchains -A input -i eth0 -s 192.168.0.0/16 -j REJECT ipchains -A input -d 192.168.1.5 25 -j ACCEPT ipchains -A input -d 192.168.1.5.110 -j ACCEPT ipchains -A input -d 192.168.0.0/16 -syn -j REJECT 該腳本把一些規則添加到輸入規則鏈。第一個規則的意思是,任何到達外部接口的數據包,如果其源地址裝扮成來自內部網絡(192.168),則丟棄它,這是因為有人試圖進行欺騙。接下來兩個規則的意思是,接收所有目標地址為192.168.1.5(這是一個郵件服務器,在端口25提供SMTP服務,在端口110提供POP3服務)。最後一個規則的意思是,拒絕所有其他設置了SYN位的傳入TCP連接(設置SYN位表示試圖初始化一個連接)。 結束語 無論是為Linux服務器提供防火牆,還是為內部LAN提供防火牆/路由器,ipchains都能夠提供強大的過濾能力。一個配置完善的防火牆所帶來的安全和保護是無價的。Linux具有任何希望構造防火牆的人所需要的靈活性和實力,而且它還獨具成本低廉的優點。