APP下载

自编防火墙控制图书馆查询机

2017-06-30黄金春梁爽

科技视界 2017年5期
关键词:防火墙

黄金春 梁爽

【摘 要】针对图书馆查询机在使用过程中出现的普遍问题,结合广西中医药大学图书馆工作人员的工作经验和多次实验尝试,提出一种以自编防火墙程序为核心并结合Windows系统服务来实现系统保护、浏览器控制访问等功能的解决方案,同时详细阐述该解决方案设计过程中的各个关键步骤。

【关键词】防火墙;查询机;Windows服务

Design the Firewall to Control the Library Inquiry Machine

【Abstract】Library inquiry machine has its special use requirements and several common problems during normal use.Combining the staff experience of GuangXi University of Chinese Medicine Library and their experiments,In this paper, we proposed a new method to control the Library inquiry machine.This paper discusses every step in this design.

【Key words】Firewall; Library inquiry machine; Windows Servers

0 引言

图书馆查询机是提供给读者方便地检索馆藏资源、查看或办理个人图书借阅情况和续借手续等服务的工具,是图书馆日常活动中最常用的工具之一,并且其数量也随着图书馆的扩大而增加。在其使用过程中,常常因为数量较大、分布较散、读者使用中较为随意、网络设置较为简单等原因,时常出现很多问题而损坏,给读者日常使用和工作人员的维护造成了很大的困扰。

1 目前控制查询机的常用方法

基于以上的原因,许多管理人员使用到了各种办法来加强对查询机的控制,同时又由于图书馆的OPAC系统在使用时用浏览器来操作,因此也使用各种办法加强对浏览器的控制。从本质上来看这些控制分为两大核心控制,一是对操作系统的控制,另一个是对网络访问的控制。

1.1 常用控制操作系统的方法

控制操作系统主要是对系统修改,删除,格式化等破坏性操作进行控制。在控制上有多种方法,(1)通过配置计算机的组策略实现[1]。(2)通过第三方软件如:360等机器管理软件[2]。(3)使用无盘工作,使用还原卡,或者自动还原软件等办法[3]。这些方法虽然都可以控制系统,但也各有不足,如使用的是第三方软件实现的办法,在实际使用中发现许多第三方的软件都附带有其它程序,如各种广告、弹窗等,使用起来不胜其烦。采用组策略的办法配置较为麻烦,如配置错误还会出现其它问题,而采用还原卡的办法会提高维护成本。因此都不是很好的办法。

1.2 常用控制网络访问的方法

控制网络访问的办法主要有,(1)通过划分子网,交换机隔离的办法在机器的ip地址做限制实现。(2)通过设置单计算机的“路由和远程访问”的办法[4]。(3)利用webbrower控件自设计浏览器的办法[5]。(4)使用第三方網络管理软件,如美萍电脑安全卫士或超级兔子实现的办法[6]。这些方法有的需要硬件配合如方法1,有的因为第三方软件附带程序而出现其它问题,虽然自设计浏览器没有附带程序,但是因为使用的控件缺陷而出现功能不足,影响opac查询系统的使用。

1.3 其他方法

使用影子系统[7]。是基于虚拟机原理的一种保护系统,它可以产生出一个和原来系统一模一样的虚拟系统(影子),所有的操作都针对这个影子,不会对真实系统产生影响。该方法比较实用但是安装起来较为麻烦。

2 自写防火墙方法的原理

2.1 Filter-hook驱动技术

从Windows 2000开始微软公司在操作系统里提供了一个可以进行ip数据包过滤的驱动就是IP过滤驱动,其对应即是ipfltdrv.sys文件。它扩展了IP过滤驱动(IP Filter Driver)的功能。Filter-Hook 驱动并不是网络驱动,它是一种内核模式驱动(Kernel Mode Driver),它提供回调函数(callback)。这样当数据包发送和接收时,允许用户注册自己的ip数据报处理函数(钩子驱动程序)判断ip数据包的处理方式[8]。为了说明是如何实现的过滤,先看下Windows下IP数据包发送过程,如图1所示发送过程主要有3个步骤,

图1 Windows下IP数据包发送过程

1)IP 数据包形成后,系统就会将其传递给防火墙挂钩驱动程序 (Ipnat.sys) 进行处理。

2)系统将数据包传递给ip筛选器驱动程序 (Ipfltdrv.sys) 进行处理。

3)系统将该数据包传递给 Ipsec.sys 进行处理。

从该过程可以看出,数据包发送的第2步要通过ipfltdrv进行控制。编写程序自定义过滤规则挂钩在其上就可实现对ip数据包的过滤处理。

3 自写防火墙方法的具体实现

3.1 设计钩子驱动程序

钩子驱动程序为系统程序,用C++开发,首先必须安装与windows对应系统DDK开发工具包,然后选择为标准的sys项目。一个钩子驱动程序是按照PacketFilterExtensionPtr数据类型定义的函数,这个函数本质上是ip数据包过滤器驱动。然后在系统提供的IP过滤驱动程序(ipfltdry.sys)中注册该函数的实体指针。当注册成功后,ip数据包将会被IP过滤驱动程序发送给钩子驱动程序来进行过滤检查,以便决定怎样进一步处理数据包。它的返回值有[8]:

