APP下载

开源Linux的嵌入式安全SOHO路由器设计

2015-11-19朱龙刘长君

关键词:宿主机功能模块内核

朱龙,刘长君

(四川信息职业技术学院 图书馆,四川 广元628040)

随着互联网的迅速发展,SOHO(小型办公和家庭办公)用户数量迅速增加.为了向SOHO用户提供低成本、高性能的网络接入和网络防护,小型路由器和防火墙产品应运而生[1].小型路由器和防火墙大多是在嵌入式平台上运行比较成熟的商业软件系统,如Router OS,Mono Wall等.但使用商业软件系统不可避免地会引入较高的软件成本和版权问题.嵌入式系统发展到现在,其处理能力已经较为强大.在此基础上,本文在嵌入式平台上,设计一款同时具备路由功能和防火墙功能的网络接入设备,并对其网络防护性能进行测试.

1 系统平台分析

1.1 硬件平台与交叉编译

设计选用的硬件平台为华恒公司的PPC860嵌入式开发板,包含核心板和基板.核心板搭载了MPC860处理器,16MB的SDRAM及4MB的FLASH存储器;基板为用户提供了外设接口,有10 MB以太网接口、100MB快速以太网接口,以及串口和用于调试的BDM口.

嵌入式开发过程中常用的开发方式是交叉编译,即在宿主机上编写程序,用交叉编译、汇编、链接工具形成可执行程序,然后在目标板上通过串口和以太网口以mount的方式下载宿主机中的可执行程序并调试、运行[2].在本设计中,宿主机中所使用的编译工具,是开发板自带开发套件中用于Power PC处理器指令集的powerpc-gcc编译器.在宿主机中用powerpc-gcc编译器编译、链接源程序,生成可用于开发板的可执行程序,供开发板通过交叉编译环境下载调试、运行.交叉编译环境的搭建过程如下:

1)配置宿主机NFS(Network File System,网络文件系统)和TFTP服务器;

2)通过交换机建立宿主机到目标板的网络连接(也可以用交叉线直连宿主机与目标板);

3)建立宿主机到目标板的串口连接;

4)通过minicom程序经串口控制目标板,使其通过以太网口下载宿主机可执行程序,调试、运行.

1.2 系统功能模块分析

在设计的操作系统平台选择上,选用了2.4版本的Linux内核.虽然2.6版本内核已经比较成熟,但其抢占内核和崩溃恢复机制对本设计性能提高不大,因此选择比较稳定、驱动支持较好的2.4版本Linux内核.在Linux内核之上的软件架构按照功能划分为路由模块和防火墙功能模块.路由模块采用的是Zebra-0.95a开源路由软件,同时为用户提供灵活的Telnet配置方式;防火墙功能模块则是采用了Linux系统中常见的Netfilter/Iptables防火墙架构,通过Iptables工具配置防火墙规则,然后由Linux内核中的Netfilter机制实现规则的应用.在系统软件架构的最高层提供了用户基于Web管理的方式[3-4].

图1 系统功能模块分析图Fig.1 System function module diagram

通过页面服务器Boa向用户提供Web的配置界面,以便对防火墙规则和简单路由进行配置,配置的实现则是由Boa执行后台CGI程序完成;Linux内核及相应的功能模块存储在只读的Cramfs文件系统中;用户信息及路由、安全配置文件保存在读写的JFFS2文件系统中[5-6].系统软件功能模块分析,如图1所示.

2 系统软件的架构设计

2.1 Linux内核剪裁

使用开源Linux内核作为操作系统,以避免采用商业软件引入的软件成本和版权问题.为避免出现软件漏洞或安全问题,同时也出于对嵌入式硬件平台Flash存储器容量考虑,需要将2.4.18版本的Linux内核进行剪裁,以满足系统需求.

在内核源码路径下运行make menuconfig命令可对Linux内核进行剪裁.在剪裁过程中,保留了Power PC处理器支持、内存管理、进程管理、系统中断向量、文件系统支持等基本功能模块,以及以太网口驱动、串口驱动、能源管理等扩展功能模块.

在内核剪裁过程中,需要保证剪裁的内核对ramdisk、JFF2文件系统的支持[7].因为剪裁过的Linux内核以ramdisk系统烧写到开发板Flash存储器中,对JFFS2文件系统的支持则是为了实现大容量Flash存储器可读写文件系统扩展.在内核剪裁过程中要保留Netfilter功能模块;Netfilter功能模块和Iptables防火墙配置软件共同实现设计的防火墙功能[8].

2.2 Zebra路由模块设计

