IPTables

翻译自Fedora 18文档Security Guide中的IPTables一节。

目录

1 前言
2 数据包过滤
3 IPTables命令的选项
3.1 IPTables命令选项的结构
3.2 命令选项
3.3 IPTables参数选项
3.4 IPTables匹配选项
3.4.1 TCP协议
3.4.2 UDP协议
3.4.3 ICMP协议
3.4.4 额外的匹配选项模块
3.5 目标选项
3.6 列表选项
4 保存IPTables规则
5 IPTables控制脚本
5.1 IPTables控制脚本的配置文件
6 IPTables和IPv6
7 其他资源
7.1 已安装的IPTables文档
7.2 有用的IPTables网站

1 前言

Fedora中包含高级网络数据包过滤(packet filtering,对网络数据包进入、通过、离开内核网络栈进行控制的过程)工具。2.4版以前的内核使用ipchains过滤数据包,过滤过程中的每一步都会有规则列表应用到数据包上。2.4版本内核引入了iptables(也被称作netfilter),它和ipchains相似,但是极大地扩充了网络数据包过滤的范围及对数据包过滤的控制能力。

本章以数据包过滤的基础知识为重心,讲解了iptables命令的不同选项,还讲解了如何让数据包过滤规则在重启后也不会消失。

查看7 附加资源,获取创建iptables规则的说明和根据这些规则设置防火墙的说明。

重要事项:2.4及2.4以后内核默认的防火墙机制是iptables。但如果ipchains已经在运行,则iptables无法使用。如果在系统启动时ipchains就运行了,内核会无法启动iptables并发出一条错误信息。但这些错误信息不会影响ipchains的使用。

2 数据包过滤

Linux内核使用Netfilter过滤数据包,有些数据包被接收,有些数据包通过系统传递到它处,还有些数据包被阻止。Netfilter内置于Linux内核中,它有三个内置的表(或称为规则列表):

  • filter - 处理网络数据包的默认表。
  • nat - 用于修改创建一个新连接的数据包,同时也用于网络地址转换(NAT,Network Address Translation)。
  • mangle - 用于修改特殊类型的数据包。

每个表都有一组内置的链条(chain),对应于netfilter对数据包的处理动作。

filter表的内置链条:

  • INPUT - 应用于目标地址是当前主机的网络数据包
  • OUTPUT - 应用于当前主机生成的网络数据包
  • FORWARD - 应用于路由通过当前主机的数据包

nat表的内置链条:

  • PREROUTING - 修改网络数据包(在它们到达时)
  • OUTPUT - 修改当前主机生成的网络数据包(在它们发送出去之前)
  • POSTROUTING - 修改网络数据包(在它们发送出去之前)

mangle表的内置链条:

  • INPUT - 修改目标地址是当前主机的数据包
  • OUTPUT - 修改当前主机生成的网络数据包(在它们发送出去之前)
  • FORWARD - 修改路由通过当前主机的数据包
  • PREROUTING - 修改进入当前主机的数据包(在它们被路由之前)
  • POSTROUTING - 修改网络数据包(在它们发送出去之前)

Linux系统接收到或发送出的每个数据包都至少受到一个表的约束。不过,在出现于链条末端之前,一个数据包也可以被每个表的多个规则约束。这些规则的结构和目的可以变化多端,但它们通常试图识别来自于(或发送至)特定的IP地址的,或一系列地址的,或使用特定的协议的,或使用特定网络服务的数据包。

注意:防火墙规则默认存储在/etc/sysconfig/iptables或/etc/sysconfig/ip6tables文件中。Linux系统启动时,iptables服务先于任何DNS相关服务启动。这意味着防火墙规则只能使用数字形式的IP地址(比如,192.168.0.1),使用域名(比如,host.example.com)会产生错误。

无论它们的目的地是哪里,当数据包匹配某表格的某个特定规则时,一个目标(target)或行为就会作用于它们。如果规则为匹配的数据包指定一个ACCEPT目标,数据包会忽略掉其他规则的检查,被允许继续传递至它的目的地。如果一个规则指定了DROP目标,数据包会被禁止访问系统,同时不会向发送此数据包的主机反馈信息。如果一个规则指定了QUEUE目标,数据包会传递给用户空间(user-space)。如果一个规则指定了可选的REJECT目标,数据包会被丢弃,但会向此数据包的发送方发一个报错数据包。

