Linux入门攻坚——35、Linux防火墙-iptables-1

Firewall:防火墙,就是一个隔离工具。工作于主机或网络的边缘,对于进出本主机或网络的报文根据事先定义好的检查规则做匹配检测,对于能够被规则所匹配到的报文做出相应处理的组件:这个组件可以是硬件,也可以是软件,或二者组合。

对于防火墙,大体上也分为两类:  主机防火墙、  网络防火墙

现在描述一下在没有防火墙的情况下,报文的流经过程(以一台主机为例):

外来的报文要进入主机,必须经过网卡,网卡必须在网卡驱动下工作,经过网卡后,报文被送到协议栈(一般就是TCP/UDP协议栈),在协议栈中对报文进行分析,网卡驱动和协议栈都是在内核空间的。如果报文的目的地址是本机,那么一般是在用户空间有一个进程在监听一个端口,协议栈将报文发送到该监听端口,最终由用户进程进行接收处理;如果报文的目的地址不是本机,那么协议栈要进行路由查找,找到对用的路由后,从相应的网卡接口发送出去,这就是转发。主机用户空间的进程,主动向外发送报文,报文先送到协议栈,协议栈一样要分析,最终通过查找路由,通过对应网口发送报文。

主机防火墙,主要就是在用户进程,即本机接收、发送报文时的过滤。
网络防火墙,主要就是报文经过路由后的转发,主要目的地址不是本主机。

Linux提供的iptables即能实现主机防火墙,也能实现网络防火墙,因为这个防火墙主要是针对报文的,所以iptables是包过滤型防火墙。

再来看一下加上防火墙的情况,首先要研究一下防火墙的位置,防火墙主要进行报文的过滤,所以要在能识别报文的位置上,所以防火墙是要在协议栈的某个位置上设置,这个位置在哪呢?

对于目的地址是本机的报文,经过协议栈分析后,要过滤是否能送到主机的用户进程监控端口,所以,进入本机的报文的过滤点应放在①位置,即协议栈去到用户进程之间,这叫做INPUT链;而从本机用户进程对外发送去到协议栈的报文,需要过滤是否允许发送,即位置②,叫做OUTPUT链;目的地址不是本机的报文,需要经过路由选择后进行转发,这个位置是③,叫做FORWARD链,用于过滤是否允许转发(这种报文不会进入本主机的用户空间);对于刚进入网卡的报文,有时需要进行nat或pat转换,即网络地址转换或端口地址转换,一般是需要在协议栈分析前完成转换,这个位置即为④,叫做PREROUTING链,即要在路由前进行的动作,这个很好理解,如果路由选择后再转换,路由就乱套了;最后是报文离开协议栈对外发送,也可能需要进行nat/pat,这是位置⑤,叫做POSTROUTING链,即路由后的动作。设置多个位置,就是要实现对不同情形的报文的过滤匹配。

通过上面的描述能够看出来,这些位置都是在内核空间,也就是说,防火墙是内核的内容。

各个位置及名称已经知道了,那么这里为什么名称里还要加一个链字呢?主要是在这几个位置,不是完成单一的过滤功能,而是多种功能的叠加,而且,在配置过滤规则时,可以配置多个过滤规则,这样看,就像是一个功能和规则的链(想象一下珍珠链),报文依次要穿过这个链中的每个珠子(功能或规则),每个功能或过滤规则可能对报文发生作用,也可能被跳过不发生作用。这一点有点像Django中的中间件:MIDDLEWARE=[],在settings.py中设置的,一个中间件是多个功能的列表,请求报文也是一一穿过这些个功能,这个MIDLLEWARE就相当于一个链,防火墙有5个链,相当于有5个MIDDLEWARE。

对于每个链,都需要有相应的过滤规则,而且这个规则不是固定不变的,有可能随需要不断修改,所以,就做成一个配置项,相当于一个配置文件,将一些过滤规则等记录在这个配置中,系统启动时,防火墙没有任何规则,启动后通过读取这些配置,加载规则。为了方便这个配置文件的修改和管理,于是就有了iptables,iptables主要是提供了一个用户空间的进程,方便用户管理规则配置。

所以,Linux的防火墙其实是iptables/netfilter,相当于一个C/S架构,netfilter是一个框架,主要是内核中的部分,定义了五个链及各种功能,这五个链,在程序的实现上就是一些特殊函数,叫做hooks function,钩子函数,意思是说,报文经过时,要被这些钩子函数勾过来,在这个函数中过一遍,这个钩子函数中又能定义很多其他函数,实现不同功能或进行规则匹配,报文经过这些函数或规则的匹配后,按照不同的结果被执行不同的动作,以此来达成对报文的控制。iptables是一个规则的通用工具,负债对规则的修改和管理。

前面一直在说的功能,主要是以下几种:一个是filter,即过滤功能,这是我们感官意义上的防火墙,实现包的匹配过滤;一个是nat功能,即网络地址转换;一个是mangle功能,实现报文的拆包修改封包的作用;一个是raw功能,关闭nat表上启动的连接追踪机制。

上面是主机防火墙的示意图,兼具网络防火墙的功能,即有多个网卡,开启转发功能。

对于网络防火墙,可以实现对网络内部设备的保护,但是如果网络内部主机之间相互攻击,或网络内部主机对服务器的攻击,此时这个防火墙是无能为力的。所以对服务器的保护,一般还要在服务器前增加一道防火墙(也可以使用主机防火墙,但对服务器的业务服务有性能上的损耗)。

对于一些网络攻击行为,通过防火墙的规则匹配有时很难区分其行为是恶意还是善意,或者有些还没有认识的新型网络包,规则无法配置,如何来防范呢?如,提供了一台web服务器,防火墙对访问这台服务器的报文放行,如果访问不是访问正常的页面,而是试图获取其他位置的文件呢?这时需要另一种系统:IDS(Intrusion Detection System),入侵检测系统,它能够检测进程的各种行为,但是它也只是能看到这些行为,要阻止这种报文,需要通知防火墙,即IDS-->Fire

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值