基于嵌入式系统的网络硬件防火墙的实现
扫描二维码
随时随地手机看文章
摘要:随着网络的普及,安全问题正在威胁着每一个网络用户。由于黑客攻击和信息泄漏等安全问题并不像病毒那样直截了当的对系统进行破坏,而是故意隐藏自己的行动,所以往往不能引起人们的重视。但是,一旦网络安全问题发生,通常会带来严重的后果。目前最常见的网络安全防范工具是软件防火墙,这种防火墙的缺点就是占用有限系统资源,随着防火墙的等级提高,该防火墙将严重阻碍通信的质量。本文对网络防火墙的具体分析,来讨论通过嵌入式系统来实现网络硬件防火墙的过程。
关键词:网络硬件防火墙,嵌入式系统,UCOSII,TCP/IP,USB2.0
1 引言
网络防火墙是一种控制用户计算机网络访问的软件或硬件。通过对它的各种规则设置,使得合法的链路得以建立;而非法的连接将被禁止,同时通过各种手段屏蔽掉用户的隐私信息,以保障用户的对网络访问的安全。目前一般个人电脑是用的软件防火墙,随着微电子的快速发展,我们可以完全利用嵌入式系统来实现硬件防火墙,从而提高系统的网络访问性能。
2 网络防火墙的硬件实现
2.1 网络防火墙的硬件结构
在本系统中,主芯片采用菲利普的LPC2210,它是一款采用ARM7TDMI的核,工作频率可高达60M。网络芯片采用的Realtek公司的RTL8019AS,它是一款10M的网络芯片。PC机的通信芯片采用Cypress的USB2.0的接口芯片CY7C68013,它可以完成PC机和硬件防火墙的高速通信。在本系统中还提供2M字节的FLASH和512K字节的RAM,它们分别由芯片SST39VF160和IS61LV25616AL来实现。系统的硬件结构如图1:
2.2 主芯片LPC2210
LPC2210是基于一个支持实时仿真和嵌入式跟踪的16/32位ARM7TDMI-S的微控制器对代码规模有严格控制的应用可使用16位Thumb模式将代码规模降低超过30%而性能的损失却很小。
由于LPC2210的144脚封装极低的功耗多个32位定时器8路10位ADCPWM输出以及多达9个外部中断使它们特别适用于工业控制医疗系统访问控制和POS机 。
通过配置总线LPC2210最多可提供76个GPIO由于内置了宽范围的串行通信接口它们也非常适合于通信网关协议转换器嵌入式软modern以及其它各种类型的应用。
2.3 网络通信芯片RTL8019
RTL8019AS网络芯片是REALTEK公司生产的,基于ISA接口的10M以太网通信芯片。 它采用全双工方式来进行接收以太网数据,非常容易和微处理器接口。该芯片集成了以太网的物理层以及以太网的收发器,数据封包形式完全符合IEEE802.3标准。
2.4 USB2.0接口芯片CY7C68013
CY7C68013是Cypress公司生产的一款USB2.0的接口芯片。它内部集成了8051的核,可以单独对该芯片编程。由该芯片完成USB2.0接口,跟PC机的通信速率可以高达10Mbyte/s。我们利用该款芯片来实现一个数据FIFO,即对微处理器来讲,它只要将数据写入该FIFO,然后该芯片就会将数据按照USB2.0的协议发送给PC机。
3 网络防火墙的软件实现
在本系统中,软件一共分为两个部分:即嵌入式系统实现部分和PC机用户界面实现部分。嵌入式系统实现部分主要完成对网络封包的过滤以及完成与PC的人机界面的接口。用户可以通过USB2.0接口对网络硬件防火墙进行设置,然后嵌入式系统根据用户设置的安全规则来完成对网络封包进行过滤。
3.1 底层软件的实现
这部分软件是网络硬件防火墙实现的关键,它主要完成四个方面的工作,即对网络封包的过滤,日志的记录并发送,对用户的报警以及跟PC机的接口。在本系统中我们采用实时操作系统UCOS,配合自己编写的TCP/IP协议栈来实现对各个网络层次封包的过滤。
3.1.1 UC/OSII在ARM7下的移植
UCOSII是一个完整、可移植、可固化及可剪裁的占先式实时多任务内核。它用ANSI C编写,包含一小部分汇编代码,使之可以供不同架构的微处理器使用。移植该实时操作系统是实现底层软件的第一步。移植操作系统其实是一件不简单的事情,它必须要求开发人员对目标硬件平台有很深的了解;对UCOS的原理有相当的了解;对所使用的编译器有较深入的了解。只有具备以上三点,才能成功移植该实时操作系统。要移植UCOS,只要编写三个文件即可,它们分别是:OS_CPU.H,OS_CPU_C.C,OS_CPU_A.ASM。下面就简单介绍该移植的实现过程。
第一个是编写OS_CPU.H。在该文件中主要完成以下几个方面的工作。首先是几个数据类型的定义,如INT8U、INT16U、INT16S等,之所以这样做是因为ANSI C中并没有明确定义short、int等数据类型的实际长度,它与处理器的类型有关,隐含着不可移植性。代之以移植性强的INT8U、INT16U等数据类型,即直观又可移植。其次就是完成两个中断处理宏的定义,一个是关中断宏OS_ENTER_CRITICAL( ),另一个就是开中断宏OS_EXIT_CRITICAL( )。考虑到不是所有版本的C语言都支持C语言级的开关中断,所以编写此宏来实现C语言级的开关中断。最后就是定义栈生长方向和栈的宽度,它们分别用变量OS_STK_GROWTH和OS_STK。
第二个是编写OS_CPU_C.C。在该文件中主要完成函数OSTaskStkInit( )的编写,该函数主要完成任务堆栈的的初始化工作,如初始化各个寄存器的状态,以及用户添加的一些任务变量等。
第三个是编写OS_CPU_A.ASM。该文件的是移植的关键所在,在本文件中必须完成四个函数的编写工作,它们分别为OSIntCtxSw( ),OSCtxSw( ), OSStartHighRdy( )和OSTickISR( )。其中前两个函数是重中之重,它们必须用汇编语言编写,主要完成任务环境的切换工作。
在ARM7硬件平台下移植UCOSII要注意几个问题,首先是在移植系统函数或者系统宏时要尽量的调用软件中断,这样有助于简化移植工作;其次在初始化任务堆栈时,可以添加任务变量OSEnterSum这个变量来监视中断开关次数,这是关于移植的一个技巧;最后要注意为了方便编写中断服务程序,在移植时还要提供相应的汇编宏来简化用户层代码的编写。
3.1.2 TCP/IP协议栈在UCOSII下的实现
TCP/IP协议分为四层,分别为应用层、传输层、网络层,物理层。本系统中物理层主要包括8019的驱动程序,网络层包括IP协议和ARP协议,传输层主要包括TCP协议和UDP协议,应用层主要包括FTP、HTTP、SNMP和一些用户应用程序。由于该协议实现很复杂,这也是本系统实现的难点,下面给出该协议栈实现的函数框图:
图 3
箭头表示函数的调用关系,该协议栈是一个较完整的TCP/IP协议栈,它提供标准的SOCKET API函数,非常方便用户来实现INTERNET通信。并集成了简单的路由协议,可以跨越网关收发数据。TCP/TP协议栈的实现都是通过调用图2框图来实现的。
3.1.3 各协议层下网络封包过滤的实现
实现了TCP/IP协议,在该基础上实现网络封包的过滤只是个原理的实现问题。在实现网络封包过滤时,一般不会直接在协议里面进行数据包的过滤,而是在TCP/IP协议栈的各个层次下嵌入用户过滤层,从而实现对改层数据包的过滤。比如要将PING程序的回显屏蔽掉,只要在传输层之上嵌入用户过滤层,该用户层作用是,当传输层向用户层提交接收到的以太网数据时,该用户层必须对所有的IP数据包进行检查。若检查到某个IP数据包含有PING请求时,该用户层就会将该数据包屏蔽掉,即它不会将该数据包提交到网络层的。若IP数据包正常时,它就会将数据包直接提交到网络层。这样,添加了该层协议之后,就可以对传输层的协议包进行过滤。同样的道理,可以在各个协议层下添加用户过滤层来实现各种协议数据包的过滤。具体的实现过程见图4:
3.1.4 USB2.0接口模块的实现
该模块采用CY7C68013,该芯片本身提供高速FIFO通道来实现通信数据到USB协议的转换,只要在程序初始化时,将该芯片置成SLAVE FIFO模式,那该芯片就会扮演一个协议转换器的角色。它的工作原理见图4。
由上图可以看出,LPC2210只要周期的查询标志位,来判断FIFO是满还是空,如果接收FIFO有数据就立刻将数据读进来进行处理;若发送FIFO满,这时就不能将数据发送到FIFO中。CY7C68013的初始化程序片段如下:
IFCONFIG = 0xCB; //设置68013工作在SLAVE FIFO模式
PINFLAGSAB = 0x98; //将FLAGA,FLAGB分别设置成FIFO满和空标志
FIFORESET = 0x02; //复位各个FIFO缓冲
FIFORESET = 0x04;
FIFORESET = 0x06;
FIFORESET = 0x08;
EP2FIFOCFG = 0x00; //将FIFO设置成自动输出,并是传输数据宽度为16位
只要在CY7C68013中添加以上初始化程序,就可以将该芯片变成一个USB协议转换器,其传输速率可达10Mbyte/S。
3.2 PC机人机界面的实现
该部分软件可以称为上位机软件,主要是在WINDOWS环境下实现的用户界面。该用户界面一共分为四个部分:封包监视、日志查询、控管规则以及系统设置。这四个部分都是通过USB2.0接口与硬件防火墙进行通信,用户通过它们就可以很方便的实现对具体网络封包的过滤,对日志进行查询以及对网络控管规则的设置。
封包的监视:该模块就是指硬件防火墙根据用户设置的控制规则对网络封包进行过滤,当有网络封包被拦截之后,硬件防火墙会通过USB接口模块将拦截信息传给该模块。该模块接收到拦截信息后,就会在PC机上以一定的形式显示出来。
日志管理:该模块是用来设置查询条件并显示查询结果。该模块是非常实用的,用户可以从某个日志文件中查找符合条件的记录并显示,这极大的方便了用户对网络封包数据的分析。
控管规则:该模块是人机界面的最重要部分,它用来设置和显示应用程序以及网络数据的控管规则,这个模块需要提供对控管规则进行增加、修改和删除的功能按钮。比如,用户希望对某个IP地址或者IP范围进行屏蔽,就可以通过添加控制规则来实现该目的。
系统设置:该模块其实是一个辅助模块,由它来设置系统的配置参数。这些参数分为公共设置和报警设置,其中公共设置包括日志设置,是否自动启动以及是否显示欢迎界面。报警设置包括拦截时是否用声音报警和是否闪烁图标报警等。
4 结语
我们设计的针对个人PC用户的硬件防火墙,具有成本低,性能优越的优点,它可以极大的节约系统资源,为个人用户提供高效可靠的网络环境。随着网络的普及,个人网络硬件防火墙将会有很大的发展空间,它的出现将极大的保障用户的对网络访问的安全。