每个链条的ACCEPT、DROP、REJECT或QUEUE都有一个默认的策略。如果链条中的规则都没有应用在数据包上,那么会根据默认的策略处理它。

iptables命令用来设置这些表,如果需要的话,还可用来创建新表。

3 IPTables命令的选项

过滤数据包的规则是使用iptables命令创建的。数据包的下述特性常被用作评判标准:

  • 数据包类型(Packet Type) - 指定命令过滤的数据包类型。
  • 数据包源地址/目的地址(Packet Source/Destination) - 根据数据包的源地址或目的地址指指定命令过滤那些数据包。
  • 目标(Target) - 指定对符合上述评判标准的数据包做出何种动作。

参考3.4 IPTables匹配选项3.5 目标选项获取涉及上述数据包特性的命令选项的详细信息。

为了使规则有效,特定iptables规则使用的选项必须依据规则的总体目的和条件在逻辑上进行分组。这一节的剩余部分解释了iptables命令的常用选项。

3.1 IPTables命令选项的结构

许多iptables命令都具有下述结构:

iptables [-t <table-name>] <command> <chain-name> \ <parameter-1> <option-1> \ <parameter-n> <option-n>

<table-name> - 表名称。指出规则应用于哪个表。如果省略,会使用filter表。

<command> - 命令。指出要进行何种操作,例如附加或删除一个规则。

<chain-name> - 链条名。指出需要编辑、创建或删除的链条。

<parameter>-<option>对 - 参数和与之相关的选项,指出对匹配规则的数据包如何处理。

依据其目的,不同iptables命令的长度和复杂度可存在极大的不同。

例如从链条中删除一个规则的命令可以非常短:

iptables -D <chain-name> <line-number>

与之相对,要添加一个使用许多参数和选项,过滤特定子网的数据包的规则,其命令可以相当长。构造一个iptables命令的时候,需要时刻记得为了构建一个有效的规则,有些参数和选项依赖于更进一步的参数和选项。如果更进一步的参数和选项依赖更多的参数,这会产生一个串联效果。只有依赖其它选项的每个参数和选项的需求都得到满足,这个规则才会有效。

输入iptables -h查看iptables命令结构的详尽列表。

3.2 命令选项

命令选项指示iptables做出特定的行为。每个iptables命令只允许一个命令选项。除帮助命令之外的其他命令都用大写字符表示。

iptables命令如下:

  • -A - 把规则附加到某链条末尾。与下面将会说到的-I选项不同,它不需要一个整数参数,它总是把规则附加到某链条末尾。
  • -C - 在添加到用户指定的链条前对规则进行检查。此命令会提示你提供额外的参数和选项,因此可帮你创建复杂的iptables规则。
  • -D <integer> | <rule> - 根据数字(例如5代表链条中的第五个规则)或规则的描述删除某链条中的某个规则。规则的描述必须精确匹配某个现存的规则。
  • -E - 重命名一个用户定义的链条。用户定义的链条是除默认的、预置的链条外其他所有链条(关于如何创建用户定义的链条,参考下面-N选项的说明)。这是一个表面的改变,不会影响表的结构。
    注意:如果你试图重命名默认链条,系统会报告一个Match not found错误。默认链条无法重命名。
  • -F - 冲刷选择的链条,实际上是删除链条中的每一个规则。如果没有指定链条,此命令冲刷每个链条的每一个规则。
  • -h - 提供命令结构的列表,及命令参数和选项的摘要说明。
  • -I [<integer>] - 根据用户提供的整数参数,把规则添加到链条的某个特定的位置。如果没有提供参数,规则会插入到链条的顶端。
    重要:如先前提到的那样,链条中规则的顺序决定了哪些规则作用于哪些数据包。使用-A或-I选项添加规则的时候需要牢记这一点。使用-I加上一个整数参数添加规则的时候这一点尤其重要。如果提供的数字已存在于链条中,iptables会在现有的规则之前(或之上)添加新规则。
  • -L - 列出指定链条中的所有规则。要列出默认filter表所有链条中的所有规则,不需要提供链条或表的名称。除此之外,要列出某链条的规则,使用下述格式:
    iptables -L <chain-name> -t <table-name>

    -L命令的更多选项,比如显示代表规则排序的数字,以及显示规则的更多信息,参考3.6 列表选项

  • -N - 按用户指定的名称创建一个新的链条。链条名称必须是唯一的,否则会显示一个错误信息。
  • -P - 设置链条的默认策略,以便当链条中没有匹配的规则时,把数据包发送给指定的目标(如ACCEPT或DROP)。
  • -R - 替换链条中的一个规则。需要在链条名称之后提供规则数字。数字1对应链条中的第一个规则。
  • -X - 删除用户指定的链条。内置链条无法删除。
  • -Z - 把某表所有链条的字节和数据包计数器置零。

