iptables可以实现防火墙、NAT等功能,不过这句话也对,也不对。说它对,我们确实是通过iptables相关命令行,实现了防火墙、NAT的功能;说它不对,是因为iptables其实只是一个运行在用户空间的命令行工具,真正实现这些功能的是运行在内核空间的netfilter。


它们之间的关系如下图:




iptables配置dmz iptables man_iptables


不必太在意这个图是什么意思,只需要有个直观的感觉即可。主要关注iptables命令方框。


iptable内置了三张表:filter、nat和mangle。


filter和nat顾名思义,是为了实现防火墙和NAT功能而服务的。mangle,翻译为汉语是“乱砍;损坏”等意思,它在这里指的是“主要应用在修改数据包内容上,用来做流量整形”。


iptables内置的既是三张表,也是三条链,或者换个角度说,iptables内置的是三种策略,而这些策略,是由不同规则串接而成。什么叫规则呢?我们以防火墙为例,讲述一条规则:


iptables -A INPUT -i eth0 -p icmp -j ACCEPT


这条规则表达的意思是:允许所有从eth0端口进入且协议是ICMP的报文可以接受(可以进入下一个流程)的。


这就是一条规则,至于iptables的命令行格式只是一个表象,它的本质是对进入的IP报文进行说明,如:符合什么样的条件(比如本条命令的条件是“允许所有从eth0端口进入且协议是ICMP的报文”)、做什么样的处理(比如本条命令的处理是“接受”,可以进入下一个流程)。


iptable可以定义很多策略/规则,从上图可知,这些规则最终会传递到内核netfilter模块,netfilter模块会根据这些规则做相应的处理。netfilter的处理方式时:从报文进入本机(linux host或vm)的那一刻起,到报文离开本机的那一刻为止,中间这段时间,netfilter会在某些时刻点插入处理模块,这些处理模块根据相应的策略/规则对报文进行处理。


nat、filter、mangle三张表也可以这样理解:仅仅是为了达到不同目的(功能)而实现的三个模块而已。


netfilter插入的这些时刻点如下图:



iptables配置dmz iptables man_网络接口_02


在这些时刻点,上文提到三张表(模块)并不是所有时刻都可以处理。在同一个时刻点,也可以有多个模块可以进行处理,那么这些模块就有一个处理顺序,谁先处理,谁后处理呢?见下图:



iptables配置dmz iptables man_iptables配置dmz_03


图中几个关键时刻点,含义如下:


(1)PREROUTING:报文进入网络接口尚未进入路由之前的时刻;


(2)INPUT:路由判断是本机接收的报文,准备从内核空间进入用户空间的时刻;


(3)FORWARD:路由判断不是本机接收的报文,需要路由转发,路由转发的那个时刻;


(4)OUTPUT:本机报文需要发出去,经过路由判断选择好端口以后,准备发送的那一刻;


(5)POSTROUTING:FORWARD/OUTPUT已经完成,报文即将出网络接口的那一刻。


三张表,所能对应的时刻点,如下表



iptables配置dmz iptables man_iptables_04


参考


http://blog.chinaunix.net/uid-23069658-id-3160506.html