首页 > 代码库 > Linux之Iptables防火墙概述~
Linux之Iptables防火墙概述~
Linux的防火墙体系主要工作在网络层,针对TCP/IP数据包实现过滤和机制,属于典型的包过滤防火墙(或称之为网络层防火墙)。
Netfilter和Iptables区别:
Netfilter:指的是Linux内核中实现包过滤防火墙的内部结构,不以程序或文件的形式存在,属于“内核态”(kernel space,又称为内核空间)的防火墙功能体系。
Iptables:指的是Linux防护墙的命令工具,程序通常位于/sbin/iptables,属于“用户态”(User space,又称用户空间)的防火墙管理体系。
Iptables的规则表(优先顺序是从本文列出情况由上至下):
1. raw表:包含两条规则链:OUTPUT、PREROUTING。
它是自1.2.9以后版本的Iptables新增表,主要用于数据包是否被状态跟踪机制处理,在匹配数据时,raw表的规则要优于其他表。raw表对应的内核模块为iptable_raw。
2. mangle表:包含五个规则链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD。
主要用于修改数据包的TOS(Type Of Service,服务类型)、TTL值以及数据包设置Mark标记,以实现QOS调整以及策略路由等应用,由于需要响应的路由设备支持,因此应用并不广泛。mangle表对应的内核模块为iptable_mangle。
3. nat表:包含三个规则链:PREROUTING、POSTROUTING、OUTPUT。
主要用于修改数据包的IP地址端口号等信息。对应的内核模块为iptable_nat。
4. filter表:包含三个规则链:INPUT、FORWARD、OUTPUT。
主要用于对数据包进行过滤,根据具体的规则决定是否放行该数据包。对应的内核模块为iptable_filter。
Iptables的规则链:
1. INPUT链:访问本机数据入站规则。
2. OUTPUT链:本机外发数据出站规则。
3. FORWARD链: 接收需要通过防火墙发给其它地址数据的转发规则。
4. PREROUTING链: 数据包路由选择前的规则。
5. POSTROUTING链: 数据包路由选择后的规则。
其中INPUT、OUTPUT链更多应用在“主机防火墙”中,即主要针对服务器本机进出数据的安全机制;而FORWAR,PREROUTING,POSTROUTING链更多的应用在“网络防火墙”中,特别是防火墙服务器作为网关时使用的情况。
规则链的优先顺序:
由于默认规则链是根据规则介入时进行分类的,因此优先顺序直接取决于数据包的具体流向。
1. 入站数据流向:外界的数据包到达防火墙后,首先被PREROUTING规则链处理,之后会进行路由选择,如果数据包的目标地址是防火墙本机,那么内核将其传递给INPUT链进行处理,通过以后再交给系统上层的应用程序进行响应。
2. 转发数据流向:外界数据包到达防火墙后,首先被PREROUTING规则链处理,之后会进行路由选择,如果数据包的目标地址是其他外部地址,则内核将其传递给FORWARD链进行处理,然后再交给POSTROUTING规则链进行处理。
3. 出站数据流向:防火墙本机向外部地址发送的数据包,首先被OUTPUT规则链处理,之后进行路由选择,然后传递给POSTROUTING规则链进行处理。
规则链内各条防火墙规则的优先顺序:
数据包经由每条规则的处理过程,从上往下依次匹配,如果找到一条能够匹配的数据包规则,则不再继续检查后面的规则;如果比对完整个规则链,也找不到和数据包相匹配的规则,就按照规则链的默认策略进行处理。