3.3 IPTables参数选项

一些iptables命令,包括给链条添加、附加、删除、插入或替换规则的命令,需要各种各样的参数才能构建一条数据包过滤规则。

  • -c - 重置某规则的计数器。本参数接受PKTS和BYTES选项,用来指定重置哪个计数器。
  • -d - 指定适用某规则数据包应匹配的目标主机名、IP地址或网络。根据网络匹配时,支持下面IP地址/子网掩码格式:
    • N.N.N.N/M.M.M.M - N.N.N.N是IP地址范围,M.M.M.M是子网掩码。
    • N.N.N.N/M - N.N.N.N是IP地址范围,M是比特掩码(bitmask)。
  • -f - 只把这条规则应用于碎片化数据包(fragmented packets)。
    可在此参数后面使用英文叹号(!),用来匹配非碎片化数据包。
    注意:尽管碎片化数据包是IP协议的一部分,但区分碎片化和非碎片化数据包是值得的。最初的设计上,碎片化用来在帧大小不同的的网络上传输IP数据包;现在,攻击者常使用畸形数据包(mal-formed packets),利用碎片化进行DoS攻击。而IPv6已经完全不允许碎片化了。
  • -i - 设置网络入口,例如eth0或ppp0。这个参数只能用在filter表的INPUT和FORWARD链条,以及nat和mangle表的PREROUTING链条中。
    这个参数支持下面这些特殊的选项:

    • 英文叹号(!)- 反转指令。给出的接口被排除在本条规则之外。
    • 加号(+)- 通配符,用以匹配与给定字符串匹配的所有接口。例如-i eth+会把规则应用到任意以太网接口,但把其他接口,如ppp0排除在外。

    如果使用了-i参数,但未给出网络接口,则规则会影响每一个接口。

  • -j - 当数据包匹配某规则时,跳转到给定的目标。
    标准的目标有ACCEPT、DROP、QUEUE和RETURN。
    Fedora的iptables RPM软件包默认加载的模块还提供了一些扩展的目标。包含在这些模块中的有效目标包括LOG、MARK和REJECT。请参考iptables man page获取这些以及其他目标的更多信息。
    这一选项还能用来把匹配某规则的数据包引向当前链条外一个用户定义的链条,这样一来,其他规则也能应用到此数据包。
    如果没有指定目标,规则不会影响到数据包。但本规则的计数器会加1。
  • -o - 为规则设置网络出口。此选项只对filter表的OUTPUT和FORWARD链条,以及nat和mangle表的POSTROUTING链条有效。本参数可使用与网络入口参数(-i)相同的选项。
  • -p <protocol> - 设置规则能影响到的IP协议。可以是icmp、tcp、udp或all;可以是一个数字值,代表上述4个协议或其他不同的协议;还可以使用/etc/protocols文件中列出的任意协议。
    “all”的意思是此规则应用于每一个系统支持的协议。如果没有列出协议,默认为“all”。
  • -s - 指定适用某规则的数据包应匹配的源(地址、主机名或网络)。使用与目标参数(-d)相同的句法。

3.4 IPTables匹配选项

每种网络协议都有它们相应的匹配选项,用来匹配使用那个协议的数据包。当然,首先要在iptables命令里面把指出用到的协议。例如,-p <protocol-name>启用协议相应的选项。也可以用协议ID来代表一个协议。参考下面的例子,两个命令的效果相同:

iptables -A INPUT -p icmp --icmp-type any -j ACCEPT
iptables -A INPUT -p 5813 --icmp-type any -j ACCEPT

服务的定义包含在/etc/services文件中。为便于阅读,建议使用服务名,不使用端口号。

警告:确保/etc/services文件无法被未经授权的用户编辑。如果此文件可编辑,攻击者可使用它开启本来你一关闭的端口。为保证此文件安全,请用root用户身份输入以下命令:

