Next Previous Contents

3. 好了﹐什麼是封包過濾(Packer Filter)呢﹖

封包過濾就是用一個軟體查看所流經封包之表頭(header) ﹐由此決定整個封包的命運。它或許會決定 丟棄(DROP) 這個封包(例如﹐忽略它就如根本沒收到它一樣)﹐或是接收(ACCEPT)這個封包(例如﹐讓這個封包通過)﹐或是其它更複雜的動作。

在 Linux 之下﹐封包過濾功能是內建於核心之內(做為一個核心模組﹐或者直接內建)﹐同時還有一些技巧我們可以運用於封包之上的﹐不過最慣用的依然是查看表頭以決定封包的命運。

3.1 我為什麼要封包過濾﹖

簡而言之﹕控制、保安、警戒。

Control:

當您用您的 Linux 主機將您的內部網路連接至其它網路(比方說﹐ineternet)的時候﹐您有機會允許特定類型的交通﹐而禁止其它的。 例如﹐一個封包的表頭會包含封包的目的地地址﹐所以您可以防止封包流向 部網路的某一部份。再如﹐我用 Netscape 連線至 Dilbert archives﹐那網頁上有一個來自 doubleclick.net 的廣告﹐這樣 Netscape 會浪費我的時間去下載它們。只要讓封包過濾機制不允許任何來自doubleclick.net 的封包﹐我們就可以解決這個問題(當然﹐有更好的方法來做這件事情啦﹐請參考 Junkbuster)。

Security:

當您的 Linux 主機是您井然有序的內部網路和 面那個混沌無比的 internet 之間的唯一通道﹐而您知道可以限制哪些東西 能進入您的門戶﹐誠是不錯之舉吧。例如﹐您或許會放行任何從內部網路出去的東西﹐但又擔心來自 面的惡名昭章的‘Ping of Death’。又如﹐您或許並不希望別人從 面 telnet 上您的 Linux 主機﹐盡管全部的帳號都有密碼保護。或許﹐您還想(正如大部份人一樣)在 internet 上當看客而不願當伺服器(也可能您是願意的) ﹐最簡單莫如用封包過濾來拒絕任何意欲連線的封包﹐不讓任何人連進來。

Watchfulness:

有時候﹐一台設定差劣的機器會從本地網路向 面嘔送封包。而好消息是您可以讓封包過濾來告訴您是否有變態的事情發生。您或許會對之採取行動﹐又或許早已見慣不怪了。

3.2 如何在 Linux 下過濾封包﹖

Linux 的核心自從 1.1 版就已經有封包過濾功能。第一代是 1994  由 Alan Cox 基於 BSD 的 ipfw 移植過來的﹐後來在 Linux 2.0 版本再由 Jos Vos 加強﹐利用 ' ipfwadm ' 這隻使用者空間(userspace *)工具來控制核心的過濾規則。在 1998   中﹐我在 Micahel Neuling 的大力幫助下﹐投注了相當的精力在 Linux 核心 2.2 上面﹐推出了 ' ipchains ' 這隻工具。終於﹐Linux 核心 2.4 的第四代工具 ' iptables ' 連同其它核心改寫也在 1999   中進行開發了。這就是目前這個 iptables 的 HOWTO 文件所致力之所在。

(* 譯者註﹕“使用者空間”通常是用來區別系統記憶體的使用範圍﹐主要類型分為核心空間和使用者空間。原作者可能以為大家都是程式高手﹐故會用如此專門術語。然對一般讀者來說﹐理解上或許有困難﹐故此多說兩句。在往後的閱讀中也請留意。)

您需要一個核心有 netfilter 建構於其中﹕netfilter 是 Linux 核心中一個通用架構﹐可以讓其它東西(例如 iptables 模組) 插入(plug into)。換句話說﹐您需要核心 2.3.15 或更新的版本﹐同時在核心編譯時以 ' Y ' 回答 CONFIG_NETFILTER 這個選項。

iptables 這隻工具會和核心對講並告訴它什麼封包要過濾。除非您是一個程式人員﹐或異想天開﹐那您就是用它來控制封包怎樣過濾的了。

iptables

這隻 iptables 工具可以插入或移除核心封包過濾表格(packet filtering table) 中的一些規則(rules)。也就是說﹐無論您設定了什麼﹐要是重新啟動(reboot)系統的話﹐就會全部丟失﹔請參閱 制定永久性規則(Making Rules Permanent)﹐ 看看如何確保設定在下次 Linux 啟動後可以回存。

iptables 是用來取代 ipfwadmipchains 的﹕請參閱 使用 ipchains 和 ipfwadm (Using ipchains and ipfwadm)﹐ 看看如何無痛的避免使用 iptables﹐假如您目前正使用它們其中之一。


Next Previous Contents