什么是raw表?做什么用的? iptables有5个链:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING,4个表:filter,nat,mangle,raw.
4个表的优先级由高到低的顺序为:raw–>mangle–>nat–>filter
举例来说:如果PRROUTING链上,即有mangle表,也有nat表,那么先由mangle处理,然后由nat表处理
RAW表只使用在PREROUTING链和OUTPUT链上,因为优先级最高,从而可以对收到的数据包在连接跟踪前进行处理。一但用户使用了RAW表,在某个链上,RAW表处理完后,将跳过NAT表和 ip_conntrack处理,即不再做地址转换和数据包的链接跟踪处理了.
RAW表可以应用在那些不需要做nat的情况下,以提高性能。如大量访问的web服务器,可以让80端口不再让iptables做数据包的链接跟踪处理,以提高用户的访问速度。
iptables的数据包的流程是怎样的? (流程介绍来源:http://selboo.com.cn/post/721/) 一个数据包到达时,是怎么依次穿过各个链和表的(图)。
基本步骤如下:
数据包到达网络接口,比如 eth0。 进入 raw 表的 PREROUTING 链,这个链的作用是赶在连接跟踪之前处理数据包。 如果进行了连接跟踪,在此处理。 进入 mangle 表的 PREROUTING 链,在此可以修改数据包,比如 TOS 等。 进入 nat 表的 PREROUTING 链,可以在此做DNAT,但不要做过滤。 决定路由,看是交给本地主机还是转发给其它主机。 到了这里我们就得分两种不同的情况进行讨论了,一种情况就是数据包要转发给其它主机,这时候它会依次经过:
进入 mangle 表的 FORWARD 链,这里也比较特殊,这是在第一次路由决定之后,在进行最后的路由决定之前,我们仍然可以对数据包进行某些修改。 进入 filter 表的 FORWARD 链,在这里我们可以对所有转发的数据包进行过滤。需要注意的是:经过这里的数据包是转发的,方向是双向的。 进入 mangle 表的 POSTROUTING 链,到这里已经做完了所有的路由决定,但数据包仍然在本地主机,我们还可以进行某些修改。 进入 nat 表的 POSTROUTING 链,在这里一般都是用来做 SNAT ,不要在这里进行过滤。 进入出去的网络接口。完毕。 另一种情况是,数据包就是发给本地主机的,那么它会依次穿过:
进入 mangle 表的 INPUT 链,这里是在路由之后,交由本地主机之前,我们也可以进行一些相应的修改。 进入 filter 表的 INPUT 链,在这里我们可以对流入的所有数据包进行过滤,无论它来自哪个网络接口。 交给本地主机的应用程序进行处理。 处理完毕后进行路由决定,看该往那里发出。 进入 raw 表的 OUTPUT 链,这里是在连接跟踪处理本地的数据包之前。 连接跟踪对本地的数据包进行处理。 进入 mangle 表的 OUTPUT 链,在这里我们可以修改数据包,但不要做过滤。 进入 nat 表的 OUTPUT 链,可以对防火墙自己发出的数据做 NAT 。 再次进行路由决定。 进入 filter 表的 OUTPUT 链,可以对本地出去的数据包进行过滤。 进入 mangle 表的 POSTROUTING 链,同上一种情况的第9步。注意,这里不光对经过防火墙的数据包进行处理,还对防火墙自己产生的数据包进行处理。 进入 nat 表的 POSTROUTING 链,同上一种情况的第10步。 进入出去的网络接口。完毕。 iptables raw表的使用 增加raw表,在其他表处理之前,-j NOTRACK跳过其它表处理 状态除了以前的四个还增加了一个UNTRACKED
阅读全文