[root@myServer ~]# chown root.root /etc/services 
[root@myServer ~]# chmod 0644 /etc/services
[root@myServer ~]# chattr +i /etc/services

这会阻止此文件被重命名、删除或链接。

3.1 TCP协议

这些匹配选项在TCP协议下可用(-p -tcp):

  • --dport - 指定数据包的目的端口。
    要设定这个选项,使用网络服务名(例如www或smtp);一个端口号;或一个端口范围。
    使用冒号(:)指定端口范围。例如:-p tcp --dport 3000:3200。可接受的最大端口范围是0:65535。
    在--dport后使用英文叹号(!)匹配所有不使用此网络服务或端口的数据包。
    访问/etc/services文件,获取网络服务的名称及别名,还有服务使用的端口号。--destination-port选项的作用和--dport选项相同。
  • --sport - 指定数据包的源端口。其可用选项和--dport相同。--source-port选项的作用和--sport选项相同。
  • --syn - 应用到所有用来初始化TCP连接的数据包(通常被称为SYN数据包)。所有具有数据负载的数据包会被忽略。
    在--syn后使用英文叹号(!)匹配所有非SYN数据包。
  • --tcp-flags <tested flag list> <set flag list> - 匹配具有某些特殊比特(flag,标记)的TCP数据包。
    --tcp-flags选项接受两个参数。第一个参数是掩码;逗号分隔的标记列表,指出需要检查数据包的哪些标记。第二个参数也是逗号分隔的标记列表,指出必须被设定的标记。
    可能的标记有:

    • ACK
    • FIN
    • PSH
    • RST
    • SYN
    • URG
    • ALL
    • NONE

    例如,包含下面内容的一条iptables规则只匹配设置了SYN标记同时没有设置ACK和FIN标记的TCP数据包:

    --tcp-flags ACK,FIN,SYN SYN

    在--tcp-flags后使用英文叹号(!)匹配满足相反条件的数据包。

  • --tcp-option - 尝试匹配设置了某TCP选项的数据包。此选项同样可使用英文叹号(!)反转其含义。

3.4.2 UDP协议

这些匹配选项在UDP协议下可用(-p udp):

  • --dport - 指定UDP数据包的目的端口,可使用服务名、端口号、或端口范围。与--destination-port选项作用相同。
  • --sport - 指定UDP数据包的源端口,可使用服务名、端口号、或端口范围。与--source-port选项作用相同。

对于--dport和--sport选项,使用冒号(:)分割的两个端口号设置端口范围。例如:-p tcp --dport 3000:3200。可接受的最大端口范围是0:65535。

3.4.3 ICMP协议

下面匹配选项在因特网控制报文(Internet Control Message Protocol,ICMP)协议下有效(-p icmp):

  • --icmp-type - 指定ICMP类型的名称或数字,用以匹配规则。可通过iptables -p icmp -h命令获取一个有效的ICMP名称列表。

3.4.4 额外的匹配选项模块

额外的匹配选项可通过使用iptables命令加载模块获取。

使用-m <module-name>加载提供匹配选项的模块,<module-name>是模块名。

有很多模块是默认提供的。你也能自己创建模块,以提供额外的功能。

下面是最常用模块的一个不完全列表:

  • limit模块 - 限制用来匹配某规则的数据包的数量。
    当与LOG目标一起使用时,limit模块可阻止匹配数据包使用重复信息填满系统日志或用尽系统资源。
    参考3.5 目标选项获取LOG目标的更多信息。
    limit模块提供下列选项:

    • --limit - 设定某时间段允许的最大匹配数。格式为<value(数值)>/<period(时间)>对。例如使用--limit 5/hour允许每小时有5次匹配。
      时间可以是秒、分钟、小时或天。
      如果没有给出数值及时间,默认使用3/hour。
    • --limit-burst -指定一次可有多少个数据包匹配某规则。
      此选项使用整数值,需要与--limit选项一起使用。
      若未给出数值,其默认值为5。
  • state模块 - 启用状态匹配。
    state模块提供下述选项:

    • --state - 使用下述连接状态匹配数据包:
      • ESTABLISHED - 匹配的数据包在一个已建立的连接中与其他数据包相关联。如果想保持一个服务器和客户端间的连接,你需要接受这个状态。
      • INVALID - 匹配的数据包没有已知的连接与其相关联。
      • NEW - 匹配的数据包或者建立一个新连接,或者是以前未见到的一个双向连接的一部分。如果想允许到系统某个服务的连接,你需要接受这个状态。
      • RELATED - 匹配的数据包正在建立一个新连接,且这个新连接以某种方式与现有的一个连接有关。一个例子是FTP,其使用一个连接控制通信(端口21),使用另一个连接传输数据(端口20)。

      这些连接状态可以组合使用,但需要用逗号隔开,例如:

      -m state --state INVALID,NEW
  • mac模块 - 允许匹配硬件MAC地址。
    MAC模块提供下列选项:

    • --mac-source - 匹配发送数据包的网络接口卡的MAC地址。要从某规则排除一个MAC地址,在--mac-source选项后使用英文叹号(!)。

