码迷,mamicode.com
首页 > 其他好文 > 详细

6--企业常用防火墙iptables相关原理详解

时间:2016-04-26 20:04:05      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:

         防火墙工作在网络边缘。

         防火墙分类为软件防火墙和硬件防火墙。

软件防火墙的类型:

1.      包过滤型防火墙:主要在网络层和传输层实现(2,3,4层)。包过滤防火墙又分为两类。

1.1 简单包过滤防火墙,直接根据报文首部的某些属性作为匹配规则进行检测。匹配源IP,目标IP,源端口,目标端口等。

1.2 带状态检查的包过滤防火墙,简单包过滤无法追踪数据包的状态,这里的状态指的是连接状态,不是TCP有限状态自动机的状态。效率低于简单包过滤。

2.      应用层网关防火墙:工作在应用层,对特定的应用层协议做过滤(检查)。应用层防火墙不用关心源IP,目标IP等,直接检查应用层首部,甚至应用层数据本身。应用层防火墙检查实实在在的数据,所以安全性更高。源IP和目标IP等都是非常容易伪装的。但是应用层防火墙效率低,因为对内容的检测力度很大。而且要检查内容必须把传输层、网络层、链路层的首部都拆开,这也是降低效率的做法。

 

 

在Linux主机的内核态中维护了一张路由表。

当一个数据包到达时,在Linux内核态中,根据路由表查看该数据包是否是到达本机的,如果是,则把数据包留在本机,并送至用户态对应的进程中区。如果是从本机转发的,就由本机转发出去,从本机转发的数据表不到用户态,只在内核态逗留一下就从本机发出去了。

查看Linux路由表:

[root@redhat4 ~]# netstat -rn

Kernel IP routing table

Destination    Gateway         Genmask         Flags  MSS Window  irtt Iface

192.168.128.0  0.0.0.0         255.255.255.0   U        0 0          0 eth0

169.254.0.0    0.0.0.0         255.255.0.0     U        0 0          0 eth0

0.0.0.0        192.168.128.254 0.0.0.0        UG        0 0          0 eth0      


  技术分享

当Linux主机向外发送请求时,请求必然也会达到内核中,检查路由表,如果访问的是外部地址,通过检查路由表信息可以确定从哪一块网卡出去。

技术分享

要实现数据包的过滤(规则检测),首先要确定数据包的类型(流进、流出、转发),在查询完路由表之后就可以得知数据包的类型了。根据不同类型的数据包,放在不同的地方检查(这些检查点都在内核中)。

根据路由表查看完数据包的流向之后,就要对数据包进行检查了。

技术分享

检查数据包需要多个验证规则,验证规则的次序很重要。

由以上分析可知,防火墙的设置全部在内核态中完成,而iptables是用户态的工具,iptables本身不是防火墙,而是用来写防火墙验证规则的工具。Iptables本身也要坚持用户写的验证规则,写错了iptables不会让规则生效。

Linux内核中提供了一个框架(framework),为处理数据包提供了基本的平台,这个框架叫做netfilter。

IPtables写规则,写完送到netfilter中的某个检测点(共5个)上,就可以实现数据包的检测了。

netfilter有五个钩子函数(hook函数,位置在上图红圈处,上图未画完):

1.             内核路由表检查完数据包流向后,数据包流向本机前,有一个钩子函数,把数据包吊起来检查是否有问题。

2.             内核路由表检查完数据包流向后,数据包经本机转发前,有一个钩子函数,把数据包吊起来检查是否有问题。

3.             内核路由表检查完数据包流向后,数据包经本机发出前,有一个钩子函数,把数据包吊起来检查是否有问题。

4.             数据包刚到达网卡时,过路由表前,用钩子把数据包吊起来,对数据包的目的IP地址(DNAT)、目标端口(实现负载均衡)等做转换。

5.             数据包过路由表后,出网卡前,用钩子把数据包吊起来,对数据包的源IP地址(SNAT)等做转换。

钩子函数作用于规则链上,与上述5个钩子函数对应的链以此如下:

1、  input规则链:检查进入计算机的数据包。

2、  output规则链:检查从计算机出去的数据包。

3、  forward规则链:检查经由计算机转发的数据包。

4、  prerouting规则链:进来的数据包刚到网卡时,做地址转换、访问限制等的规则链。

5、  postouting规则链:出去的数据包刚到网卡时,做地址转换、访问限制等的规则链。

 

防火墙的主要功能:

1.       filter:过滤。

2.       nat:地址转换。

3.       mangle:不做过滤,不做地址转换,只改某一些首部格式。该功能在5个位置都可以。

4.       raw(不重点讲)

以上四个功能有个特定称呼:表(table)。四个功能作用的链:

技术分享

一个表(功能)上有多种链,每种链都有钩子函数守着。

数据包的匹配流程:
技术分享

技术分享

举例:

拒绝所有来自172.160.0.0的主机访问本机内部的web服务。

首先判断这是什么功能:拒绝访问,filter。Filter作用于三个链:input、output、forward。显然应该在input链上做。

写filter有两步:匹配条件、处理动作。

匹配条件:netfilter有很多检查模块,这些模块用于扩展netfilter匹配条件。当然Netfilter还有核心模块,即基本检测条件,检查源地址、目标地址等就属于核心模块。

Filter的处理动作:accept、drop(丢弃数据包,而且不告诉你为什么丢弃)、reject(丢弃数据包,同时向你回应拒绝的理由)。

 

除了上面介绍的5个链以外,我们可以自定义链。自定义的链是不能生效的,因为没有相应的钩子函数,为了使之生效,需要把自定义的链关联到默认链(input、output、forward、preruting、postrouting)上,让默认链调用自定义链。

6--企业常用防火墙iptables相关原理详解

标签:

原文地址:http://blog.csdn.net/chengonghao/article/details/51250906

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!