2.4.2 过滤规则显示功能模块
这个功能模块的作用是显示用户添加的规则,在显示界面能够对规则进行操作,实现删除、安装或者卸载的操作,方便的让用户操作,展现过滤规则。
2.4.3 过滤规则存储功能模块
这个功能模块的作用是存储用户添加的过滤规则,当用户对规则进行操作的时候,接收操作信息并处理规则。简单举个例子:当用户选择安装规则的时候,就将用户所选规则安装到Ip Filter Driver,在Ip Filter Driver接受此规则后,按照规则过滤数据包。
2.4.4 文件存储功能模块
这个功能模块的作用是将用户添加的过滤规则存下来,以文件的形式储存。用户在添加规则之后,可以选择将这条规则保存成一个文件,后缀名为.rul。下次打开防火墙的时候,如果需要使用该条过滤规则,那么可以可以直接加载该规则,进行包过滤。
2.4.5 文件载入功能模块
这个功能模块是相对于文件储存功能模块而言的,用户通过该功能模块导入一个后缀名为.rul的过滤规则文件,方便进行包过滤。
2.4.6 安装卸载功能模块
从前文中对于使用Filter-Hook Driver开发的包过滤防火墙的分析中,我们可以知道,要实现过滤数据包,就必须将定义的规则发送给Ip Filter Driver,然后才能过滤。
将规则发给Ip Filter Driver,就必须通过安装模块,才能将规则传给Ip Filter Driver。相对应的,卸载功能模块就是将已安装的规则从Ip Filter Driver中删除。
2.4.7 数据包过滤功能模块
数据包过滤功能模块的作用就是决定数据包的去留。
3 包过滤防火墙的实现
3.1 数据过滤钩子驱动模块
在前文中,我们简单介绍了Filter-Hook Drive,它是实现过滤接口上的进进出出的数据的。主要有以下五个步骤:
1、建立内核模式驱动Filter-HookDrive;
2、取得指向IPFilterDriver的指针;
3、利用该指针,发送特殊的IRP,对过滤函数进行安装;
4、过滤数据;
5、结束过滤,撤消过滤函数。
我们可以通过执行PacketFilterExtensionPtr类型的函数时,建立一个过滤钩子。
Filter-Hook Drive在Ip Filter Driver之中注册过滤钩子的实体指针的时候,会给它的过滤钩子提供符号地址,而不是名字,当然这个过滤钩子还可以选择任何名字。
在一个过滤钩子对接受到的数据包或者是发出的数据包进行特定的动作的时候,Ip Filter Driver也会给过滤钩子发送来检查怎么对包进一步处理的信息。接下来,过滤钩子对数据包开始检测,使用PF_FORWARD、PF_DROP或者PF_PASS返回响应代码给Ip Filter Driver发送信息,告诉接下来怎么处理。
下面简述PF_FORWARD、PF_DROP、PF_PASS这三个返回响应代码的含义:
PF_FORWARD:规定给Ip Filter Driver立刻返回forward(转发)响应给IP栈。本地包会由IP转发到栈顶。如果数据包的目标IP地址是外部主机且路由允许,那么允许发送到对应路由。
PF_DROP:规定给Ip Filter Driver立刻返回drop响应给IP栈。随后IP栈将丢弃该数据包。
PF_PASS:规定给Ip Filter Driver过滤该包并返回该结果响应给IP栈。在Packet Filtering API中的设置将会决定Ip Filter Driver如何处理该数据包。在过滤钩子检测到无法处理的包时,将会允许Ip Filter Driver在过滤包的时候,返回pass响应。
3.2 创建内核模式驱动
Filter-Hook Driver属于内核模式驱动,所以,怎么去创建内核模式驱动是我们首先需要去了解的。 VC++Filter-Hook Driver包过滤防火墙的编程实现(6):http://www.youerw.com/jisuanji/lunwen_21721.html