IPTALBES架构:

iptables1_第1张图片

先看一下IpTables这个单词,这其实是两个单词的缩写,tables的意思是多张表。

iptables是一个程序,位于用户空间。这个命令用来制订filter表、nat表、mangle表的规则。

netfilter是一个过滤模块,这个模块位于内核当中网络层,可以拦截进入和出去的数据包,根据fileter表(过滤表)决定是否允许此数据包通过;可以根据NAT表改变包里面的IP地址;可以根据mangle表决定修改数据包当中中的某一个字段,比如说TTL,QOS、标记等

iptables1_第2张图片

转发:forward发生在网络层,当一个数据包从服务器一个网卡进入到网络层时会判决,如果目的IP是自己就向处提交,如果目的不是自己的话就查自己的路由表,根据路由表的指示从相应的接口转发出去。

注意:上述牵扯到了两种数据报文,一种是目的是服务器本身,另一种不是服务器本身。还有第三种报文,就是服务器自己产生的报文。

netfilter既然要控制这三种报文的话就要在一些关键的位置对数据包进行拦截,拦截着肯定是用勾子函数进行拦截,那么netfilter函数就要在一些关键的位置布置勾子函数,那么都在什么地方布置了勾子函数呢?如下图:

iptables1_第3张图片

当一个数据包的目的是服务器本身时,要经过两个勾子函数。

当一个数据包从服务器发出时,也要经过两个勾子函数。

当一个数据外需要服务器进行路由时,需要经过三个函数。

这五个勾子函数都可以使用那三张表。

什么是表?什么是勾子函数?什么是链?

勾子函数可以理解成位于内核当中的五个位置。

表就是filter表、nat表、mangle表,三张表我们可以理解成为不同的功能,比如,nat可以实现地址转换。

有的勾子函数可以使用这三张表,有的勾子函数能使用有限的几种,如下图:

iptables1_第4张图片

注意:

filter只能在input,forward、output三个地方实现。