文章目录
Linux防火墙
一、Linux防火墙基础
Linux的防火墙体系主要工作在网络层,针对TCP/IP数据包实施过滤和限制,属于典型的包过滤防火墙(或称为网络层防火墙)。Linux系统的防火墙体系基于内核编码实现,具有非常稳定的性能和极高的效率。
netfilter和iptables都用来值Linux防火墙,主要区别为:
-
netfiltle:指的是Linux内核中实现包过滤防火墙的内部结构,不以程序或文件的形式存在,属于”内核态“(kernel space,又称为内核空间)的防火墙功能体系。
-
iptables:指的是用来管理Linux防火墙的命令程序,通常位于/sbin/iptables目录下,属于”用户态“(user space,又称为用户空间)的防火墙管理体系。
1、iptables的表、链结构
iptables的作用是为包过滤机制的实现提供规则(或称策略)通过不同的规则,告诉netfilter对于来自某些源、前往某些目的地或者具有某些协议特征的数据包应该如何处理。iptables采用了”表“和”链“的分层结构如下:
1)规则表
根据规则集的不同用途,iptables管理着四个不同的规则表,其功能分别由独立的内核模块实现。这四个表的名称、包含的链以及各自用途为:
- filter表:filter表用来对数据包进行过滤、根据具体的规则要求决定如何处理一个数据包。filter表对应的内核模块为iptable_filter,表内包含INPUT、FORWARD、OUTPUT三个链。
- nat表:nat(network address translation,网络地址转换)表主要用来修改数据包的IP地址、端口等信息。nat表对应的内核模块为iptable_nat,表内包含PREROUTING、POSTROUTING、OUTPUT三个链。
- mangle表:mangle表用来修改数据包的TOS(type of service,服务类型)、TTL(time to live,生存周期)、或者为数据包设置mark标记,从而实现流量整形、策略路由等高级应用。mangle表对应的内核模块为iptable_mangle,表内包含PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD五个表。
- raw表:raw表是自1.2.9以后版本的iptables新增的表,主要用来决定是否对数据包进行状态追踪。raw表对应的内核模块为iptables_raw,表内包含OUTROUTING、PREROUTING两个链。
2)规则链
处理各种数据包时,根据防火墙规则的不同介入时机,iptables默认划分为五种不同的规则链如下:
- INPUT链:当接收到访问防火墙本机地址的数据包(入站)时,应用此链中的规则。
- OUTPUT链:当防火墙本机向外发送数据包(出站)时,应用此链中的规则。
- FORWARD链:当接收到需要通过防火墙中转发给其他地址的数据包(转发)时,应用此链中的规则。
- PREROUTING链:在对数据包做路由选择之前,应用此链中的规则。
- POSTROUTING链:在对数据包做路由选择之后,应用此链中的规则。
2、数据包过滤的匹配流程
1)规则表之间的顺序
当数据抵达防火墙时,将依次应用raw表、mangle表、nat表和filter表中对应链内的规则(如果存在),应用顺序为raw→mangle→nat→filter。
2)规则链之间的顺序
根据规则链的划分原则,不同链的处理时机是比较固定的,因此规则链之间的应用顺序取决于数据包的流向如图:
- 入站数据流向:来自外界的数据包到达防火墙后,首先被PREROUTING链处理(是否修改数据包地址等),然后进行路由选择(判断该数据包应发往何处);如果数据包的目标地址是防火墙本机(如internet用户访问网关的web服务端口),那么内核将其传递给INPUT链进行处理(决定是否允许通过等),通过以后再交给系统上层的应用程序(如httpd服务器)进行响应。
- 转发数