朱龍,劉長君
(四川信息職業技術學院 圖書館,四川 廣元628040)
隨著互聯網的迅速發展,SOHO(小型辦公和家庭辦公)用戶數量迅速增加.為了向SOHO用戶提供低成本、高性能的網絡接入和網絡防護,小型路由器和防火墻產品應運而生[1].小型路由器和防火墻大多是在嵌入式平臺上運行比較成熟的商業軟件系統,如Router OS,Mono Wall等.但使用商業軟件系統不可避免地會引入較高的軟件成本和版權問題.嵌入式系統發展到現在,其處理能力已經較為強大.在此基礎上,本文在嵌入式平臺上,設計一款同時具備路由功能和防火墻功能的網絡接入設備,并對其網絡防護性能進行測試.
設計選用的硬件平臺為華恒公司的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程序經串口控制目標板,使其通過以太網口下載宿主機可執行程序,調試、運行.
在設計的操作系統平臺選擇上,選用了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所示.
使用開源Linux內核作為操作系統,以避免采用商業軟件引入的軟件成本和版權問題.為避免出現軟件漏洞或安全問題,同時也出于對嵌入式硬件平臺Flash存儲器容量考慮,需要將2.4.18版本的Linux內核進行剪裁,以滿足系統需求.
在內核源碼路徑下運行make menuconfig命令可對Linux內核進行剪裁.在剪裁過程中,保留了Power PC處理器支持、內存管理、進程管理、系統中斷向量、文件系統支持等基本功能模塊,以及以太網口驅動、串口驅動、能源管理等擴展功能模塊.
在內核剪裁過程中,需要保證剪裁的內核對ramdisk、JFF2文件系統的支持[7].因為剪裁過的Linux內核以ramdisk系統燒寫到開發板Flash存儲器中,對JFFS2文件系統的支持則是為了實現大容量Flash存儲器可讀寫文件系統擴展.在內核剪裁過程中要保留Netfilter功能模塊;Netfilter功能模塊和Iptables防火墻配置軟件共同實現設計的防火墻功能[8].
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登錄將出現用戶登錄密碼輸入提示.
在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.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
設計實現的路由功能模塊有兩種配置方式,可以通過Web管理(Web based management,WBM)配置方式進行配置,也可以通過Telnet方式進行配置.WBM配置方式較為直觀、簡單,但配置不如Telnet后的命令行方式靈活.為了對路由模塊的功能有更全面的了解,本部分測試是Telnet登陸設備之后的結果,而WBM配置測試是與防火墻功能模塊統一進行測試的.

圖4 配置模式下的命令列表Fig.4 Configuration mode command list
Telnet方式登陸設備之后,提供了類似思科路由的通用命令行配置界面:用戶模式、特權模式、配置模式.配置模式下的命令列表,如圖4所示.
測試結果表明:路由模塊可以正常工作,并且Telnet配置方式提供了類似思科路由器的通用命令行界面,配置方式靈活,功能完備.
在對防火墻功能模塊的測試過程中,以防止外部網絡Ping入為例,對其基本防護規則進行了測試.
為了對外部網絡屏蔽內網信息,防火墻基本規則中通常會拒絕外部網絡使用Ping命令嗅探內部網絡信息.在本次測試中,在配置之前,外部計算機可以通過Ping命令嗅探到防火墻;在配置了丟棄ICMP協議數據之后,外部計算機用Ping命令嗅探防火墻提示請求超時錯誤.測試表明:本設計的防火墻功能模塊實現了基本的應用規則防護.
設計并實現一個基于開源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.