2.3.2 Filter-Hook Driver简介
本文所讨论的防火墙是使用Filter-Hook Driver这种内核模式驱动(Kernel Mode Driver)开发的,下面我们就来简单介绍一下这种驱动。它只是扩展了IP过滤驱动(IP Filter Driver)的功能,可以与Ip Filter Driver互相配合,不过,我们必须了解一点,这种内核模式驱动并非是一种新的网络驱动。Ip Filter Driver是系统自带的一个驱动,它对应于ipfltdrv.sys这个驱动文件。在缺省的情况下,IP过滤驱动并不会被加载,当然我们可以手工加载Ip Filter Driver。
工作过程大体上是这样的:
(1)首先,我们在Filter-Hook Driver中提供回调函数(callback);
(2)其次,我们用IP Filter Driver来注册回调函数。在数据包在发送或者接收的时候,IP过滤驱动将会调用回调函数。当然这也只能够在TCP/IP协议上有效,同时,我们最多也只能够安装一个Filter-Hook Driver。而Filter-Hook Driver只有在filter-hook callback function为空时,才可以向Ip Filter Driver注册自己提供的回调函数,之后Ip Filter Driver会调用filter-hook callback function,来决定怎样去处理所接受或即将发送的IP报文。
(3)最后,当注册回调函数完成之后,IP过滤驱动会将Filter-Hook Driver对应的文件对象和回调函数相关联,确保只有一个Filter-Hook Driver能够使用。
有一点值得一提,从Windows xp系统开始以来,微软并不建议我们使用Filter-Hook Driver来实现防火墙。使用这种方法开发的防火墙仅仅能够过滤所有IP层或者以上
的通讯,对于更加低层的头部数据却无能为力,不能过滤掉以太帧数据。你需要用NDIS过滤器来实现防火墙,这样才能过滤更加低层的头部数据,但是如此一来开发难度对于初学者而言相对较大。我也曾试图使用NDIS过滤器来实现包过滤防火墙,来捕获所有链路层帧。不过由于知识不够,了解不深,实在无力继续,所以学习使用这种简单的方法来实现一个包过滤防火墙。
使用Filter-Hook Driver来实现防火墙是一种简单的方法。安装防火墙、执行过滤功能都很简单。虽然它缺少弹性,但是包过滤API却更加易于使用。例如:用户无法处理包的内容、用户无法使用包过滤API修改内容等。
综上而言,我最终决定使用Filter-Hook Driver来实现包过滤防火墙。我希望我对防火墙认识的好的开端,在对防火墙认识更深一步之后,再使用NDIS过滤器实现更高效的,完善的包过滤防火墙。
2.3.3 设计思路
总体设计思路如下:
一个程序必须具备与用户交互的功能,必须认真的考虑好用户接口部分,该部分应具备的功能应该有:用户操作功能菜单、过滤规则设置界面、规则显示界面、规则添加删除界面、规则读取界面。
功能模块构成如下所示:
(1)过滤规则添加以及删除功能模块;
(2)过滤规则显示功能模块;
(3)过滤规则存储功能模块;
(4)文件载入功能模块;
(5)文件存储功能模块;
(6)安装卸载功能模块;
(7)数据包过滤功能模块;
2.4 功能模块构成
2.4.1 过滤规则添加以及删除功能模块
包过滤防火墙完成数据包过滤是按照一定的规则来实现的。我们要想很好地灵活实现包过滤,就得能够实现自定义规则,按照我们用户自己所定义的规则来进行包过滤。
顾名思义,这个功能模块实现的功能就是让用户能够添加或删除过滤规则。过滤规则的内容主要有:源IP地址、源IP地址的子网掩码、源端口号、目的IP地址、目的IP地址的子网掩码、目的端口号、协议的类型,还应该包含对于数据包的行为操作——通过或者丢弃。最后,要能够把自定义的规则添加到存储功能模块。 VC++Filter-Hook Driver包过滤防火墙的编程实现(5):http://www.751com.cn/jisuanji/lunwen_21721.html