标签:意思 net rect ipchains 条件判断 开发 不同 代号 好处
众所周知,iptable的中包含了各种各样的table和规则链条。这篇博文对规则链的执行顺序做一个简单的介绍。
Chain OUTPUT (policy ACCEPT)
target prot opt source destination DNAT tcp -- anywhere anywhere tcp dpt:5000 to:172.30.57.2:5000
正常来说,iptable会对一条报文逐条匹配某个表中的规则,如果匹配成功,那么就执行这条规则对应的TARGET。例如上面这条规则的作用是,如果报文满足以下条件:
那么就做Destination NAT,NAT至172.30.57.2:5000。如果报文匹配了该条规则,那么它会跳出OUTPUT,转而执行下一个对应的规则链。
这个例子说明了当TARGET为DNAT时的情况。但是我们知道iptable中的TARGET有很多种,DNAT只是其中之一。不同的TARGET有不同的跳转规则,有的TARGET在执行完成后就跳出当前的规则链跳往下一个规则链(例如在PREROUTING时从mangel表的PREROUTING链跳往nat表的POSTROUTING链). 而有的TARGET 在执行完成后会接着执行当前规则链中的下一个规则。
从网上抄了一个2007年的博文:
-------------------------------------------------------------------------
iptables 是采用规则堆栈的方式来进行过滤,当一个封包进入网卡,会先检查 Prerouting,然后检查目的 IP 判断是否需要转送出去,接着就会跳到 INPUT 或 Forward 进行过滤,如果封包需转送处理则检查 Postrouting,如果是来自本机封包,则检查 OUTPUT 以及 Postrouting。过程中如果符合某条规则将会进行处理,处理动作除了 ACCEPT、REJECT、DROP、REDIRECT 和 MASQUERADE 以外,还多出 LOG、ULOG、DNAT、SNAT、MIRROR、QUEUE、RETURN、TOS、TTL、MARK 等,其中某些处理动作不会中断过滤程序,某些处理动作则会中断同一规则炼的过滤,并依照前述流程继续进行下一个规则炼的过滤(注意:这一点与 ipchains 不同),一直到堆栈中的规则检查完毕为止。透过这种机制所带来的好处是,我们可以进行复杂、多重的封包过滤,简单的说,iptables 可以进行纵横交错式的过滤(tables)而非炼状过滤(chains)。
------------------------------------------------------------------------------------
ref: http://bbs.chinaunix.net/thread-936284-1-1.html
还有一种情况这个帖子中没有给出,那就是自定义的规则链。例如:
Chain POSTROUTING (policy ACCEPT) target prot opt source destination KUBE-POSTROUTING all -- anywhere anywhere /* kubernetes postrouting rules */ RETURN all -- 192.168.122.0/24 224.0.0.0/24 RETURN all -- 192.168.122.0/24 255.255.255.255 MASQUERADE tcp -- 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535 MASQUERADE udp -- 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535 MASQUERADE all -- 192.168.122.0/24 !192.168.122.0/24 RETURN all -- 172.30.0.0/16 172.30.0.0/16 MASQUERADE all -- 172.30.0.0/16 !224.0.0.0/4 RETURN all -- !172.30.0.0/16 172.30.57.0/24 MASQUERADE all -- !172.30.0.0/16 172.30.0.0/16 MASQUERADE tcp -- 172.30.57.2 172.30.57.2 tcp dpt:5000 Chain KUBE-POSTROUTING (1 references) target prot opt source destination MASQUERADE all -- anywhere anywhere /* kubernetes service traffic requiring SNAT */ mark match 0x4000/0x4000
在这个例子中,有两个规则链,分别是iptable默认的POSTROUTTING链,还有一个是kube-proxy定义的KUBE-POSTROUTTING。当报文走到POSTROUTTING是,会匹配第一条。很显然,这条规则会匹配所有的报文。
然后跳转到KUBE-POSTROUTTING规则链,这个规则链只有一条规则,它的意思是如果报文带有0x4000的标记,那么就执行target,也就是MASQUERADE。如果报文不携带0x4000标记,那么该报文就不会匹配这条规则,然后返回,接着匹配
POSTROUTTING中的下一条报文。
标签:意思 net rect ipchains 条件判断 开发 不同 代号 好处
原文地址:https://www.cnblogs.com/elnino/p/11679014.html