一,什么是链?
1,一个防火墙中通常针对不同的来源设置很多规则,多个规则形成一个链,其实也可以理解成是分组的概念,
在Iptables防火墙中针对不同的链路共分为五种不同的链。
如下图所示,当数据报文进入链之后,首先匹配第一条规则,如果第一条规则通过则访问,如果不匹配,则接着向下匹配,
如果链中的所有规则都不匹配,那么就按照链的默认规则处理数据报文的动作。
2,三表五链之五链
Iptables有五种不同的链,分别是INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING。
INPUT:从外界进入防火墙的数据包会应用此规则链中的策略。
OUTPUT:当前服务器从防火墙外出的数据表会应用此规则链中的策略。
FORWARD:转发数据包时会应用此规则链中的策略。
PREROUTING:主机外的报文要进入防火墙,所有的数据包进来的时候都会由PREROUTING链进行处理。
POSTROUTING:主机内的报文要从防火墙出去,需要经过POSTROUTING链进行处理。
五链的示意图
二,什么是表?
虽然每一条链上有多条规则,但有些规则的作用(功能)很相似,多条具有相同功能的规则合在一起就组成了一个“表”。
iptables提供了四种“表”:
– filter表:主要用于对数据包进行过滤,根据具体的规则决定是否放行该数据包(如DROP、ACCEPT、REJECT、LOG),
所谓的防火墙其实基本上是指这张表上的过滤规则,对应内核模块iptables_filter;
– nat表:network address translation,网络地址转换功能,主要用于修改数据包的IP地址、端口号等信息(网络地址转换,如SNAT、DNAT、MASQUERADE、REDIRECT)。
属于一个流的包(因为包的大小限制导致数据可能会被分成多个数据包)只会经过这个表一次,如果第一个包被允许做NAT或Masqueraded,
那么余下的包都会自动地被做相同的操作,也就是说,余下的包不会再通过这个表。对应内核模块iptables_nat;
– mangle表:拆解报文,做出修改,并重新封装,主要用于修改数据包的TOS(Type Of Service,服务类型)、
TTL(Time To Live,生存周期)指以及为数据包设置Mark标记,以实现Qos(Quality Of Service,服务质量)调整以及策略路由等应用,
由于需要相应的路由设备支持,因此应用并不广泛。对应内核模块iptables_mangle;(应用少)
– raw表:是自1.2.9以后版本的iptables新增的表,主要用于决定数据包是否被状态跟踪机制处理,
在匹配数据包时,raw表的规则要优先于其他表,对应内核模块iptables_raw。(应用少)
我们最终定义的防火墙规则,都会添加到这四张表中的其中一张表中
三,表和链的关系:
每条链上各个表被匹配的优先级:raw→mangle→nat→filter。
raw最先被匹配,
filter最后被匹配
我们最终定义的防火墙规则,都会添加到这四张表中的其中一张表中,
所以我们实际操作是对“表”进行操作的,
每种表都能用于哪些链? 看图: