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,假如您目前正使用它们其中之一。

制定永久性规则

您目前的防火墙设定是储存於核心里面的,也正因如此,设定会在系统重启後丢失。iptables-save 和 iptables-restore * 的撰写目前已经被列入 TODO 列表中了。我保证当它们问世的时候,肯定非常棒。

(* 译者注:在 ipchains 工具中,可以使用 ipchains-save 与 ipchains-restore 来把当前的防火墙设定储存起来,以及将之还原。如果读者没使用过 ipchains 那两个功能的话,或许不知道作者在说什麽。)

目前来说,就把设定规则所需的那些命令写进一个初始命令稿(script)中吧。要确定的是,假如有其中一个命令失败的时候,您能提供一些智能的动作反应 (通常如 ' exec /sbin/sulogin' )。


Next Previous Contents