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