命令(command) 上面这条命令中具有强制性的 command 部分是 iptables 命令的最重要部分。 它告诉 iptables 命令要做什么,例如,插入规则、将规则添加到链的末尾或删除规则。 以下是最常用的一些命令:
-A 或 --append :该命令将一条规则附加到链的末尾。 示例:
$ iptables -A INPUT -s 205.168.0.1 -j ACCEPT 该示例命令将一条规则附加到 INPUT 链的末尾,确定来自源地址 205.168.0.1 的信息包可以 ACCEPT 。
-D 或 --delete :通过用 -D 指定要匹配的规则或者指定规则在链中的位置编号,该命令从链中删除该规则。 下面的示例显示了这两种方法。 示例:
$ iptables -D INPUT --dport 80 -j DROP $ iptables -D OUTPUT 3 第一条命令从 INPUT 链删除规则,它指定 DROP 前往端口 80 的信息包。第二条命令只是从 OUTPUT 链删除编号为 3 的规则。
-P 或 --policy :该命令设置链的缺省目标,即策略。 所有与链中任何规则都不匹配的信息包都将被强制使用此链的策略。 示例:
$ iptables -P INPUT DROP 该命令将 INPUT 链的缺省目标指定为 DROP 。这意味着,将丢弃所有与 INPUT 链中任何规则都不匹配的信息包。
-N 或 --new-chain :用命令中所指定的名称创建一个新链。 示例:
$ iptables -N allowed-chain
-F 或 --flush :如果指定链名,该命令删除链中的所有规则, 如果未指定链名,该命令删除所有链中的所有规则。此参数用于快速清除。 示例:
$ iptables -F FORWARD $ iptables -F
-L 或 --list :列出指定链中的所有规则。 示例:
$ iptables -L allowed-chain
匹配(match) iptables 命令的可选 match 部分指定信息包与规则匹配所应具有的特征(如源和目的地地址、协议等)。 匹配分为两大类:通用匹配和特定于协议的匹配。这里,我将研究可用于采用任何协议的信息包的通用匹配。 下面是一些重要的且常用的通用匹配及其示例和说明:
-p 或 --protocol :该通用协议匹配用于检查某些特定协议。 协议示例有 TCP 、UDP 、ICMP 、用逗号分隔的任何这三种协议的组合列表以及 ALL (用于所有协议)。ALL 是缺省匹配。可以使用 ! 符号,它表示不与该项匹配。 示例:
$ iptables -A INPUT -p TCP, UDP $ iptables -A INPUT -p ! ICMP 在上述示例中,这两条命令都执行同一任务 — 它们指定所有 TCP 和 UDP 信息包都将与该规则匹配。 通过指定 ! ICMP ,我们打算允许所有其它协议(在这种情况下是 TCP 和 UDP ), 而将 ICMP 排除在外。
-s 或 --source :该源匹配用于根据信息包的源 IP 地址来与它们匹配。该匹配还允许对某一范围内的 IP 地址进行匹配,可以使用 ! 符号,表示不与该项匹配。缺省源匹配与所有 IP 地址匹配。 示例:
$ iptables -A OUTPUT -s 192.168.1.1 $ iptables -A OUTPUT -s 192.168.0.0/24 $ iptables -A OUTPUT -s ! 203.16.1.89 第二条命令指定该规则与所有来自 192.168.0.0 到 192.168.0.24 的 IP 地址范围的信息包匹配。第三条命令指定该规则将与 除来自源地址 203.16.1.89 外的任何信息包匹配。
-d 或 --destination :该目的地匹配用于根据信息包的目的地 IP 地址来与它们匹配。 该匹配还允许对某一范围内 IP 地址进行匹配,可以使用 ! 符号,表示不与该项匹配。 示例:
$ iptables -A INPUT -d 192.168.1.1 $ iptables -A INPUT -d 192.168.0.0/24 $ iptables -A OUTPUT -d ! 203.16.1.89
目标(target) 我们已经知道,目标是由规则指定的操作,对与那些规则匹配的信息包执行这些操作。 除了允许用户定义的目标之外,还有许多可用的目标选项。下面是常用的一些目标及其示例和说明:
还有许多用于建立高级规则的其它目标,如 LOG 、REDIRECT 、MARK 、MIRROR 和 MASQUERADE 等。
保存规则 现在,您已经学习了如何建立基本的规则和链以及如何从信息包过滤表中添加或删除它们。 但是,您应该记住:用上述方法所建立的规则会被保存到内核中,当重新引导系统时,会丢失这些规则。 所以,如果您将没有错误的且有效的规则集添加到信息包过滤表,同时希望在重新引导之后再次使用这些规则, 那么必须将该规则集保存在文件中。可以使用 iptables-save 命令来做到这一点:
$ iptables-save > iptables-script
现在,信息包过滤表中的所有规则都被保存在文件 iptables-script 中。无论何时再次引导系统, 都可以使用 iptables-restore 命令将规则集从该脚本文件恢复到信息包过滤表,如下所示:
$ iptables-restore iptables-script
如果您愿意在每次引导系统时自动恢复该规则集,则可以将上面指定的这条命令放到任何一个初始化 shell 脚本中。
netfilter/iptables 系统的优点 netfilter/iptables 的最大优点是它可以配置有状态的防火墙,这是 ipfwadm 和 ipchains 等以前的工具都无法提供的一种重要功能。有状态的防火墙能够指定并记住为发送或接收信息包所建立的连接的状态。防火墙可以从信息包的连接跟踪状态获得该信 息。 在决定新的信息包过滤时,防火墙所使用的这些状态信息可以增加其效率和速度。 这里有四种有效状态,名称分别为 ESTABLISHED 、INVALID 、NEW 和 RELATED 。
状态 ESTABLISHED 指出该信息包属于已建立的连接,该连接一直用于发送和接收信息包并且完全有效。INVALID 状态指出该信息包与任何已知的流或连接都不相关联,它可能包含错误的数据或头。 状态 NEW 意味着该信息包已经或将启动新的连接,或者它与尚未用于发送和接收信息包的连接相关联。 最后,RELATED 表示该信息包正在启动新连接,以及它与已建立的连接相关联。
netfilter/iptables 的另一个重要优点是,它使用户可以完全控制防火墙配置和信息包过滤。 您可以定制自己的规则来满足您的特定需求,从而只允许您想要的网络流量进入系统。
另外,netfilter/iptables 是免费的,这对于那些想要节省费用的人来说十分理想,它可以代替昂贵的防火墙解决方案。
结束语 最新的 Linux 内核 2.4.x 具有 netfilter/iptables 系统这种内置的 IP 信息包过滤工具,它使配置防火墙和信息包过滤变得便宜且方便。netfilter/iptables 系统使其用户可以完全控制防火墙配置和信息包过滤。 它允许为防火墙建立可定制化的规则来控制信息包过滤。它还允许配置有状态的防火墙。
参考资料
- 从 Netfilter 网站获取有关 netfilter/iptables 系统的最新信息并下载 iptables 用户空间工具。
- 请访问 Linux 2.4 Packet Filtering HOWTO Web 页面,以获取关于 netfilter/iptables 的快速参考。
- 请参考这篇有关 netfilter/iptables 的详细教程(Iptables Tutorial 1.1.9)。
- 请从 netfilter/iptables FAQ 获取任何有关 netfilter/iptables 问题的答案。
关于作者 Mugdha Vairagade 是一名开发人员,有在多个组织中工作的经验。在无线应用程序开发方面,她拥有相当丰富的经验, 而且专长于组件体系结构方面的工作。她对开放源码(Open Source)项目特别感兴趣,并且参与了 Linux Documentation Project、Forum Nokia(WAP 开发人员论坛)和 W3C 的工作。她还编写了有关 Linux 和 XML 技术的技术性文章。 可以通过 vmugdha@indiatimes.com 与 Mugdha 联系。 |