参考iptables man page获取通过模块提供的匹配选项的更多信息。

3.5 目标选项

当数据包与某规则匹配时,规则可以把数据包引向不同的目标,这些目标决定了应用到数据包上的行为。每个链条都有一个默认目标,当链条中的规则都无法匹配数据包,或匹配数据包的规则没有指定目标时,会应用此默认目标。

下面是标准的目标:

  • <user-defined-chain> - 表中一个用户定义的链条。用户定义的链条名必须是唯一的。这个目标把数据包传递给指定的链条。
  • ACCEPT - 允许数据包通过,以到达它的目标或到达其他链条。
  • DROP - 丢弃数据包,不给请求者发送反馈。发送此数据包的系统不会收到数据包被丢弃的通知。
  • QUEUE - 数据包进入队列,由用户空间的应用程序进行处理。
  • RETURN - 停止使用当前链条中的规则检查数据包。如果链条中匹配某数据包的一个规则是由其他链条调用的,且应用了RETUEN目标,那么这个数据包会返回到它的第一个链条,继续先前未进行的规则检查。如果RETURN应用到内置链条的某个规则,那么数据包无法返回它先前的链条,此时会使用当前链条的默认目标。

另外,还有一些扩展提供了其他一些目标。这些扩展称为目标模块或匹配选项模块,通常只能应用于特定的表和特定的情况。参考3.4.4 额外的匹配选项模块,获取匹配选项模块的更多信息。

扩展的目标模块有很多,其中的大部分只能应用于特定的表或特定的情况。Fedora默认带有的一些最常用的目标模块如下:

  • LOG - 记录所有匹配此规则的数据包。由于数据包是由内核记录的,/etc/syslog.conf文件觉得了这些记录被写在哪里。默认情况下,它们被放在/var/log/message文件中。
    可使在LOG目标后使用额外选项指定日志的记录方式:

    • --log-level - 指定日志事件的优先级。参考syslog.conf man page获取优先级列表。
    • --log-ip-options - 记录在IP数据包首部中设定的任何选项。
    • --log-prefix - 写入日志行时,在行首添加最多29个字符的字符串。在需要配合数据包日志写syslog过滤器的时候,这一特性很有用。
      注意:由于此选项存在的一个问题,你应该在log-prefix值的最后添加一个空格。
    • --log-tcp-options - 记录TCP数据包首部中设定的任何选项。
    • --log-tcp-sequence - 把数据包的TCP顺序号写入日志。
  • REJECT - 向远端系统回复一个出错数据包,然后丢弃数据包。
    REJECT目标接受--reject-with <type>(<type>是拒绝类型)参数,允许随着错误数据包返回更详细的信息。如果没有使用其他选项,信息port-unreachable(端口不可达)是默认的错误类型。查看iptables man page获取<type>选项的完整列表。

其他(包括用nat表进行IP伪装,或使用mangle表修改数据包)的目标扩展,可在iptables手册页中找到。

3.6 列表选项

默认的列表命令,iptables -L [<chain-name>],只提供了默认的filter表当前链条的一个概览。下面选项可提供更多信息:

  • -v - 显示长输出,例如每个链条所处理的数据包数量及字节数,每条规则匹配的数据包数量及字节数,规则所使用的网络接口。
  • -x - 把数字展开成它们的精确值。在一个繁忙的系统中,某个链条或规则所处理的数据包数量及字节数可能会被缩写成Kilobytes(千字节)、Megabytes(兆字节)或Gigabytes(吉字节)。此选项强制显示完整的数字。
  • -n - 以数字形式显示IP地址和端口号,而不是默认的主机名和网络服务名形式。
  • --line-numbers - 列出链条中的规则时,在规则前显示代表规则顺序的数字。从链条中删除规则时或给链条中插入规则时,这个选项很有用。
  • -t <table-name> - 指定表名称。如果省略,默认filter表。