Zebra是一个支持RIP,OSPF等路由协议,基于TCP/IP服务的开源路由软件.Zebra支持IPv4和IPv6,在实际应用中,具有较强的可扩展性.Zebra提供了一个高质量的多服务路由引擎,它为每个路由协议提供交互接口,并支持通用客户端命令.在设计中采用了Zebra0.95a作为路由功能模块.

Zebra的源码包中指定的用于编译、重建的编译器默认为适用于X86架构的gcc编译器.在本设计中,要将Zebra路由软件运行于PowerPC架构的嵌入式开发平台上,因此在配置源码之前,要对配置文件进行修改.在Zebra源码路径下用CC=/LinuxPPC/CDK/bin/PowerPC-gcc命令来指定配置源码所使用的编译器.其中,/LinuxPPC路径为开发板所使用开发套件在宿主机中的安装路径,/LinuxPPC/CDK/bin/PowerPC-gcc指定了用于PowerPC架构处理器的C语言编译器.

执行Zebra源码路径下的configure配置脚本,并对配置过的源码用make命令进行编译,最后用make install命令完成安装.Zebra安装完成之后还要对其配置文件/usr/local/etc/zebra.conf进行修改,使之符合系统需求,同时修改相同路径下的RIP,OSPF,BGP路由协议的配置文件.完成配置之后,以后台守护进程的方式执行Zebra路由软件——zebra-d.这样Zebra路由软件就在开发板上运行,宿主机或者同一网段内其他主机可以通过Telnet方式访问并对其进行配置.Zebra路由模块正常运行时,对其远程Telnet登录将出现用户登录密码输入提示.

2.3 Netfilter/Iptables防火墙模块设计

在1.1版本的Linux内核中提供了基本的包过滤功能,在经历过2.2版本Linux中的Ipchains防火墙机制之后,当前在2.4版本Linux内核中使用的是Netfilter/Iptables机制的第三代包过滤防火墙.其中,Netfilter组件运行于内核空间,是Linux内核的一部分,这也是在进行Linux内核剪裁过程中,要求保留Netfilter功能模块的原因.它是由一些信息过滤表组成,包含了内核用来控制数据包过滤处理的规则集.Iptables组件是一个防火墙规则配置工具,运行于用户空间,Iptables向用户提供一个命令行模式的防火墙规则管理工具,使用户可以灵活准确的插入、修改、删除数据包过滤表中的防火墙规则.

Iptables的板上移植过程与Zebra类似,首先通过指定开发板所用编译器对源码进行配置、编译和重建,然后将生成的可执行程序下载到开发板运行.

在防火墙功能模块设计过程中,着重关注两个要点:一是防火墙功能扩展;二是对防火墙规则冲突的检测和避免.

2.3.1 Iptables功能模块扩展 Iptables提供了一种灵活准确的防火墙规则配置方式,它支持部分基本的配置规则,例如数据包协议匹配、端口匹配和IP地址匹配等.但是在实际应用中对防火墙的配置需求更加复杂,例如字符串匹配的内容过滤、连接数量匹配、防护策略时间规则和P2P数据包匹配等.这些复杂的防火墙规则实现是通过安装特定的Netfilter/Iptables功能patch实现的.在本设计中使用的4种扩展规则模块.

1)Iptables string match.这个patch中增加了CONFIG_IP_NF_MATCH_STRING,允许在一个数据包里匹配一个字符串,用来进行内容过滤.

2)Iptables connlimit match.这个patch为Iptbales扩展了连接数量匹配,用于限制每个远程IP地址的并发TCP连接数量.

3)Detects some P2Ppackets.这个patch可以匹配部分P2P数据包,用于控制网络流量.这个patch结合连接跟踪,与数据包调度器配合,用于P2P流量计算和整形.

4)Iptables time match:这个patch为Iptables增加时间匹配功能,允许对其他防护规则添加时间匹配选项,可以使规则在特定时间范围内启动或关闭.

除了上述扩展功能模块,用户还可以通过指定协议类型、IP地址、端口号来自定义防护规则,设计的防火墙功能模块可以满足日常网络防护的需求.

2.3.2 防火墙规则冲突检测避免 Iptables提供防火墙规则配置,但是它只是顺序执行已有的防火墙规则,而不对规则冲突进行检测.Iptables只对防火墙规则的语法格式进行检查,如果防火墙规则前后对某一个数据包配置了接受和拒绝两种策略,那么它将执行先配置的策略,而不会提示规则冲突.为了避免出现这种配置过程中规则的前后冲突,在设计中使用了基于文本的规则冲突检测避免机制[9-11].

