注:本文由青蛙王子翻译自OpenSuSE 11.4下的iptables的man手册,转载请注明出处。
在阅读本文之前,如果你连Linux下的iptables是什么,有什么作用都不清楚,建议别看了,先去了解清楚再来也不迟^_^
命令:
iptables –作用: IPv4包过滤和NAT的管理工具
使用摘要:
iptables [-t table] {-A|-D} chain rule-specification
iptables [-t table] -I chain [rulenum] rule-specification
iptables [-t table] -R chain rulenum rule-specification
iptables [-t table] -D chain rulenum
iptables [-t table] -S [chain [rulenum]]
iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]
iptables [-t table] -N chain
iptables [-t table] -X [chain]
iptables [-t table] -P chain target
iptables [-t table] -E old-chain-name new-chain-name
rule-specification = [matches...] [target]
match = -m matchname [per-match-options]
target = -j targetname [per-target-options]
作用说明:
iptables用来建立、维护及检查Linux内核中的IPv4的包过滤规则。可能会定义好几个不同的表。每张表包含一系列内在的链(chains),并且可能包含用户自定义的链。
每个链是能够匹配一系列包的规则。每个规则中明确说明了如何处理一个匹配的包。这个处理通常被称为“目标”(target),它可能会是一个到相同表中的另一个用户定义的链表的跳转。
目标:(什么是目标?)
一条防火墙规则即对于一个包和一个目标指定一个规则。如果包不匹配,则继续去匹配链中的下一个规则;如果匹配,接下来的处理规则取决与目标(target),它可能会是一个用户定义的链名或者是ACCEPT、DROP、QUEUE或RETURN这几个特殊值中的一个。
ACCEPT表示让包通过。DROP意味着把包丢到地板上。 QUEUE指的是把包传递给用户空间(userspace)。(包如何被用户空间进程接收会根据queue句柄的不同而不同。2.4.x和2.6.x内核及高到2.6.13内核使用ip_queue队列句柄(handler)。内核2.6.14及之后的版本,还额外包括了nfnetlink_queue队列句柄。这种情况下,目标是QUEUE的包将会被送到队列号为0的队列。请也参考一下NFQUEUE目标的说明,本man手册的后面有讲。)RETURN意思是停止遍历这个链,并且恢复到前一个(调用的)链表。如果已经到了内置链表的末尾,或匹配到一个内置的目标为RETURN的链时,这个链表指定的目标规则就决定了这个包的命运。
表:
目前有三种(原文中明确提到的是three,但下面列举出来的却是四种表)独立的表类型(何时使用何种表取决于内核的配置参数及当时使用的模块)。
-t, --table表名称(注:这里的表名称就是上面提到的三(四)种之一,下面有说明)
此参数用来指定这个命令要来匹配的表。如果此参数不存在,且内核配置为自动模块加载方式,系统会自动尝试为那张表加载合适模块。
相关的表如下:
filter:
这个是默认表(如果没有通过-t或—table参数给出表的话)。它包含了内置的链INPUT(INPUT是为那些目标是自己的socket准备的),FORWARD(对于那些将要被路由出去的包),和OUTPUT(对应本端产生的包)。
nat:
当一个包需要创建新连接的时候会遇到此表。它由三种内置链组成:PREROUTING(当包一进来就立即修改),OUTPUT(在路由前修改本端产生的包),和POSTROUTING(在包将要发出去之前修改包)。
mangle:
此表用于特殊包的变更。直至内核版本2.4.17,有两个内置链:PREROUTING(用于对入的包在路由前进行修改)和OUTPUT(在路由前修改本端生成的包)。从内核2.4.18开始,另外三种内置链也开始被支持了:INPUT(对应那些进入本盒子自己的包),FORWARD(修改那些经由本盒子路由过的包),和POSTROUTING(修改那些将要被发出去的包)。
raw:
This table is used mainly for configuring exemptions from connection tracking in combination with the NOTRACK target(注:这句怎么都翻译不来,保留原话)。它注册于netfilter钩子,且拥有更高的优先级,因此在ip_conntrack或其它IP表之前就已经被调用了。它提供如下内置链:PREROUTING(对应于来自任何网络的包),OUTPUT(对应本端生成的包)。
选项:
能够被iptables命令识别的选项可以划分为好几个不同的组。
命令:
这些选项指明预期要执行的行为。它们当中只能在命令行中指定其中之一,除非另有说明。对于命令和参数名称的长版本形式来说,你需要使用足够多的字符来保证iptables能够从其它不同的参数中区分它。
-A, --append链名规则描述
向选择的链末尾中增加一个或多个规则。当源和/或目的名称解析出多于一个地址的时候,规则会被添加到每一个可能的地址组合中。
-D, --delete链名规则描述
-D, --delete链名规则号
从指定的链中删除一个或多个规则。这个命令有两个不同的版本:规则可以通过指定链中的规则号(第一个规则是从1开始的)或一个匹配的规则。
-I, --insert链名[规则号]规则描述
以规定的规则号向规定的链中插入一个或多个规则。即,如果指定规则号1,那么此条规则会被插入到链首。如果没有指定规则号的话,这也是默认值。
-R, --replace链名规则号规则描述
替换掉指定链中的一条规则。如果源和/或目的解析出了多个地址,命令会执行失败。规则们被从1开始编号。
-L, list [链名]
规则指定的链中的所有规则。说明没有指定链名,所有的链都会被列出来。跟其它iptables命令一样,它适用于特定的表(filter是默认的)