4 保存IPTables规则

iptables命令创建的规则保存在内存中。如果没有存储iptables规则就重启系统,所有规则都会丢失。为了让netfilter规则重启系统后还能继续存在,需要把它们存起来。以root用户身份使用下面命令存储netfilter规则:

/usr/libexec/iptables.init save

若使用CentOS 6或Fedora 16,其相应的命令为/sbin/service iptables save——译者注

这会执行iptables初始化脚本,脚本会运行/sbin/iptables-save程序,把当前iptables设置写入/etc/sysconfig/iptables。已存在的/etc/sysconfig/iptables文件被另存为/etc/sysconfig/iptables.save。

下次系统启动的时候,iptables初始化脚本使用/sbin/iptables-restore命令重新应用储存在/etc/sysconfig/iptables文件中的规则。

先对规则进行测试,再把它们存储进/etc/sysconfig/iptables是一个好主意,把其他系统里面的iptables规则拷贝过来使用也是可以的。这样我们可以把iptables规则快速分发到多台机器中。

重要:如果把/etc/sysconfig/iptables文件分发到其他机器,需要执行/sbin/service iptables restart命令使新规则生效。

注意:注意它们的区别。iptables命令(/sbin/iptables)用来操作构成iptables功能的表和链条;iptables服务(/sbin/iptables服务)用来启用或禁止iptables服务本身。

5 IPTables控制脚本

有两种基本的方式可用来控制iptables:

  • 防火墙管理工具(system-config-firewall)- 一个图形化界面,用来创建、激活、保存基本的防火墙规则。参考基本防火墙设置获取更多信息。
  • /sbin/service iptables <option> - 用它的初始化脚本来操作iptables的多个功能。有下述选项可用:
    • start - 如果防火墙设置好了(也就是说,文件/etc/sysconfig/iptables存在),所有当前运行的iptables会完全停止,然后使用/sbin/iptables-restore命令启动iptables。这个选项只在ipchains内核模块没有加载的情况下可用。要检查这个模块是否加载,使用root账户运行下面命令:
      [root@MyServer ~]# lsmod | grep ipchains

      如果这个命令没有输出信息,意味着这个模块没有加载。如果必要的话,可使用/sbin/rmmod命令把去掉此模块。

    • stop - 如果防火墙正在运行,内存中的防火墙规则会被冲刷,所有的iptables模块和助手模块(helper)都被卸下。
      如果在/etc/sysconfig/iptables-config配置文件中把IPTABLES_SAVE_ON_STOP的值改为了yes,当前的规则会保存在/etc/sysconfig/iptables中,已存在的规则被放在/etc/sysconfig/iptables.save中。
      参考5.1 IPTables控制脚本的配置文件获取iptables-config文件的更多信息。
    • restart - 如果防火墙正在运行,内存中的防火墙规则被冲刷,如果在/etc/sysconfig/iptables设置有规则,防火墙会重新启动。这个选项只在ipchains内核模块未加载时可用。
      如果在/etc/sysconfig/iptables-config配置文件中把IPTABLES_SAVE_ON_RESTART的值改为了yes,当前的规则会保存在/etc/sysconfig/iptables中,已存在的规则被放在/etc/sysconfig/iptables.save中。
      参考5.1 IPTables控制脚本的配置文件获取iptables-config文件的更多信息。
    • status - 显示防火墙的状态,列出所有已激活的规则。
      这个选项默认设置为显示每条规则的IP地址。要显示域名和主机名信息,编辑/etc/sysconfig/iptables-config文件,把IPTABLES_STATUS_NUMERIC的值改为no。参考5.1 IPTables控制脚本的配置文件获取iptables-config文件的更多信息。
    • panic - 冲刷所有防火墙规则,把所有表的策略设置为DROP。
      如果发现系统被损害,这个选项会很有用。不拔网线,也不关闭系统,你可以使用这个选项停止所有后续的网络通信,使机器为进行系统分析或其他取证做好准备。
    • save - 使用iptables-save把防火墙规则存入/etc/sysconfig/iptables。参考4 保存IPTables规则获取更多信息。

