首页 > 编程知识 正文

iptables防封,iptables采用的防火墙技术

时间:2023-05-04 19:56:23 阅读:214558 作者:4805

         防火墙工作在网络边缘。

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

软件防火墙的类型:

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

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

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

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

 

 

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

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

查看Linux路由表:

[root@redhat4 ~]# netstat -rnKernel IP routing tableDestination Gateway Genmask Flags MSS Window irtt Iface192.168.128.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth00.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)上,让默认链调用自定义链。

如何使用CSS设置div半透明的效果

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。