打印本文 打印本文 关闭窗口 关闭窗口
使用 netfilter/iptables 为 Linux(内核 2.4.x)配置防火墙
作者:武汉SEO闵涛  文章来源:敏韬网  点击数1953  更新时间:2009/4/22 20:46:04  文章录入:mintao  责任编辑:mintao
>通过用 -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该通用协议匹配用于检查某些特定协议。协议示例有 TCPUDPICMP、用逗号分隔的任何这三种协议的组合列表以及 ALL(用于所有协议)。ALL 是缺省匹配。可以使用 ! 符号,它表示不与该项匹配。
      示例:

      $ iptables -A INPUT -p TCP, UDP
      $ iptables -A INPUT -p ! ICMP

      在上述示例中,这两条命令都执行同一任务 — 它们指定所有 TCPUDP 信息包都将与该规则匹配。通过指定 ! ICMP,我们打算允许所有其它协议(在这种情况下是 TCPUDP),而将 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)
    我们已经知道,目标是由规则指定的操作,对与那些规则匹配的信息包执行这些操作。除了允许用户定义的目标之外,还有许多可用的目标选项。下面是常用的一些目标及其示例和说明:

    • ACCEPT当信息包与具有 ACCEPT 目标的规则完全匹配时,会被接受(允许它前往目的地),并且它将停止遍历链(虽然该信息包可能遍历另一个表中的其它链,并且有可能在那里被丢弃)。该目标被指定为 -j ACCEPT

    • DROP当信息包与具有 DROP 目标的规则完全匹配时,会阻塞该信息包,并且不对它做进一步处理。该目标被指定为 -j DROP

    • REJECT该目标的工作方式与 DROP 目标相同,但它比 DROP 好。和 DROP 不同,REJECT 不会在服务器和客户机上留下死套接字。另外,REJECT 将错误消息发回给信息包的发送方。该目标被指定为 -j REJECT
      示例:

      $ iptables -A FORWARD -p TCP --dport 22 -j REJECT

    • RETURN在规则中设置的 RETURN 目标让与该规则匹配的信息包停止遍历包含该规则的链。如果链是如 INPUT 之类的主链,则使用该链的缺省策略处理信息包。它被指定为 -jump RETURN。示例:

      $ iptables -A FORWARD -d 203.16.1.89 -jump RETURN

    还有许多用于建立高级规则的其它目标,如 LOGREDIRECTMARKMIRRORMASQUERADE 等。

    保存规则
    现在,您已经学习了如何建立基本的规则和链以及如何从信息包过滤表中添加或删除它们。但是,您应该记住:用上述方法所建立的规则会被保存到内核中,当重新引导系统时,会丢失这些规则。所以,如果您将没有错误的且有效的规则集添加到信息包过滤表,同时希望在重新引导之后再次使用这些规则,那么必须将该规则集保存在文件中。可以使用 iptables-save 命令来做到这一点:

    $ iptables-save > iptables-script

    现在,信息包过滤表中的所有规则都被保存在文件 iptables-script 中。无论何时再次引导系统,都可以使用 iptables-restore 命令将规则集从该脚本文件恢复到信息包过滤表,如下所示:

    $ iptables-restore iptables-script

    如果您愿意在每次引导系统时自动恢复该规则集,则可以将上面指定的这条命令放到任何一个初始化 shell 脚本中。

    netfilter/iptables 系统的优点
    netfilter/iptables 的最大优点是它可以配置有状态的防火墙,这是 ipfwadm 和 ipchains 等以前的工具都无法提供的一种重要功能。有状态的防火墙能够指定并记住为发送或接收信息包所建立的连接的状态。防火墙可以从信息包的连接跟踪状态获得该信息。在决定新的信息包过滤时,防火墙所使用的这些状态信息可以增加其效率和速度。这里有四种有效状态,名称分别为 ESTABLISHEDINVALIDNEWRELATED

    状态 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 联系。

    上一页  [1] [2] 

    打印本文 打印本文 关闭窗口 关闭窗口