Linux防火墙研究
防火墙的分类
-
包过滤防火墙
-
代理服务型防火墙
网络资料重点
一、总结下防火墙的实现原理:
Netfilter在TCP/IP协议栈中安装钩子点(HOOK),Iptables用来在钩子点处安放钩子函数(HOOK FUNCTION),每个钩子函数用来过滤处理数据包。
二、规则表
按照防火墙策略的不同用途,iptables管理着四个不同的规则表,其功能分别由独立的内核模块实现。
filter表,包含三个规则链:INPUT,FORWARD,OUTPUT。
filter 表主要用于对数据包进行过滤,根据具体的规则决定是否放行该数据包。
filter 表对应的内核模块为 iptable_filter。
nat表,包含三个规则链:PREROUTING,POSTROUTING,OUTPUT。
nat (Network Address Translation,网络地址转换)表主要用于修改数据包的IP地址、端口号等信息。
nat 表对应的内核模块为 iptable_nat。
mangle表,包含五个规则链:PREROUTING,POSTROUTING,INPUT,OUTPUT,FORWARD。
mangle表主要用于修改数据包的TOS(Type Of Service,服务类型)、TTL(Time To Live,生存周期)指以及为数据包设置Mark标记,以实现Qos(Quality Of Service,服务质量)调整以及策略路由等应用,由于需要相应的路由设备支持,因此应用并不广泛。
mangle 表对应的内核模块为 iptable_mangle。
raw表,包含两条规则链:OUTPUT、PREROUTING。
raw表是自1.2.9以后版本的iptables新增的表,主要用于决定数据包是否被状态跟踪机制处理。在匹配数据包时,raw表的规则要优先于其他表。
raw表对应的内核模块为iptable_raw。
Ps:在iptables的四个规则表中,mangle表和raw的表应用相对较少,下面主要介绍filter表和nat表的防火墙应用
三、规则链
在处理各种数据包时,根据防火墙规则的不同介入时机,iptables供涉及5种默认规则链,其应用时间点分别对应如下。
INPUT链:当接收到防火墙本机地址的数据包(入站)时,应用此链中的规则。
OUTPUT链:当防火墙本机向外发送数据包(出战)时,应用次链中的规则。
FORWARD链:当接收到需要通过防火墙发送给其他地址的数据包(转发)时,应用次链中的规则。
PREROUTING链:在对数据包作路由选择之前,应用次链中的规则。
POSTROUTING链:在对数据包作路由选择之后,应用次链中的规则。
Ps:期中INPUT、OUTPUT链更多的应用在“主机防火墙”中,即主要针对服务器本机进出数据的安全控制;而FORWARD、PREROUTING、POSTROUTING链更多的应用在“网络防火墙”中,特别是防火墙服务器作为网关使用时的情况。
四、当数据包抵达防火墙时,将依次应用raw、mangle、nat和filter表中对应链内的规则;当数据包进入系统时,系统首先根据路由表决定将数据包发给哪一条链,则可能有以下3种情况:
- 数据包的目的地址是本机,则系统将数据包送往INPUT链,如果通过规则检查,则该包被发给相应的本地进程处理;如果没有通过规则检查,系统将丢弃该包。
- 数据包的上的地址不是本机,也就是说这个包将被转发,则系统将数据包送往FORWARD链,如果通过规则检查,该包被发给相应的本地进程处理;如果没有通过规则检查,系统将丢弃该包。
- 数据包是由本地系统进程产生的,则系统将其送往OUTPUT链,如果通过规则检查,则该包被发给相应的本地进程处理;如果没有通过规则检查,系统将丢弃该包。
五、linux防火墙工作流程
Linux防火墙的工作流程.JPG重要理解点
-
iptables只是一个管理内核包过滤的工具,可以加入、插入或删除核心包过滤表格(链)中的规则。实际上真正执行这些过滤规则的是netfilter(linux核心中一个通用架构)及其相关模块(如iptables模块和nat模块)。
netfilter是linux核心中一个通用架构,它提供一系列的“表”(tables),每个表由若干“链”(chains)组成,而每条链中可以由一条或数条规则(rule)组成。可以这样理解,netfilter是表的容器,表是链的容器,链是规则的容器。
系统缺省的表为“filter”,该表中包含了INPUT、FORWARD和OUTPUT 3个链。每一条链中可以有一条或数条规则,每一条规则都是这样定义的:“如果数据包头符合这样的条件,就这样处理这个数据包”。当一个数据包到达一个链时,系统就会从第一条规则开始检查,看是否符合该规则所定义的条件,如果满足,系统将根据该条规则所定义的方法处理该数据包;如果不满足则继续检查下一条规则;最后,如果数据包不符合该链中任何一条规则,系统就会根据该链预先定义的策略(policy)来处理该数据包。 -
内核2.4之后使用全新的内核包过虑管理工具--iptables
-
filter表、nat表和mangle表,分别用于实现包过滤,网络地址转换和包重构的功能.raw表是1.2.9以后版本的iptables新增的表
-
通常情况下,只要在规则链中找到一条相匹配的规则,则不再继续检查该链内后面的规则;但使用LOG处理方式的规则是一个特例,因为LOG只是一个辅助动作,并没有真正的处理数据包
问题
- 防火墙策略一般分为两种,一种叫“通”策略,一种叫“堵”策略,通策略,默认门是关着的,必须要定义谁能进。堵策略则是,大门是洞开的,但是你必须有身份认证,否则不能进。所以我们要定义,让进来的进来,让出去的出去,所以通,是要全通,而堵,则是要选择。设置拦截规则的时候是使用通还是堵的形式?
- python-iptables库可以选择用python写,也可以使用shell写