原创文章,转载请注明: 转载自 镜中影的技术博客
本文链接地址: Iptables配置心得
URL:http://blog.youkuaiyun.com/linkpark1904/article/details/50790404
一、 iptables原理概述
在linux内核中,iptables是一款自带的防火墙软件,基于内核实现网络流量的过滤,针对数据包的IP地址,端口号,标志位,连接状态定义相应的防火墙规则,匹配规则后用指定的处理机制进行处理,可以是允许,可以是丢弃。
如上图所示,数据包从网卡1进入linux主机后,首先进入内核维护的网络内存空间中,内核接手数据包后,会进行一系列流水线处理。在解封IP头部后,先检测数据包的目的IP,然后查询路由表,如果该IP指向自己,解封TCP头部,得到相应的端口号,将该报文发送给对应的应用程序。若数据包的目的IP不是自己,则在路由表中查看下一跳的地址,将改报文转发到相应的网卡。
Iptables分为两部分,一部分位于内核中,用来存放规则,称为NetFilter。还有一段在用户空间中,用来定义规则,并将规则传递到内核中,这段在用户空间中的程序就叫做iptables。
其中存放规则的地方有五处,如上图所示的prerouting、input、output、forward、postrouting:
- prerouting:数据进来还未查询路由表之前的规则。
- input:由外部发往用户空间内部的规则。
- output:由用户空间内部发往外部的规则。
- forward:不进入用户空间,进行路由转发的规则。
- postrouting:查询完路由表后,将要转发的规则。
这五个点也叫做hook function(钩子函数),具体的数据流向如下图所示:
在prerouting规则中会拦截在查询路由表之前的ip报文,可以对ip报文进行修改、丢弃等操作,查询路由表后,数据包有可能走两条路径,一条直接进入用户空间,一条不经过用户空间,直接经由内核的forward规则进行转发,在转发出去的时候,也可以经由postrouting规则对ip报文进行相应的修改。
Iptables可以定义四类规则:
- filter:防火墙核心所在
- nat:网络地址转换
- mangle:实现数据包修改
- raw:连接跟踪表(不常用)
这四类规则,对应四张表,每一张表中拥有prerouting、input、output、forward、posting这五条链。