1.Linux 防火墙基础
Linux防火墙主要工作在网络层,针对 TCP/IP 数据包实施过滤和限制,典型的包过滤防火墙,基于内核编码实现,具有非常稳定的性能和高效率。
iptables:用来管理 Linux 防火墙的命令程序,位于/sbin/iptables目录下,属于用户空间的防火墙管理体系。
netfilter:Linux 内核中实现包过滤防火墙的内部结构,一般不以程序或文件的形式存在,属于内核空间的防火墙管理体系。
iptables 的作用:为包过滤机制的实现提供规则,通过各种不同的规则,来告诉netfilter对来自某些源以及前往某些目的或具有某些协议特征的数据包是如何进行处理的。
2.iptables 的表、链结构
每个规则表,其实就相当于一个内核空间的容器,按照规则集的不同用途进行划分为默认的四个表,在每个规则表中包含不同的规则链,处理数据包的不同时机分为五种链,决定是否过滤或处理数据包的各种规则并按照先后顺序存放在各规则链中。
规则的作用:对数据包进行过滤或处理;
链的作用:容纳多种防火墙规则;

规则表
iptables管理着四个不同的规则表,分别由独立的内核模块实现。
filter 表:用来对数据包进行过滤,具体的规则要求决定如何处理一个数据包。
对应的内核模块为:iptable_filter,其表内包括三个链:input、forward、output;
nat 表:nat 全称:network address translation 网络地址转换,主要用来修改数据包的 IP 地址、端口号信息。
对应的内核模块为:iptable_nat,其表内包括三个链:prerouting、postrouting、output;
mangle 表:主要用来修改数据包的服务类型,生存周期,为数据包设置标记,实现流量整形、策略路由等。
对应的内核模块为:iptable_mangle,其表内包括五个链:prerouting、postrouting、input、output、forward;
raw 表:主要用来决定是否对数据包进行状态跟踪。
对应的内核模块为:iptable_raw,其表内包括两个链:output、prerouting;
规则链
input 链:当收到访问防火墙本机地址的数据包时,将应用此链中的规则;
output 链:当防火墙本机向外发送数据包时,将应用此链中的规则;
forward 链:当收到需要通过防火中转发给其他地址的数据包时,将应用此链中的规则;
prerouting 链:在对数据包做路由选择之前,将应用此链中的规则;
postrouting 链:在对数据包做路由选择之后,将应用此链中的规则;
input 链 和 output 链主要用在主机型防火墙,是针对服务器本机进行保护的防火墙;
forward 链、prerouting 链、postrouting 链主要用在网络型防火墙,是针对公司内网与 Internet 之间进行安全控制。
3.数据包过滤的匹配流程
