您现在的位置:e-works > 智造书屋 > 书籍列表 > 防火墙技术与应用 > NDIS简介

第七章 基于NDIS的简单防火墙实现

第一节 NDIS简介

    Windows网络驱动程序接口规范NDIS提供了标准的开发接口,可以在网络层处理数据。

    7.1.1 NDIS结构

    图7-1为NDIS的拓扑结构。

  NDIS的拓扑结构

图7-1  NDIS的拓扑结构

    NDIS支持三种类型的网络驱动程序。

    1)协议驱动程序(Protocol Drivers):协议驱动程序执行具体的网络协议,如TCP/IP等。协议驱动程序为用户层客户程序提供服务,接收来自网卡或中间驱动层程序的信息。

    2)中间层驱动程序(Intermediate Drivers):介于协议驱动和微端口驱动之间,对上面的协议层表现为一个虚拟的微端口网卡结构,对下面的网卡则表现为一个协议层的结构。无论是网卡接收或上传的数据包,还是上层下送至网卡的数据包都要经过中间层,所以它可以截获底层的封包。利用NDIS中间驱动程序可以在网卡驱动程序和传输驱动程序之间插入一层自己的处理,从而可以截获网络数据包并重新进行封包、加密、网络地址转换及过滤等操作。

    3)微端口驱动程序(Miniport Drivers):微端口驱动程序是网卡与上层驱动程序通信的接口,它负责接收来自上层的数据包,或将数据包发送到上层相应的驱动程序,同时它还完成处理中断等工作。

    最上层的NDIS协议驱动向上提供一个TDI,向下通过NDIS接口与NDIS中间驱动层的上边界交互,NDIS中间驱动层的下边界通过NDIS接口与下层的NDIS微端口交互。最后,由NDIS微端口利用NDIS接口与网卡交互。

    中间驱动程序位于微端口驱动程序和协议驱动程序之间,由于其位置上的独特性,不论是上层协议驱动程序需要发送到网络上的数据,还是下层微端口驱动程序需要指示上层接收的数据都要先经过中间驱动程序。因此,在中间驱动程序中不仅可以拦截所有的数据包,还可以实现防火墙、NAT、加密等功能。不过,编写中间驱动程序是一件比较复杂的事情。

    7.1.2 NDIS中间层驱动

    中间层驱动程序位于微端口驱动程序和协议驱动程序之间,并且具有两者的接口。图7-2展示了NDIS三层驱动的关系。

    NDIS中间层驱动与上层NDIS协议驱动连接时,它展现出NDIS微端口的特性,让NDIS协议驱动以为它是微端口驱动而绑定它。与下层NDIS微端口驱动连接时,它又展现出NDIS协议驱动的特性,把自己绑定在微端口驱动上。中间层驱动的个数没有限制,可以为不同的NDIS微端口驱动实现绑定。如果在Windows本身的协议驱动和微端口驱动之间加入一个特定中间层驱动,所有的NDIS协议驱动与NDIS微端口驱动之间的通信活动,都会经过中间层驱动的处理。现在市场上的Windows防火墙就是利用了NDIS中间层的这一特定来实现包过滤的。理论上来说中间层驱动可以截获或封装所有通过NDIS发送和接收的数据包。

    防火墙包过滤绝大多数是基于规则过滤的方式,将一系列的过滤规则构成一张过滤规则表。数据包过滤实际上是一边解析数据包,一边与过滤规则做比较。然后决定下一步的动作:拒绝、丢弃或放行。除此之外中间层驱动还可用于数据包加密、网络地址转换和网络负载均衡等。

   NDIS三层驱动的关系图

图7-2  NDIS三层驱动的关系图