在本设计中,防火墙基本设置是通过Web方式来配置的,页面中采用单选框的形式保证了规则的一致性.因此,防火墙规则冲突主要存在于用户自定义规则集中.用户自定义规则主要包括六个字段:协议类型、源IP地址、源端口号、目的IP地址、目的端口号、策略.

规则冲突检测避免机制工作原理:接收Iptables的配置命令,写入防火墙规则脚本iptable.rules中,将自定义的规则字段存储到rule结构体中.rule结构体定义如下所示.

所有规则的rule以链表的形式存储.添加新自定义规则时,先逐项匹配链表中已有的规则,如果前5个字段一致,而policy字段不同,则说明新定义规则与已有规则冲突,需要修改;如果6个字段均一致,则说明新定义规则之前已经定义,属于冗余,可以删除;如果前面两种情况均不满足,则说明此规则为新规则,将此规则添加到规则脚本中.

冲突检测功能代码示意如下:

其中:p_rule为指向已有规则链表的rule结构体类型指针;n_rule为用户提交添加的nrule结构体类型变量;nrule与rule结构体类型定义区别在于nrule中没有形成链表的next指针.通过这种基于文本的规则冲突检测、避免机制避免防火墙规则集的二义性和冗余,为用户提供准确添加自定义规则的环境.

2.4 Web配置模块设计

2.4.1 Boa页面服务器简介 Zebra向用户提供了基于Telnet的远程配置方式,但是这种配置方式采用的是通用命令行,需要一定的网络技术基础.为了便于普通用户对设备进行直观简单的配置,本设计为用户提供了基于Web的页面配置方式.

本设计向用户提供了基于Web的配置方式,这首先需要一个Web页面服务器.出于硬件平台性能考虑,选用了再嵌入式开发中常用的页面服务器Boa.它是一个单任务的HTTP服务器软件,只能依次完成用户的请求而不会fork出新的进程来处理并发的连接请求,但是可以fork出新进程供CGI(Common Gateway Interface,通用网关接口)程序运行;由于设备配置过程不需要并发机制,因此Boa页面服务器符合设计需求[12].Boa页面服务器的移植过程较简单,可参考Zebra移植过程.

2.4.2 交互配置流程实现 Boa向用户提供前台HTML配置页面,同时负责接收用户配置请求,以环境变量的方式传递给后台CGI程序,由CGI程序解释配置请求,并做出相应的配置动作[13].配置有如下5个具体过程(图2).

图2 交互配置过程示意图Fig.2 Schematic diagram of interactive configuration process

1)表示Boa页面服务器生成Web配置页面,在远程配置端由HTML浏览器解释.

2)用户向HTML页面中以表单形式填写配置信息,若配置信息不合法,则输出警报,要求重新填写;若配置信息合法,则将表单提交至Boa服务器.

3)Boa服务器将用户配置信息以环境变量的方式传递给后台CGI程序处理.CGI程序获取用户配置信息是通过读取CONTENT_LENGTH环境变量实现的,CGI程序以字符串形式获取用户提交配置表单内容,然后通过对字符串的处理来获取并解释用户配置信息.

4)CGI进行系统调用,完成用户请求配置后,以HTML代码的形式向Boa服务器返回处理结果.CGI对用户请求进行处理,得到相应配置命令,经系统调用完成对路由功能或防火墙功能的配置.其中,在对防火墙功能配置过程中,系统调用之前要先调用前文所述防火墙规则冲突检测、避免机制[14].

5)Boa服务器将CGI返回的处理结果传送至用户端HTML浏览器,向用户显示当次配置请求的处理结果.

2.4.3 应用配置例析 以对ICMP协议的操作为例,分析Web方式管理的工作过程.用户通过浏览器向Boa服务器提交配置表单,在此处,表单内容很简单,包括两个单选框,Y表示阻止ICMP协议,N表示允许ICMP协议,缺省状况允许ICMP协议,用户配置点选Y项,即阻止ICMP协议.即

Boa接收到表单提交信息后,调用表单action选项中指定的后台CGI程序cfg来处理该配置表单信息,Boa以字符串形势将表单信息传递给CGI程序cfg,cfg读取环境变量,即

此时,in数组中的内容:yn=0&&submit=submit.cfg读取in[3],与“0”字符进行比对,如果匹配,则通过system系统调用执行Iptables规则,iptables-A INPUT-p ICMP-j Drop;否则,执行ACCEPT策略,然后将此条规则添加到规则脚本文件中保存.完成操作后,向Boa提交返回到用户浏览器的HTML页面,提示操作完成.WBM管理页面,如图3所示.

