您好,欢迎来到六九路网。
搜索
您的当前位置:首页Linux防火墙扩展技术与入侵检测实现

Linux防火墙扩展技术与入侵检测实现

来源:六九路网
Linux防火墙扩展技术与入侵检测实现

关键词: 入侵 防火墙 操作系统 Linux

按照防火墙对内外来往的数据的处理方法,防火墙可以分为包过滤防火墙和应用层防火墙,包过滤防火墙工作在网络层,它只是检测包的协议头对数据包进行裁决,它运行速度快但无法对高层的协议内容进行检查,应用层防火墙则可以对高层数据进行转发和过滤并强制身份验证,但对不同的服务需要提供代理应用程序并且建立了网络瓶颈;并且将包过滤技术和多种应用技术融合到一起,构成复合型防火墙是目前国内防火墙产品的一个特点,也是防火墙今后发展的主流技术。鉴于在防火墙中整合数据包检测功能是一种良好的解决方法,它可以弥补现有防火墙的缺点并且具有像入侵检测系统一样的检测功能,本文将介绍基于Linux netfilter/iptables架构实现机制和扩展技术,在此基础上提出了扩展匹配选项实现防火墙的入侵检测功能,扩充后的防火墙可以像Snort一样具有入侵检测功能,并且可将Snort规则转化为防火墙规则实现规则集的扩充。 1 Linux防火墙的扩展netfilter/iptables的技术

Linux中防火墙Netfilter/Iptables系统主要包括两个基本组件 :定义在内核空间中的通用框架Net filter和数据包选择系统(Packet Selection).其中后者又由两部分构成:在Net filter框架上定义的数据结构“IP表”(IP Tables)和在用户空间实现的应用程序iptables.具体防火墙工作流程见[1][2]。 由于Net filter架构的加入,可以通过简单的内核模块化来实现新功能的扩展,在现有的

Netfilter/Iptables中可以通过两种方式对现有的防火墙进行扩充,一种是扩展Net filter通过编写相关内核模块调用nf_register_hook()直接在相关的钩子上注册从而获得新特性,一种是扩展IP表通过编写相关的匹配标准和目标来实现新特性;扩展IP表方式是对现有表的匹配规则的扩充与具体表无关。扩展IP表需要编写内核和用户两方的代码,内核模块提供了实际的数据包匹配规则代码,用户方代码提供了IPTABLE 新的命令行选项的共享库。 2 Linux防火墙入侵检测扩展匹配设计

目前入侵检测系统普遍采用精确的模式匹配算法,如Snort采用基于规则的方式对数据包进行规则匹配来检测多种不同的入侵行为和探测活动,这种方式简单而有效,因此可以借鉴这种思想在防火墙的匹配选项中加入匹配选项来检测数据包中的内容,由于扩展IP表具有很好地灵活性,为此可以选用这种方式扩充匹配标准来实现入侵检测模块。这种方式需要编写内核和用户空间代码,

Netfilter/Iptables的标准化提供了两方使用的重要数据结构,在实现这两部分代码时主要是填充相应的数据结构内容然后将它们注册从而扩展功能。 2.1 内核模块数据结构

新的MATCH功能可作为一个的模块,为了能使新模块能被别的模块使用,可以使用iptable提供的ipt-register-match()将该模块进行注册,新的MATCH模块的核心是ipt-match结构,它将作为ipt-register-match()的参数注册到MATCH链表中备用从而增加新的规则匹配选项。

Struct ipt_match {struct list_head list;一般设定为,由核心使用 const char name[];MTACH功能的名称,该名称必须与模块名相匹配 int (*match)();一个指向MTACH功能函数的指针,返回非0表示匹配 int (*check entry)();一个指向检查规则规范的指针,如果返回0,规则不会加入iptables void (*destroy)(); 当一个使用该MATCH的入口被删除时,该函数调用以释放所占资源 struct module me 是否是模块的定义,是模块设置为THIS_MODULE 否则NULL} 在该数据结构中重要的是match ,check entry 函数,MATCH函数将实现接收从底层传来的数据包,检查数据包实现匹配功能,如果数据包与所定义的规则相同那么返回TRUE,如果不成功返回FALSE并且可以设置参数表示数据包可以被立即被丢弃。Check entry函数指向一个检查规则规范的指针,如果返回0表明这条规则不能从用户空间接受。 3 总体设计

分布式防火墙的前两个组件从本质上说是安全授权问题。传统的授权机制包括访问控制列表(ACL)和公钥证书体系(X.509、PKI)。但是ACL不适用于开放、动态的分布式环境,证书体系在授予权限、信任模式、委托权利等方面也不能很好地满足分布式防火墙的要求。

信任管理(Trust Management)是解决分布式环境下授权、信任问题的一种新思想,它提供了适合网络应用的开放、动态、分布特性的安全解决框架。KeyNote是信任管理系统的一个实例。它提供了一种简练、灵活、易扩展和富于表达能力的语言来描述安全策略(Security Policy)和安全凭证(Security Credential),这种可编程的语言易读、易写,而且与应用无关,使KeyNote很容易与应用系统集成。本地策略绑定了公钥和直接授权;远程策略经DSA、RSA数字签名后作为安全凭证,采用了与安全策略相同的语法。安全凭证支持间接信任关系和权利委派,可以在不受信任的网络上传播、发布。因此,基于KeyNote实现防火墙的前两个组件是可行而有效的。

