6.1. 基础
我们已解释了什么是规则,在内核看来,规则就是决定如何处理一个包的语句。假如一个包符合任何的条件(就是符合matche语句),我们就运行target或jump指令。书写规则的语法格式是:
iptables [-t table] command [match] [target/jump]
对于这个句法没什么可说的,但注意target指令必须在最后。为了易读,我们一般用这种语法。总之,您将见到的大部分规则都是按这种语法写的。因此,假如您看到别人写的规则,您很可能会发现用的也是这种语法,当然就很容易理解那些规则了。
假如您不想用标准的表,就要在[table]处指定表名。一般情况下没有必要指定使用的表,因为iptables 默认使用filter表来执行任何的命令。也没有必要非得在这里指定表名,实际上几乎可在规则的任何地方。当然,把表名在开始处已是约定俗成的标准。
尽管命令总是放在开头,或是直接放在表名后面,我们也要考虑考虑到底放在哪儿易读。command告诉程式该做什么,比如:插入一个规则,还是在链的末尾增加一个规则,还是删除一个规则,下面会仔细地介绍。
match细致地描述了包的某个特点,以使这个包区别于其他任何的包。在这里,我们能够指定包的来源IP 地址,网络接口,端口,协议类型,或其他什么。下面我们将会看到许多不同的match。
最后是数据包的目标所在。若数据包符合任何的match,内核就用target来处理他,或说把包发往 target。比如,我们能够让内核把包发送到当前表中的其他链(可能是我们自己建立的),或只是丢弃这个包而没有什么处理,或向发送者返回某个特别的应答。下面有周详的讨论。
6.2. Tables
选项-t用来指定使用哪个表,他能够是下面介绍的表中的任何一个,默认的是 filter表。注意,下面的介绍只是章节表和链的摘要。
Table 6-1. Tables
| Table (表名) | Explanation (注释) |
|---|---|
| nat | nat表的主要用处是网络地址转换,即Network Address Translation,缩写为NAT。做过NAT操作的数据包的地址就被改变了,当然这种改变是根据我们的规则进行的。属于一个流的包只会经过这个表一次。假如第一个包被允许做NAT或Masqueraded,那么余下的包都会自动地被做相同的操作。也就是说,余下的包不会再通过这个表,一个一个的被NAT,而是自动地完成。这就是我们为什么不应该在这个表中做任何过滤的主要原因,对这一点,后面会有更加周详的讨论。PREROUTING 链的作用是在包刚刚到达防火墙时改变他的目的地址,假如需要的话。OUTPUT链改变本地产生的包的目的地址。POSTROUTING链在包就要离开防火墙之前改变其源地址。 |
| mangle | 这个表主要用来mangle数据包。我们能够改变不同的包及包头的内容,比如 TTL,TOS或MARK。注意MARK并没有真正地改变数据包,他只是在内核空间为包设了一个标记。防火墙内的其他的规则或程式(如tc)能够使用这种标记对包进行过滤或高级路由。这个表有五个内建的链: PREROUTING,POSTROUTING, OUTPUT,INPUT和 FORWARD。PREROUTING在包进入防火墙之后、路由判断之前改变包,POSTROUTING是在任何路由判断之后。 OUTPUT在确定包的目的之前更改数据包。INPUT在包被路由到本地之后,但在用户空间的程式看到他之前改变包。FORWARD在最初的路由判断之后、最后一次更改包的目的之前mangle包。注意,mangle表不能做任何NAT,他只是改变数据包的 TTL,TOS或MARK,而不是其源目地址。NAT是在nat表中操作的。 |
| filter | filter表是专门过滤包的,内建三个链,能够毫无问题地对包进行DROP、LOG、ACCEPT和REJECT等操作。FORWARD 链过滤任何不是本地产生的并且目的地不是本地(所谓本地就是防火墙了)的包,而 INPUT恰恰针对那些目的地是本地的包。OUTPUT 是用来过滤任何本地生成的包的。 |
上面介绍了三个不同的表的最基本的内容。您应该知道他们的使用目的完全不同,还要清楚每一条链的使用。假如您不了解,就可能会在防火墙上留下漏洞,给人以可乘之机。在章节表和链 中,我们已周详地讨论了这些必备的的表和链。假如您没有完全理解包是怎样通过这些表、链的话,我建议您回过头去再仔细看看。
6.3. Commands
在这一节里,我们将要介绍任何的command连同他们的用途。command指定iptables 对我们提交的规则要做什么样的操作。这些操作可能是在某个表里增加或删除一些东西,或做点儿其他什么。以下是iptables可用的command(要注意,如不做说明,默认表的是 filter表。):
Table 6-2. Commands