图3 安全SOHO路由器Web管理页面Fig.3 Secure SOHO router Web management page

3 系统性能测试

3.1 路由配置模块测试

设计实现的路由功能模块有两种配置方式,可以通过Web管理(Web based management,WBM)配置方式进行配置,也可以通过Telnet方式进行配置.WBM配置方式较为直观、简单,但配置不如Telnet后的命令行方式灵活.为了对路由模块的功能有更全面的了解,本部分测试是Telnet登陆设备之后的结果,而WBM配置测试是与防火墙功能模块统一进行测试的.

图4 配置模式下的命令列表Fig.4 Configuration mode command list

Telnet方式登陆设备之后,提供了类似思科路由的通用命令行配置界面:用户模式、特权模式、配置模式.配置模式下的命令列表,如图4所示.

测试结果表明:路由模块可以正常工作,并且Telnet配置方式提供了类似思科路由器的通用命令行界面,配置方式灵活,功能完备.

3.2 防火墙基本规则测试

在对防火墙功能模块的测试过程中,以防止外部网络Ping入为例,对其基本防护规则进行了测试.

为了对外部网络屏蔽内网信息,防火墙基本规则中通常会拒绝外部网络使用Ping命令嗅探内部网络信息.在本次测试中,在配置之前,外部计算机可以通过Ping命令嗅探到防火墙;在配置了丢弃ICMP协议数据之后,外部计算机用Ping命令嗅探防火墙提示请求超时错误.测试表明:本设计的防火墙功能模块实现了基本的应用规则防护.

4 结束语

设计并实现一个基于开源Linux的,集成了路由功能和网络防护功能的嵌入式网络接入设备.在开发板上实现了路由功能模块和防火墙功能模块.然后,分别从路由配置模块、防火墙基本规则设置两个方面进行测试.结果表明:本设计可以为用户提供直接灵活的配置方式,实现了路由功能和安全防护功能在同一开发平台的集成,所得到的网络设备可以满足小规模网络的接入和防护需求.

[1]游侃民,朱宁西.基于嵌入式Linux的SOHO路由器设计[J].微计算机信息,2009,25(11):19-31.

[2]褚文奎,樊晓光,黄培成.基于PowerPC处理器MPC8250的嵌入式Linux系统开发[J].计算机工程与设计,2006,27(1):179-181.

[3]彭涛,李声晋,芦刚,等.远程设备监控系统中嵌入式Web服务器的设计[J].机械与电子,2008(1):65-68.

[4]姚晓宇,赵晨.Linux内核防火墙Netfilter实现与应用研究[J].计算机工程,2003,29(8):112-113,163.

[5]王磊,谢维波.AdHoc网络在嵌入式Linux上的实现[J].华侨大学学报:自然科学版,2011,32(2):161-164.

[6]张祖鹰.嵌入式Linux系统的网络实现究[J].船海工程,2009,38(增刊1):83-85.

[7]刘文峰,李程远,李善平.嵌入式Linux操作系统的研究[J].浙江大学学报:工学版,2004,38(4):447-452.

[8]陈闳中.Linux在嵌入式操作系统中的应用[J].同济大学学报:自然科学版,2001,29(5):564-566.

[9]张昭理,洪帆,肖海军.一种防火墙规则冲突检测算法[J].计算机工程与应用,2007,43(15):111-112.

[10]赵波,秦涛,张新有.嵌入式防火墙规则冲突检测算法的实现[J].实验科学与技术,2009,7(6):153-156.

[11]张国定,李随意,张翰林,等.基于IPv6的SOHO宽带路由器的软件设计[J].河南教育学院学报:自然科学版,2008,17(2):33-34.

[12]张娟,张雪兰.基于嵌入式Linux的GUI应用程序的实现[J].计算机应用,2003,23(4):11-13.

[13]王金东,赵海,韩光洁,等.基于SNMP的嵌入式系统Web管理模型[J].计算机工程,2005,31(1):39-40,59.

[14]郭松,谢维波.Linux下Proc文件系统的编程剖析[J].华侨大学学报:自然科学版,2010,31(5):515-520.

猜你喜欢

宿主机功能模块内核
多内核操作系统综述①
强化『高新』内核 打造农业『硅谷』
活化非遗文化 承启设计内核
嵌入式计算机软件测试关键技术研究
Linux内核mmap保护机制研究
虚拟网络实验室在农村职校计算机网络技术教学中的应用研究
基于ASP.NET标准的采购管理系统研究
输电线路附着物测算系统测算功能模块的研究
功能模块的设计与应用研究