注意:要使用相同的初始化脚本命令控制IPv6的netfilter,把本节列出的/sbin/services命令中的iptables替换为ip6tables。更多IPv6和netfilter的信息,参考6 IPTables和IPv6

5.1 IPTables控制脚本的配置文件

iptables初始化脚本的行为由配置文件/etc/sysconfig/iptables-config控制。下面是此文件中包含的指令列表:

  • IPTABLES_MODULES - 指定一个由空格分隔的iptables模块的列表,当防火墙被激活的时候,会加载这些模块。列出的这些模块可以包含连接跟踪(connection tracking)及NAT助手(NAT helper)。
  • IPTABLES_MODULES_UNLOADS - 在重启和停止的时候把模块卸掉。这个指令接受下面的值:
    • yes - 默认值。为了让重启和停止防火墙具有正确的状态,必须设定为这个选项。
    • no - 只有在卸掉netfilter模块时出现问题的时候,才应设置为这个选项。
  • IPTABLES_SAVE_ON_STOP - 在防火墙停止的时候,把当前防火墙规则保存在/etc/sysconfig/iptables中。这个指令接受下面的值:
    • yes - 在防火墙停止的时候,把当前规则保存在/etc/sysconfig/iptables中,先前的规则放在/etc/sysconfig/iptables.save中。
    • no - 默认值。防火墙停止的时候,不保存当前规则。
  • IPTABLES_SAVE_ON_RESTART - 在防火墙重启的时候,把当前防火墙规则保存在/etc/sysconfig/iptables中。这个指令接受下面的值:
    • yes - 在防火墙重启的时候,把当前规则保存在/etc/sysconfig/iptables中,先前的规则放在/etc/sysconfig/iptables.save中。
    • no - 默认值。防火墙重启的时候,不保存当前规则。
  • IPTABLES_SAVE_COUNTER - 保存和复原所有链条和规则中的所有数据包计数器值和字节计数器值。指令接受下面的值:
    • yes - 保存计数器值。
    • no - 默认。不保存计数器值。
  • IPTABLES_STATUS_NUMERIC - 以数字形式,而不是域名或主机名形式输出IP地址。这个指令接受下面的值:
    • yes - 默认值。输出状态信息时只显示IP地址。
    • no - 在输出的状态信息中显示域名或主机名。

6 IPTables和IPv6

iptables软件包包含对下一代网络协议IPv6的支持。用来操作IPv6 netfilter的命令是ip6tables。

这个命令的大部分指令都和iptables相同,差别是还未支持nat表。这意味着现在还不能执行IPv6网络地址转换的相关任务,例如伪装(masquerading)和端口转发。

ip6tables规则保存在/etc/sysconfig/ip6tables文件中。先前由ip6tables初始化脚本保存的规则存储在/etc/sysconfig/ip6tables.save文件中。

ip6tables初始化脚本的配置选项储存在/etc/sysconfig/ip6tables-config中,每个指令的名称相比与其对应的iptables版本只有微小的变化。

例如,iptables-config中的指令IPTABLES_MODULES,与其对应的ip6tables-config文件中的指令是IP6TABLES_MODULES。

7 其他资源

参考下述资源获取使用iptables过滤数据包的额外信息。

  • 防火墙 - 包含一个完整的章节,讲述了防火墙在总体安全策略中的角色,以及创建防火墙规则的策略。

7.1 已安装的IPTables文档

  • man iptables - 包含iptables的一个描述,以及详尽的目标、选项、匹配扩展信息。

7.2 有用的IPTables网站

  • http://www.netfilter.org - netfilter/iptables项目的大本营。上面有iptables各种各样的信息,包括解答一些特定问题的FAQ,还有Linux IP防火墙维护者Rusty Russell写的一些指南。网站上的HOWTO文档覆盖了诸如基本的网络概念、内核数据包过滤,以及NAT设置的主题。

8 后记

快翻译完的时候才发现IPTables的博大精深。内容虽然翻译过来了,但并不知道实际中如何使用,甚至有些内容因为实践上的欠缺无法准确译出其原文所要表达的含义。仍需努力啊。

点击量:68

发表评论

电子邮件地址不会被公开。 必填项已用*标注

15 + 8 =