iptables不是真正的防火墙,可以理解成一个客户端代理,位于用户空间,通过这个代理,可以执行到对应的安全框架中,这个安全框架是真正的防火墙,这个框架叫作NetFilter,位于内核空间,它的主要功能是网络地址转换、数据包修改、数据包过滤。
当一个数据包进入到主机之前,会先经NetFilter进行检查,而这个就是iptables的规则。检查通过则接受(Accept)进入主机取得资源,如果检查不通过,则可能会被丢弃。
基础iptabes是一组规则,定义为如果数据包头符合哪个规则,就按哪个规则进行处理数据包,这些规则存储在内核空间的信息包过滤表中,这些规则指定了源地址,目标地址,传输协议和服务类型等,当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(ACCEPT),拒绝(REJECT),丢弃(DROP)等。
链当在服务器上部署一个web应用时,客户端访问这个web应用时,防火墙要对于所有的流量进行检查,符合条件的入放行,符合阻拦的要被阻止,这就出现了INPUT和OUTPUT的链。
也有可能客户端发来的报文访问的目标地址并不是本机,而是其他服务器,当本机的内核支持IP_FORWARD时,可以将报文转发给其他服务器,这时就会有“路由前”(PREROUTING)、“转发”(FORWARD)、“路由后”(POSTROUTING),如图:
由上图可以知道,报文的流向
进入本机
PREROUTING-INPUT
本机转发
PREROUTING-INPUT-POSTROUTING
本机的进程发出的报文
OUTPUT-POSTROUTING
每条链中的规则又可以有多条,如下图,多条规则之前是有顺序的,只要有一个匹配,则会忽略后面的规则,故而当顺序排列错误,有可能会产生比较严重的错误。
表在每条链上都存储了一串的规则,但这些规则有些很相似,如A类规则都是对ip或者端口进行过滤,B类规则是修改报文,那么能不能把实现相同功能的规则放在一起呢,这就是表的功能。
iptables定义了4种表,所有自定义的规则,都是在这四类规则
filter表负责过滤功能,防火墙;内核模块:iptable_filter
nat表网络地址转换功能;内核模块:iptable_nat
mangle表拆解报文,做出修改,并重新封装;内核功能:iptable_mangle
raw表关闭nat表上启用的连接追踪机制;iptable_raw
链与表的关系优先级次序(由高而低):
raw–mangle–nat–filter
数据流如下图