之前的博文己说明了ip、tcp封包格式,深入了解其报文格式,对于这次说明 iptables的原理将有很大帮助。
4、 Policy
我们讲策略的时候,主要有两重含义。第一是假如报文通过防火墙规则链检查的时候,不匹配任何规则我们应该怎么做,这个是我们讲的主要关注点。另外一个策略的含义就是我们通常讲的宽泛的安全策略。
一个链其实就是一组规则集合,在iptables里有五条链,分别是PREROUTING,INPUT,OUTP POSTROUTING,FORWORD这个规则会被应用到所有经过这个链的报文。每一个链都有其特定的含义,例如它关联到哪个表,它能够做什么事情。
四、表与链
1、规则表
注:表的优先级同下顺序
(1)、raw表
属性 | 说明 |
相关链 | OUTPUT、PREROUTING |
作用 | raw表的一个主要用途就是为了一件事情,那就是对报文设置一个标志,决定数据包是否被状态跟踪机制处理 |
内核模块 | iptable_raw |
(2) 、mangle表
属性 | 说明 |
相关链 | PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD |
作用 | 修改数据包的服务类型、TTL、并且可以配置路由实现QOS。 |
内核模块 | iptable_mangle |
(3)、nat表
属性 | 说明 |
相关链 | PREROUTING、POSTROUTING、OUTPUT |
作用 |
只能用来完成源/目的地址的转换。需要注意的是,只有第一个报文会经过这个表,这个连接的其他报文会自动完成转换。这个表的 target 有: DNAT、SNAT、MASQUERADE、REDIRECT |
内核模块 | iptable_nat |
(4)、filter表
属性 | 说明 |
相关链 | INPUT、FORWARD、OUTPUT |
作用 | 报文过滤 |
内核模块 | iptables_filter |
2、规则链
链 | 说明 |
PREROUTING | 对数据包作路由选择前应用此链中的规则。(所有的数据包进来的时侯都先由这个链处理) |
INPUT | 进来的数据包应用此规则链中的策略 |
OUTPUT | 外出的数据包应用此规则链中的策略 |
FORWARD | 转发数据包时应用此规则链中的策略 |
POSTROUTING | 对数据包作路由选择后应用此链中的规则。(所有的数据包出来的时侯都先由这个链处理) |
五、iptables传输数据包的过程
简单解释一下上面这个图,例如一个报文到了第一个需要做路由决定的点,如果它的目的不是本机,则会被转发到 FORWARD 链,反之,目的地址正是本机所监听的,那么就会通过 INPUT 链把报文送给本机。 还需要指出的是,报文的目的地址是本机,但是它的地址可能会在PREROUTING 链里被 NAT 修改。因为这个发生在第一次路由前,报文在修改后才能路由。请注意,所有报文都会经过上面的至少一条链。如果你把你一个报文做 DNAT,然后把它发回它原来来的网络,这样它就会沿着余下的链表,直到它被发送回原来的网络。
数据包流向情况分析
第一种情况:目标是本地主机
从外界到达防火墙的数据包,先被PREROUTING规则链处理(是否修改数据包地址等),路由决定,例如决定报文是发向本机还是转发或者其他地方,如果数据包的目标主机是本机(比如说Internet用户访问防火墙主机中的web服务器的数据包),那么内核将其传给INPUT链进行处理(所有送往本机的报文都会进行过滤,决定是否允许通过等),通过以后再交给系统上层的应用程序(比如Apache服务器)进行响应。
第二冲情况:转发报文
来自外界的数据包到达防火墙后,首先被PREROUTING规则链处理,之后会进行路由选择,如果数据包的目标地址是其它外部地址(比如局域网用户通过网关访问web站点的数据包),则内核将其传递给FORWARD链进行处理(是否转发或拦截),然后再交给POSTROUTING规则链(是否修改数据包的地址等)进行处理
第三种情况:本地主机发送报文
本地进程或者应用程序(例如服务器或者客户端程序)向外部地址发送的数据包(比如在防火墙主机中测试公网DNS服务器时),首先被OUTPUT规则链处理,之后进行路由选择,然后传递给POSTROUTING规则链(是否修改数据包的地址(SNAT)等)进行处理。
===================================未完========================================
PS:
1、下篇将说明iptables的命令格式,基本用法