防火墙中应用的KeyNote体系结构中服务器进程根据外来的连接请求,调用Keynote API,将三元组(r,C,P)提交给信任管理引擎,该引擎使用通用的、与应用的一致性验证算法,这种深度优先算法采用递归的方式,试图在本地或者LDAP服务器上查找到至少一条能够满足请求的策略断言,从而做出策略是否被满足的判断结果,并返回给服务器进程。

实施策略的组件对进出主机的通信都进行了控制,不但可以保护主机应对外来的威胁,而且可以防止非法用户使用该主机访问网络,从而实现了双向过滤的功能。 4 实现

我们在Redhat Linux 7.2(kernel ver: 2.4.7)上开发、实现了分布式防火墙。Linux是当前比较流行的网络服务器平台,并且具有集成的、良好的安全特性和库,支持IPsec、SSL。同时,利用其开放的源代码,我们可以修改内核使之与KeyNote库libkeynote0(同样是开放源代码的)很好地协作。

4.1 系统结构

系统由三个组件构成:内核扩展集、用户级守候进程和设备驱动程序。我们的范例主要着眼于对TCP连接的控制。

(1) 内核扩展(Kernel Extension)。用户使用connect()和accept()这两个系统调用来创建向外的连接以及决定到来的连接请求。我们要根据策略对这两个系统调用加以修改,对某些连接进行过滤。策略上下文(Policy Context)是包含与某一连接相关的所有信息的容器,这些信息包括发起连接的用户ID,源IP地址、端口号,目的IP地址、端口号,等等。

(2) 策略驱动(Policy Driver)。这里实现了一个伪设备驱动/dev/policy作为内核中被修改的系统调用与用户空间的守候进程直接通信的渠道。我们把该驱动视为一个文件,它支持一般的文件操作,如open(),close(),read(),write(),ioctl()。

(3) 策略守候进程(Policy Daemon)。这是一个用户级进程,负责根据安全策略和安全凭证作出决策——允许还是拒绝连接。 4.2 系统流程

我们先说明对外来连接accept()进行过滤的工作流程。

第一步:首先,操作系统启动策略守候进程,并调用open()打开策略驱动。策略守候进程读取本地的包含策略和凭证的文件(当然,也可以定制进程启动时即从远程的LDAP服务器上下载、更新策略和凭证),open()将初始化有关数据结构。策略守候进程调用read(),试图从策略驱动中读取连接请求信息。如果驱动中没有请求信息,则守候进程阻塞。

第二步:服务器进程收到了连接请求,首先调用accept()。这个被修改过的系统调用形成策略上下文并提交到策略驱动中。服务器进程阻塞。

第三步:此时,read()返回请求消息,策略守候进程被唤醒。它读取该消息,调用KeyNote的一致性检查器(compliance checker)根据本地策略和凭证进行分析。如果未找到与此连接相关的策略,策略守候进程就联系远程的LDAP服务器查找、下载相应的凭证。若策略许可(即:找到策略或安全凭证,根据签名算法验证无误,并且符合凭证断言),则允许该连接,若在本地及远程服务器上均没有找到相应的策略或凭证,或者与策略、凭证的断言不符,则拒绝之。策略守候进程调用write()将自己的决策写入策略驱动中。

第四步: accept()从策略驱动中读取策略守候进程的决策,服务器进程被唤醒。若决策允许,accept()返回非负的套接字描述符;否则返回-1拒绝该连接请求。 对系统向外发起连接的connect()进行过滤的系统流程与此类似。

其它两个系统调用的功能是,close()关闭伪设备驱动,会释放已分配资源并禁用分布式防火墙;ioctl()用于内核与守候进程之间同步时的错误处理。 5 结论

分布式防火墙实施在各个网络端点上,克服了传统防火墙的缺陷,有效保护了主机,适应了新的网络应用的需要。我们构建了一个可运行的范例展示了分布式防火墙的可行性。其健壮性、有效性和可扩展性还需要作进一步的试验进行评估、测定。 参考文献:

[1] Scott Maxwell. Linux内核源代码分析[M]. 冯锐,刑飞,刘隆国,陆丽娜译. 北京:机械工业出版社,2000.

[2] 于明俭, 陈向阳, 方汉. Linux程序设计权威指南[M]. 北京:机械工业出版社,2001. [3] S M Bellovin. Distributed Firewall[J]. Login Magazine: Special Issue on Security, 1999,11:37-39.

[4] S Ioannidis, A D Keromytis, S M Bellovin and J M Smith. Implementing a Distributed Firewal[M].ACM Conference on Computer and Communication Security, Athens, Greece. November 2000.

[5] M Blaze, J Feigenbaum, J Ioannidis, and A D Keromytis. The Keynote Trust Management System version2[M].IETF RFC 2704. September 1999.

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 69lv.com 版权所有 湘ICP备2023021910号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务