论文部分内容阅读
[摘 要] 利用SPI服务提供者接口(Service Provider Interface)进行网络数据包截获有一定的局限性,但优点也很突出,它能够最完备地得到进程访网信息,是所有Windows下个人防火墙系统数据包截获都会使用到的技术。本项目遵循SPI规范给出了一个Windows下个人防火墙系统的功能定义和模块设计。
[关键词] 个人防火墙 SPI
中图分类号:TP393
基金项目:湖北省教育厅重点项目《Windows下个人防火墙技术深入研究与实现》(B200619001)
1引言
SPI服务提供者接口使用DLL监控使用Winsock调用进行网络通信的网络数据包,SPI工作在TDI客户之上,所有的用户进程之下,非常适合做内容过滤[1]。因此,选用SPI进行在最上层截获,是Windows平台上个人防火墙系统一般都要选用的技术方案[4]。
2个人防火墙系统主体功能定义
归纳具有的功能如下:
1.封包监视
提供封包监视界面,遇到被拦截的网络数据封包,根据系统参数的设置进行报警。
2.日志记录与查询
在启动用户进程和退出用户进程时分别读入和写出封包记录到日志文件中,并提供查询界面可按时间段进行封包日志查询。
3.控管规则设置
手工添加、修改、删除控管规则,用户可对截获的询问自定义添加控管规则,并可定义允许访问的时间段和允许访问的目的主机的IP地址范围。
4.系统配置参数设置
包括是否记录日志,日志文件最大值,是否自动启动用户进程,报警设置等。并将设置完毕的新的配置保存到控管规则文件中。
5.封包截获检查过滤
该功能全部由工作于后台的SPI 2程序提供,包括提供设置工作模式和设置控管规则的接口函数,根据工作模式和控管规则对网络数据封包截获,以及发送消息通知前台用户进程取走封包。
3系统模块定义
图1给出模块划分,以前台监视进程和后台的SPI两大模块进行细分:
图1.系统模块定义
4 控管规则文件结构设计
控管规则文件定义文件名为Acl.cfg,需要存储的内容有控管规则文件头以及控管规则记录等信息。包括系统设置,应用程序设置、控管规则、控管规则附加数据(授权访问的时间段记录)和控管规则附加数据2(授权访问的远端网络IP地址段范围),下面将以C语言分别描述Acl.cfg的文件头结构和Acl控管规则记录结构[2-6]。
4.1 Acl.cfg的文件头结构描述
控管规则文件头如图3所示,定义如下:
typedef struct_ACL_HEADER
{
/*文件标志,用于对是否为系统使用的控管规则做确认,安装后定义为“MYFILTER”,在系统开始运行时加载控管规则文件时判断。*/
TCHARsSignature[16];
/*文件头结构的长度*/
DWORDulHeaderLenth;
/*以下为版本号和序列号部分*/
BYTEbMajor;
BYTEbMinor;
UINTuiSerial;
DWORDulVersion;
/*系统设置信息,这里用8位来保存工作模式、Windows启动后是否自动启动、是否发出声音和闪烁图标报警、是否启动时弹出欢迎界面等设置。实际上只安排了7位*/
BYTEbSet;
/*日志大小,允许最大为10兆*/
UINTuiLogSize;
/*更新间隔,可以仿效商业软件做成定时升级的样子,这里保留未实现*/
BYTEbUpdateInterval;
/*注册用户的信息,是email用户前部分的名字*/
TCHARsUserName[16];
/*授权码,保留未使用*/
TCHARsACode[16];
/*保留的定义的升级网站的网址,这里设定为www.hbue.edu.cn*/
TCHARsWebURL[MAX_PATH];
/*升级文件的地址,保留未使用,这里设定为http://www.hbue.edu.cn/command.txt*/
TCHARsCommandURL[MAX_PATH];
/*用户到我处注册的网页地址,保留未使用,这里设定为http://www.ynu.edu.cn/myfilter_register_user.asp*/
TCHARsUserRegisterURL[MAX_PATH];
/*用户注册的email地址*/
TCHARsEmail[MAX_PATH];
/*Acl控管规则记录开始处的偏移量,保存开始存储Acl的开始位置*/
DWORDulAclOffset;
/*保存Acl记录的总数*/
DWORDulAclCount;
/*局域网IP地址段存储区开始处的偏移量*/
DWORDulIntranetIPOffset;
/*局域网IP地址段存储的个数,用户可自定义多个*/
DWORDulIntranetIPCount;
/*定义限制访问的远端网络IP地址段存储区开始处的偏移量*/
DWORDulDistrustIPOffset;
/*定义限制访问的远端网络IP地址段存储区存储的地址段个数*/
DWORDulDistrustIPCount;
/*定义信任访问的远端网络IP地址段存储区开始处的偏移量*/
DWORDulTrustIPOffset;
/*定义信任访问的远端网络IP地址段存储区存储的地址段个数*/
DWORDulTrustIPCount;
/*自定义远端网络IP地址段存储区开始处的偏移量*/
DWORDulCustomIPOffset;
/*自定义的远端网络IP地址段存储区的地址段个数*/
DWORDulCustomIPCount;
/*定义访问时间段存储区开始处的偏移量*/
DWORDulTimeOffset;
/*定义访问时间段存储区存储的时间段个数/
DWORDulTimeCount;
} ACL_HEADER, *PACL_HEADER;
图2. 控管规则文件头结构
4.2 Acl控管规则记录结构描述
控管规则是存放于控管规则文件中的记录,C语言描述如下:
typedef struct _ACL_RECORDER
{
/*控管规则编号,未用*/
DWORDulAclID;
/*应用程序名称及路径保存被截获Winsock调用的应用程序信息*/
TCHARsApplication[MAX_PATH];
/*远端网络类型*/
BYTEbRemoteNetType;
/*访问时间段类型*/
BYTEbAccessTimeType;
/*管制动作放行或是拒绝*/
[关键词] 个人防火墙 SPI
中图分类号:TP393
基金项目:湖北省教育厅重点项目《Windows下个人防火墙技术深入研究与实现》(B200619001)
1引言
SPI服务提供者接口使用DLL监控使用Winsock调用进行网络通信的网络数据包,SPI工作在TDI客户之上,所有的用户进程之下,非常适合做内容过滤[1]。因此,选用SPI进行在最上层截获,是Windows平台上个人防火墙系统一般都要选用的技术方案[4]。
2个人防火墙系统主体功能定义
归纳具有的功能如下:
1.封包监视
提供封包监视界面,遇到被拦截的网络数据封包,根据系统参数的设置进行报警。
2.日志记录与查询
在启动用户进程和退出用户进程时分别读入和写出封包记录到日志文件中,并提供查询界面可按时间段进行封包日志查询。
3.控管规则设置
手工添加、修改、删除控管规则,用户可对截获的询问自定义添加控管规则,并可定义允许访问的时间段和允许访问的目的主机的IP地址范围。
4.系统配置参数设置
包括是否记录日志,日志文件最大值,是否自动启动用户进程,报警设置等。并将设置完毕的新的配置保存到控管规则文件中。
5.封包截获检查过滤
该功能全部由工作于后台的SPI 2程序提供,包括提供设置工作模式和设置控管规则的接口函数,根据工作模式和控管规则对网络数据封包截获,以及发送消息通知前台用户进程取走封包。
3系统模块定义
图1给出模块划分,以前台监视进程和后台的SPI两大模块进行细分:
图1.系统模块定义
4 控管规则文件结构设计
控管规则文件定义文件名为Acl.cfg,需要存储的内容有控管规则文件头以及控管规则记录等信息。包括系统设置,应用程序设置、控管规则、控管规则附加数据(授权访问的时间段记录)和控管规则附加数据2(授权访问的远端网络IP地址段范围),下面将以C语言分别描述Acl.cfg的文件头结构和Acl控管规则记录结构[2-6]。
4.1 Acl.cfg的文件头结构描述
控管规则文件头如图3所示,定义如下:
typedef struct_ACL_HEADER
{
/*文件标志,用于对是否为系统使用的控管规则做确认,安装后定义为“MYFILTER”,在系统开始运行时加载控管规则文件时判断。*/
TCHARsSignature[16];
/*文件头结构的长度*/
DWORDulHeaderLenth;
/*以下为版本号和序列号部分*/
BYTEbMajor;
BYTEbMinor;
UINTuiSerial;
DWORDulVersion;
/*系统设置信息,这里用8位来保存工作模式、Windows启动后是否自动启动、是否发出声音和闪烁图标报警、是否启动时弹出欢迎界面等设置。实际上只安排了7位*/
BYTEbSet;
/*日志大小,允许最大为10兆*/
UINTuiLogSize;
/*更新间隔,可以仿效商业软件做成定时升级的样子,这里保留未实现*/
BYTEbUpdateInterval;
/*注册用户的信息,是email用户前部分的名字*/
TCHARsUserName[16];
/*授权码,保留未使用*/
TCHARsACode[16];
/*保留的定义的升级网站的网址,这里设定为www.hbue.edu.cn*/
TCHARsWebURL[MAX_PATH];
/*升级文件的地址,保留未使用,这里设定为http://www.hbue.edu.cn/command.txt*/
TCHARsCommandURL[MAX_PATH];
/*用户到我处注册的网页地址,保留未使用,这里设定为http://www.ynu.edu.cn/myfilter_register_user.asp*/
TCHARsUserRegisterURL[MAX_PATH];
/*用户注册的email地址*/
TCHARsEmail[MAX_PATH];
/*Acl控管规则记录开始处的偏移量,保存开始存储Acl的开始位置*/
DWORDulAclOffset;
/*保存Acl记录的总数*/
DWORDulAclCount;
/*局域网IP地址段存储区开始处的偏移量*/
DWORDulIntranetIPOffset;
/*局域网IP地址段存储的个数,用户可自定义多个*/
DWORDulIntranetIPCount;
/*定义限制访问的远端网络IP地址段存储区开始处的偏移量*/
DWORDulDistrustIPOffset;
/*定义限制访问的远端网络IP地址段存储区存储的地址段个数*/
DWORDulDistrustIPCount;
/*定义信任访问的远端网络IP地址段存储区开始处的偏移量*/
DWORDulTrustIPOffset;
/*定义信任访问的远端网络IP地址段存储区存储的地址段个数*/
DWORDulTrustIPCount;
/*自定义远端网络IP地址段存储区开始处的偏移量*/
DWORDulCustomIPOffset;
/*自定义的远端网络IP地址段存储区的地址段个数*/
DWORDulCustomIPCount;
/*定义访问时间段存储区开始处的偏移量*/
DWORDulTimeOffset;
/*定义访问时间段存储区存储的时间段个数/
DWORDulTimeCount;
} ACL_HEADER, *PACL_HEADER;
图2. 控管规则文件头结构
4.2 Acl控管规则记录结构描述
控管规则是存放于控管规则文件中的记录,C语言描述如下:
typedef struct _ACL_RECORDER
{
/*控管规则编号,未用*/
DWORDulAclID;
/*应用程序名称及路径保存被截获Winsock调用的应用程序信息*/
TCHARsApplication[MAX_PATH];
/*远端网络类型*/
BYTEbRemoteNetType;
/*访问时间段类型*/
BYTEbAccessTimeType;
/*管制动作放行或是拒绝*/