当前位置:操作系统 > Unix/Linux >>

使用iptables实现数据包过滤

我本来打算写一些iptables 的使用的文章,但是,经过阅读Netfilter 邮件列表以及在其它论坛上的用户问题以后,我决定在编译内核和安装iptables的基础知识上多花一点时间。虽然大多对iptables的使用感兴趣的人可能已经是LINUX的高手了,但是仍然有相当数量的LINUX新手会从这些入门的文章中获得极大的帮助。

  在下面的文章中,将对在LINUX2.4内核中取代了ipchains的iptables包过滤技术进行讨论。我的计划是,第一篇的着重讨论介绍如何启动和运行iptables的相关基础知识,随后的一篇将对使用iptables的细节问题上进行深入探讨。

  什么是iptables?

  Iptables由两个子系统组成:内核模块和用户接口应用程序。对iptables的支持必需被编译进LINUX内核或者编译成一个可装卸的模块。然后,可以为不同的任务(如伪装、端口转发、包过滤等)选择安装其它一些组件。同ipchains一样,您可以根据在编译到内核和可装载模块之间进行选择。

  它能做什么?

  Iptables模块能够对输入、输出的IP包进行过滤和管理。Iptables模块是LINUX2.4内核中的Netfilter框架的一个组成部分。在我看到的某些有关Iptables的参考文献中的叙述有些模糊,因为那些文章将Netfilter和iptables看成是一个东西。事实上,我们可以将Netfilter视为网络协议堆栈中可以让其它模块操作网络数据包的一系列"钩子",在数据包通过协议堆栈的某些特定的点上, Netfilter框架允许一个模块转发或丢弃数据包、通过某种方式改变数据包、在用户空间(非内核模式)对包进行排队,当然也可以根本不去干涉它。

  大多数情况下,在路由器或防火墙计算机中用iptables进行网络地址转换(Network Address Translation-NAT,也称为伪装Masquerading)。通常,您不应在普通的主机或工作站上使用iptables。

  注意,iptables和Linux 2.4.x内核系列并没有被广泛采用,这些技术可能没有达到最新的2.2.x内核和ipchains的组合那样成熟。您可能不想冒险去用2.4.x内核和 iptables去架设您的防火墙或路由器。但是,现在是熟悉这些新工具的绝佳时机。

  如何安装iptables

  要在您的计算机上安装iptables,您必需保证您的计算机上正在运行2.4.x内核的LINUX。从技术角度讲,iptables模块能够在2.3.x系列的内核上运行,但是,我不建议在关键任务中使用不成熟的中间开发版本来完成关键工作。如果您正在运行2.2.x内核,现在还没有任何端口能够使用(虽然iptables 的设计者宣称在2.2.x内核上不是真的无法实现)。

  如果您一直在使用ipchains甚至ipfwadm,并且已经对2.4系列内核的特性有了一定程度的了解,为什么不试着去掌握 iptables呢?有很多模块可以保证您在准备好转换到2.4.x内核之前仍然使用原有的系统配置。当然,必需记住这个忠告:您可以选择 iptables或者ipchains,也可以选择ipfwadm。但是,同一个内核中只能拥有三者中的一个,如果您加入了iptables的内核支持,就不能再支持另外两个模块中的任意一个。

  如果您还没有(但是希望尝试)运行2.4.x内核,您可以从http://Kernel.org下载。

  您还需要用户空间的程序iptables,它可以从Netfilter主页下载。Iptables的源代码已经用bzip2压缩过了,但是这个工具在很多LINUX的发布中没有被缺省安装。

  编译内核

  如果您以前从来没有编译过Linux内核,请不要担心,因为它实际上没有您想象的那样难。解压缩内核的源代码后,README文件会讲述所有您必需知道的事情。我通常将内核源代码在/usr/src目录下解压缩(当然,这个目录根据不同人的喜好而不同)。解压缩后的内核源代码目录将是 /usr/src/linux。

  您还需要下列程序的足够新的版本:

  * GNU C 2.91.66

  * GNU Make 3.77

  * binutils 2.9.1.0.25

  * util-linux 2.10o

  * modutils 2.4.2

  * e2fsprogs 1.19

  * reiserfsprogs 3.x.0b

  * pcmcia-cs 3.1.21

  * PPP 2.4.0

  * isdn4k-utils 3.1pre1

  其中的一些程序(象isdn4k、pcmcia-cs和reiserfsprogs)仅仅在您需要这些组件的功能时才是必需的。例如,服务器根本不需要对PCMCIA的支持。如果您根本不知道如何检查这些程序的最新版本,您可以在 /usr/src/linux/Documentation/Changes文件中获得这些信息。

  如果您需要升级上述的某些程序包,您可以去寻找对应您的LINUX发布的程序包的最新版本。

  在执行下一步工作之前,一定要确保您得到了老版本LINUX内核内核的备份和在LILO(或者任何其它老版本内核的引导装载器)中的一个入口。如果由于某种原因,您编译的内核不能引导,您会需要这些备份。

  确信您已经获得所有的所需组件之后,您就已经为编译新的内核准备就绪了。将您的当前目录转换到/usr/src/linux或者是您存放内核源代码的目录下(当然,为了编译新的内核,您必需以root身份登录),遵照README文件的指导进行安装,直到make config步骤。

  当编译内核时,您可以选择使用make config、make menuconfig或make xconfig中的任意一个。我的建议是使用make menuconfig或者make xconfig,因为它们允许您对需要的内核选项进行更快的选取。

  由于各个系统是不同的,我不知道您将为您的系统选择哪些具体的选项,但是一定要确保您选择了对您系统上的SCSI设备、网卡和系统上配置的其它设备的支持。

  为了提供对Netfilter和iptable的支持,选择Networking Options菜单选项,然后选择Network packet filtering (replaces ipchains)。您可以在将这项功能作为内核的一部分或者编译成一个模块之间进行选择。我通常将Netfilter和IP tables支持编译成内核的一本分,而将不同的iptables组件作为模块进行编译。

  选择Network packet filtering replaces ipchains.

  下一步,在菜单中选择IP: Netfilter Configuration。

  然后,您会看到完整的Netfilter Configuration菜单。使能IP tables support并且选择您希望使用的iptables子系统。如果您不能确定该如何做,前进到下一步,将它们作为模块编译就是了。您可能想在以后使用它们,将它们作为模块来处理并不会增加内核的大小和系统资源的占用。

  IP: Netfilter Configuration

  完成内核安装的配置之后,保存配置并运行make bzImage, make modules和make modules_install。再次提醒您一定已经保存了旧内核的一个备份,以防一些不可预知的错误的发生。现在,重新启动系统,待系统启动后运行uname -a。您可能会看到类似于这样的代码:

  Linux endless 2.4.2 #3 SMP Wed Mar 7 10:58:04 MST 2001 i686 unknown

  最后,该是编译用户空间程序iptables的时候了。您仍然需要以root用户身份登录。将源代码解压缩到iptables目录,然后cd到iptables-1.2/目录。运行make和make install,现在,您需要静下心来"欣赏"硬盘隆隆地歌唱了。注意,安装程序会将可执行文件拷贝到/usr/local/sbin目录,虽然它不是您root用户的缺省目录。

  如果一切都很顺利,我们就已经在内核中成功地安装了对iptables和Netfilter的支持。下个月,我将 有组织地讨论装载其中一些模块的方法,并且创建一些您可能会在设置防火墙应用时涉及到的iptables规则。

  可供参考的资源:

  The Netfilter Project HomePage

  http://netfilter.kernelnotes.org/

  Linux Networking-concepts HOWTO

  http://netfilter.kernelnotes.org/unreliable-guides/networking-concepts-HOWTO/

  原文作者 Joe "Zonker" Brockmeier

  原文出处:http://www.unixreview.com/columns/zonker/zonker0301.shtml 本文来自:http://www.xiaoyaxiao.com/2620.html
发表您的高见!
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,