基于linux防御拒绝服务系统的研究与实现

时间:2022-03-29 12:25:27

基于linux防御拒绝服务系统的研究与实现

【摘要】:本文以下内容将对基于linux防御拒绝服务系统的研究与实现进行分析和探讨,以供参考。

【关键词】:linux;防御拒绝;服务系统

中图分类号:C932 文献标识码: A

1、前言

防火墙主动防御技术体系作为网络安全领域的一个重要分支,越来越受到业界关注。目前,基于给予各种操作系统的防火墙大多采用被动防御技术,如特征匹配、手动更新、流量控制、访问控制等。但是它们在抵御拒绝服务攻击方面,有太多的不足之处。针对于此,本文以下内容将对基于linux防御拒绝服务系统的研究与实现进行分析和探讨,以供参考。

2、linux内核防火墙分析

Linux平台为用户提供了构建防火墙的框架,用户在此框架上构建符合需要的防火墙。为了使防火墙更加安全、效率更高、更充分利用内核已有功能,需要深入分析内核源代码,提炼出重要数据结构和数据处理流程,全面掌握Linux内核的防火墙框架的实现机制。

2.1,什么是netfilter

netfilter提供了一个抽象、通用化的框架,该框架定义的一个子功能的实

现就是包过滤子系统。netfilter比以前任何一版Linux内核的防火墙子系统都要完善强大,架设一个防火墙或者伪装网关只是netfilter功能的一部分。

2.2, netfilter的总体结构

网络数据按照来源和去向,可以分为三类:流入的、流经的和流出的,其中

流入和流经的数据需要经过路由才能区分,而流经和流出的数据则需要经过投

递。netfilter是Linux2.4以后版本内核提供的防火墙内核级框架,IPv4协议栈为了实现对netfilter架构的支持,在IP packet在IPv4协议栈上的游历路线之中,仔细选择了五个参考点。在这五个参考点上,各引入了一行对NF- HOOK()宏函数的一个相应的调用。

数据包从左边进入系统,校检IP,由NF-IP-PRE-ROUTING钩子函数进行处理。然后路由判断,看数据包是转发还是进入本机。如是转发,则进入NF-IP -PORWARD钩子处理,否则进入NF IP LOC虬IN钩子处理,并在处理后传给上层协议。本地产生的数据包先经过NF-IP-LOCAL-0UT钩子处理,再进行路由判断,决定是否发至外网。所有外发包都要经过NF-IP-POST-ROUTING处理,然后再发至外网。

内核模块可以对一个或多个这样的钩子函数进行注册挂接,并在数据包经过这些钩子函数是被调用。这样模块就可以修改数据包,并向netfitter返回所需数据。

3、主动防御拒绝服务系统的设计与实现

3.1,基于Linux内核的透明防火墙

通常一个防火墙像一个路由器一样工作:内部系统被设置为将防火墙看作是通向外部网络的网关,并且外部的路由器被设置为将防火墙看作是连往内部被保护的网络的网关。而一个网桥则是一个联结一个或多个网段的设备,在各个网段之间转发数据,而网络中其他设备并不会感觉到存在一个网桥。换句话说,一个路由器将两个网络连接在一起,在两者之间传输数据;一个网桥则更像一段网线,将一个网络的两个部分连接在一起。一个透明防火墙则像网桥一样工作,而不被两端设备发现,但是同样具有过滤通过它的数据包的功能。

主动防御型防火墙的第一部分是采用Linux2.6内核下的两个模块来实现:一个是bridge桥接模块,一个是netfilter/ipmbles模块。bridge的作用就是让多块网卡变成一个桥接设备,每一个网卡就是桥的一个端口,在桥的端口之间完全透明的转发数据包。而让netfilter/iptables在转发过程中起到过滤的作用。bridge分别在2.2、2.4、2.6版本的内核中均有实现,在这里以2.6内核为基础实现,因为2.6内核不需要任何外加的补丁无缝的集成了netfilter的钩子函数,在处理数据包时又是线速的。

3.2,防御SYN洪水攻击模块

此模块实现了抵御最常见、最容易被利用又最难防御的一种DDOS攻击手法,为了提高防火墙抵御洪水攻击的效率,采取了在网络协议栈的底层将攻击包过滤,使得上层感觉不到攻击的发生,从而节省了系统资源。

抵御SYN洪水攻击较常用的方法为网关防火墙法、中继防火墙法和SYN cookies。按网络在防火墙内侧还是外侧将其分为内网、外网(内网是受防火墙保护的)。其次,设置防火墙的SYN重传计时器。超时值必须足够小,避免backlog队列被填满:同时又要足够大保证用户的正常通讯。

在dev.c的头文件netdevice.h中,加入返回值的宏定义和过滤钩子结构体声明,当模块调用中返回值是PACKET_FILTER DROP代表数据包要被过滤掉,通知内核释放该数据包,当模块调用中返回值是PACKET-FILTER-ACCEPT代表数据包经过模块安全检测通知内核继续处理。在dev.c中首先定义packet- filter-register-hook函数和packet- filter-urtregister-hook函数,分别在模块中注册和注销过滤钩子时调用。Packet-falter-register-hook函数将用户态模块的钩子结构体定义的回调函数传值给内核变量packet-filter-hook,该结构体中的函数指针被用户赋值为回调函数的地址,而注销钩子是在函数模块卸载时则将packet-filter-hook赋值空,定义完后需要用EXPORT-SYMBOL宏定义将过滤注册函数和过滤注销函数export出来,这样模块才可以调用这两个内核函数。

定义packet-filter-hook-call函数,函数实现调用从用户态模块中定义并传入的回调函数,即调用内核中过滤钩子结构体变量packet-filterhook的函数指针成员packet-filter-hookfn*hook。如果回调函数的返回值是PACKET-FILTER-DROP,说明模块通知内核释放该包,调用kfrce-skb(skb)将skb缓冲区释放返回PACKET-FILTER-DROP。否则返回PACKET-FILTER-ACCEPT。

在process-backlog函数定义中添加钩子调用点,在包传给netif-receive-skb函数前嵌入钩子点,用函数packet-filter-hook-call调用模块中定义的函数;如果函数没有定义那么继续把包传给netif-receive-skb,否则经过模块自己定义的函数进行处理。根据返回值情况处理数据包,如果返回值是PACKET-FILTER-DROP说明模块通知内核将该包丢掉,于是内核释放数据包后跳转到packet-filter-done,即跨过netif-receive-skb函数调用直接结束该数据包的处理,否则传给netif-rceeive-skb,继续由内核处理该数据包。

4、结尾

本文以上内容对基于linux防御拒绝服务系统的研究与实现进行了分析和探讨,不过,在运行本系统中发现,当受到SYN洪水攻击时,主动防御系统资源有所消耗,但是对网络正常使用没有任何影响,没有一个SYN拒绝服务攻击包通过防御系统,达到了预期防护拒绝服务攻击的目的。

【参考文献】

[1]《系统安全与入侵检测》王航等,清华大学出版社

[2] 《《网络安全从入门到精通》马树齐等,电子工业出版社

[3] 《计算机通信网络安全》冯登国等,清华大学出版社

上一篇:北方欧式外立面改造工程项目解析 下一篇:基本农田划定调查与测量