(1)PF-FORWARD表示IP过滤器驱动立即把ip数据包转发到IP协议栈中,如果该数据包是本机需要的数据包,IP协议将其转发给上层协议处理,否则,如果路由功能被打开,IP将路由该数据包。

(2)PF-DROP表示IP过滤驱动将立刻向IP协议栈发出丢弃响应,IP协议将丢弃该ip数据包。

(3)PF-PASS表示IP过滤驱动处理该ip数据包,并将结果动作回复给IP协议栈。 IP过滤器驱动如何过滤数据包由它本身和包过滤API接口的设置方式来决定;如果过滤器钩子认为自己不需要处理该数据包,而是让IP过滤器驱动过滤包,则应该返回该PF-PASS。

设计该程序实质为设计两大部分,一为设计按照PacketFilterExtensionPtr数据类型定义的函数,其说明如下:

Type PF_FORWARD_ACTION(*PacketFilterExtensionPtr)

usigned char *PacketHeader, //数据包头指针

usigned char *Packet, //数据包缓冲区指针

usigned int PacketLength, //缓冲区长度

usigned int RecvInterfaceIndex,//接收数据包网卡序号

usigned int SebdInterfaceIndex,//发送数据包网卡序号

IPAddr RecvLinkNextHop, //多网卡使用

IPAddr SendLinkNextHop, //多网卡使用

);

通过如下类似代码设计过滤函数

PF_FORWARD_ACTION FP(……)

{……

if(某个条件满足){……

return PF-FORWARD

if() ……

return PF-DROP

if() ……

return PF-PASS

}

}

另一部分設计在系统提供的IP过滤驱动程序(ipfltdry.sys)中注册该函数的函数指针。通过PF_SET_EXTENSION_HOOK_INFO结构完成,它的定义如下,其中包含回调函数的指针ExtensionPointer:

typedef struct _PF_SET_EXTENSION_HOOK_INFO

{

PacketFilterExtensionPtr ExtensionPointer;

}PF_SET_EXTENSION_HOOK_INFO,*PPF_SET_EXTENSION_

HOOK_INFO;

3.2 设置驱动的I/O命令

前面完成设计是系统程序,没有控制界面,需要设计应用程序来完成控制。当应用程序要控制驱动程序去操作时,通过使用Windows API的 ioctl函数(ioctl是设备驱动程序中对设备的I/O通道进行管理的函数)来控制驱动的操作功能,并且它们之间的通讯是通过IRP(I/O request package是操作系统内核的一个数据结构)来完成,因此必须分两步实现:

(1)先设定驱动程序的ioctl自定义操作命令,使用CTL_CODE宏来创建。函数原型如下:

#define CTL_CODE(DeviceType设备类型, Function功能, Method I/O访问内存使用方式, Access访问限制);

例如:

#define START_IP_HOOK CTL_CODE(0x3000, 0x900, METHOD_

BUFFERED, FILE_ANY_ACCESS)

(2)使用IoBuildDeviceIoControlRequest函数建立所需的IRP。然后应用程序及可对驱动程序进行控制。

3.3 控制网络访问的设置

设计好钩子驱动程序后,还要设计具体的网络访问控制内容,即对数据包的控制内容,如协议号、ip地址、子网掩码、端口号及对其的处理等等。为了方便操作,可设计一个结构来存储这些内容。

如:struct IPFilter {

USHORT protocol; // 协议号

ULONG sourceIP; // 源IP地址

ULONG destinationIP; // 目标IP地址

ULONG sourceMask; // 源地址子网掩码

ULONG destinationMask; // 目的地址子网掩码

USHORT sourcePort; // 源端口号

USHORT destinationPort; // 目的端口号

BOOLEAN drop; // 包处理

};

如果有多个访问控制那么就需要填写多个结构,然后把这些结构串成一个链表。在系统工作时,对的数据包和此结构的匹配是从链表头开始比较的。因此如何排列这些结构就非常重要了,正确做法是把允许通过的放在前面,最后一个是拒绝所有的数据包。在此以我校图书馆为例来说明,我校图书馆的查询机要求可以访问内网(172.16.0.0/16),还要求可以访问学校主页(210.36.99.12),除此之外均不能访问。

1)允许内网段访问

pf2.protocol = 6;

猜你喜欢

防火墙
筑牢防火墙 系紧安全带
“一封家书”寄深情 筑牢疫情“防火墙”
全民总动员,筑牢防火墙
构建防控金融风险“防火墙”
防火墙技术在网络安全应用中的现状
计算机网络安全中防火墙技术的应用思考
智慧防火墙
海南新农合有了“防火墙”
在舌尖上筑牢抵御“僵尸肉”的防火墙
下一代防火墙要做的十件事