全部博文(80)
分类: Android平台
2013-07-09 15:40:55
了解 iptables 的工作流程对于理解其各种命令和参数以及选项非常有帮助,也是设计 iptables 的基础。开启了 iptables 之后,所有通过系统网卡接口的数据都会经过 iptables 的检查和处理。iptables 就像是一道流水线,其各条规则就像是流水线上的技工,各规则按照一定的顺序排列在流水线上。所有进入 iptables 的数据包,在走这个流程的过程中会被各条规则检查。
每条规则包括匹配条件(如果不指定匹配条件则默认匹配所有)和处理方法 2 个部分。某规则看到有个数据包从流水线上过来了,就先看看是不是满足自己的匹配条件,不满足就让它继续往下游走;满足就按照自己的处理方法对其进行处理。
每个数据包最终的处理的结果只有这么 3 种,且必须为这 3 种中的一个,否则就是还没处理完:
如果一个数据包得到了上面 3 种最终判决结果中的一个,它就会从 iptables 这条流水线上被请下来,否则就继续往下游走。
并不是每条规则都能给出上面的最终判决。如果不能给出最终判决,这条规则的操作有:
设计 iptables 的规则就是设计这么一条流水线,使用
组合出满足自己需要的匹配规则并指定处理方式,同时考虑到 iptables 规则在流水线上的前后顺序。一般采取的思路是,只“接受”满足我们要求的数据包,对于没有规则与之匹配的数据包,默认采取丢弃(或拒绝)操作(一般最后一条规则都是 -j DROP,不能处理的都给丢弃了)。不过也有人说,直接 DROP 不是太礼貌,可以选择 REJECT(丢弃并通知一声)。然而也有人说,既然没有匹配的规则,那多半说明这个数据包是“不正常的”,既然不正常,还给别人通知什么啊,直接丢了拉倒。所以还是设计一个比较严谨的 iptables 吧