朱 琪
(阜陽幼兒師范高等專科學校 科學與健康系 ,安徽 阜陽 236015)
目前,許多企業和政府機構都建立了自己的內部網絡作為整個部門的信息系統骨干。全球信息和網絡安全問題日益突出,大多數網絡安全機制,包括防火墻、入侵檢測、漏洞掃描、CA、VPN、反病毒等都不能有效地解決網絡安全問題[1]。由于缺乏有效的解決方案,大多數用戶都采用將內部網絡與外部公共網絡斷開以保護私有信息。然而,這種方法也為信息交換帶來了不便,不利于發揮互聯網信息共享的功能。物理隔離技術是為了確保私有網絡的安全性,并實現私有網絡和公共網絡之間的信息交換[2]。內部網絡和外部網絡之間的物理隔離能夠真正保證內部網絡信息的安全。此外,物理隔離為內部網絡劃定了清晰安全的邊界,增強了網絡的可控性,便于內部管理。鑒于目前嚴峻的網絡安全形勢以及物理隔離技術的優勢,國家保密部門發布《國家計算機信息系統網絡保密規定》,明確表示:涉及國家秘密的計算機信息系統不應直接或間接地連接到互聯網或其他公共信息網絡[3]。根據這一規定,政府和一些企業必須在私有網絡和公共網絡之間實現物理隔離。目前,物理隔離技術已經成為電子政務、電子商務和國家重要網絡中必須采用的一項技術。因此,設計高性能、高可靠性物理隔離技術的網絡隔離器對于改善網絡安全狀況和保護網絡信息安全具有重要意義。
在物理隔離系統中,內部網絡不應該直接或間接地連接到外部公共網絡(一般是指互聯網)。為了實現不同安全級別網絡之間的數據交換,隔離系統需要中斷內部網絡與外部網絡的連接,取消對TCP/IP協議的支持,不依賴于操作系統,并采取訪問控制、認證、內容過濾等安全檢查機制。基于雙網物理隔離的需求,本文設計了物理網絡隔離系統的框架,以確保內部網絡信息的安全。雙網物理隔離系統的框架如圖1所示。

圖1 雙網物理隔離系統框架設計
隔離器需要實現物理隔離功能,因此要將網絡通信協議的每一層斷開。TCP/IP參考模型是目前廣泛使用的網絡通信協議族,由四個協議層組成:數據鏈路層、網絡層、傳輸層和應用層。在實現協議層的斷開之前,需要將物理鏈路斷開。
實現物理鏈路的斷開:當內部網絡需要傳輸數據時,外部網絡與雙網物理隔離系統的物理鏈路就會斷開,而內部網絡則會保持與隔離系統的連接,內部網絡將數據傳輸到隔離系統進行處理,然后內部網絡與隔離系統的物理鏈路就會斷開,而外部網絡與隔離系統進行連接,此時隔離系統將內部網絡的數據傳輸到外部網絡。
實現TCP/IP協議棧的斷開:TCP/IP協議棧的數據鏈路層、網絡層、傳輸層以及應用層斷開實質上就是數據包封裝的逆過程。一個包含數據鏈路層、網絡層、傳輸層和應用層頭部的數據包格式如圖2所示。

以太網頭部IP頭部TCP頭部應用層頭部原始數據以太網尾部
圖2數據包格式
當數據包從內部(或外部)網絡進入雙網物理隔離系統時,隔離系統會先對數據包進行TCP/IP協議棧的斷開,即將圖2數據包中以太網頭部尾部、IP頭部、TCP頭部以及應用層頭部剝離。剩下的原始數據經過隔離器處理后,又會被重新封裝并轉發到外部(或內部)網絡。這樣的操作可以預防針對協議層的網絡攻擊,從而保護了信息的安全。
為了保證雙網物理隔離系統的數據傳輸的速度,本系統使用PCIe(Peripheral Component Interconnect Express)總線[4]來連接系統的各個部分。PCIe是一種高速串行計算機擴展總線標準,是舊標準PCI總線的擴展版本。與舊標準相比,PCIe具有較高的最大系統總線吞吐量、較小的管腳數、更好的總線設備擴展性能、更詳細的錯誤檢測和報告機制(Advanced Error Reporting,AER[5]),并支持本地熱插拔功能。本雙網物理隔離系統采用Linux操作系統,其原因在于Linux系統具有以下的優勢:Linux內核實現了完備且詳細的網絡協議棧;開源的特性為Linux提供了大量的軟件資源;Linux的驅動程序易于編寫和修改;Linux運行效率高,對計算機的要求低;支持多任務、多用戶。
硬件架構為雙網物理隔離系統提供了數據傳輸的條件,也是保證信息安全、高效的基礎。硬件系統需要設置有較大的緩存來,而且需要支持高速的數據傳輸,以確保網絡隔離系統的性能。基于隔離系統的需求,本系統選擇以下的硬件構成主要的硬件系統:
● 邏輯控制芯片:采用FPGA芯片,型號為Intel Cyclone 10系列10CL016YU484C8G;
● 緩存芯片:采用由Integrated Device Technology公司生產的SRAM,型號是IDT71V416S/L;
● 橋接芯片:采用由PLX公司生產的PCIe芯片,型號是PEX 8696。
雙網物理隔離系統的硬件架構如圖3所示。

圖3系統硬件架構
在Linux環境下編寫驅動程序的其中一種方法是:將驅動程序作為內核模塊來實現。這種方法不需要重新編譯內核來添加新的驅動程序。下面將給出動程序模塊的主要實現過程。
3.1.1 加載/卸載驅動程序模塊 加載模塊的主要代碼如下所示:
static int my_driver_init(void)
{ return 0;}
module_init(my_driver_init);
卸載模塊的主要代碼如下所示:
static void my_driver_exit(void)
{ return;}
module_exit(my_driver _exit);
3.1.2 注冊設備 Linux的設備文件通常保存在/dev文件夾,可以通過將參數寫入設備文件將參數傳遞給相應的模塊。設備文件有兩種:字符文件和塊文件。字符文件是非緩沖的,而塊文件是緩沖的。字符文件允許逐字讀寫數據,而塊文件只允許寫入整個數據塊。Linux系統有一種方法可以通過主設備號來識別設備文件,主設備號用于識別服務于設備文件或一組設備的模塊,以及用于識別主設備號指定的一組設備中的特定設備的次設備號。在驅動程序代碼中,可以將這些數字定義為常量,也可以動態分配。實現注冊字符設備的函數如下:
int register_chrdev (unsigned int major,
const char *name,
const struct fops);
file_operations *
3.1.3 指定設備名稱 注冊設備需要指定設備的名稱和主要編號,然后將file_operations結構與設備關聯。本系統所使用的Linux內核版本是2.6.32,其file_operations的結構定義如下:
struct file_operations {
struct module *owner;
loff_t (*llseek) (struct file *, loff_t, int);
ssize_t (*read) (struct file *, char *, size_t, loff_t *);
...... };
3.2.1 抓包程序設計 本系統使用數據包捕獲函數庫libpcap進行抓包程序的設計,該函數庫也可以用于數據包過濾、協議分析等場景。抓包程序的主要步驟如下所示:
● 綁定網絡設備:抓包的第一步是指定相關的硬件設備,即綁定網卡,可以使用libpcap函數庫中的函數pcap_lookupdev()實現;
● 打開網絡設備:綁定設備后,需要打開網絡設備,創建一個嗅探會話,使用函數pcap_open_live()實現;
由于缺少科學的激勵考核機制,忽視人的核心利益和心理需要,嚴重影響員工的工作積極性,忽視人的潛能釋放和長遠發展[2]。在用人方面缺乏科學的績效評價機制,提升往往取決于上司的個人好惡,使客觀、公平、公正的選人原則難以體現,缺乏與績效考核掛鉤的收入分配機制。長此以往,員工工作情緒低落,滿足感缺失,最終導致大量的人才流失。
● 設置過濾器:當嗅探會話建立后,先使用函數pcap_compile()編譯過濾器,然后使用pcap_setfilter()設置過濾器;
● 捕獲數據包:本系統選擇函數pcap_loop()進行抓包。
3.2.2 數據包剝離和封裝程序設計 捕獲數據包后就可以對數據包進行協議層頭部的剝離操作,首先需要先定義協議層頭部的數據結構,然后才能對它們進行類型轉換。數據鏈路層采用以太網協議,其頭部結構包含了協議類型、源MAC地址和目的MAC地址;網絡層采用IP協議,主要結構包括了版本號、源IP地址、目的IP地址等;傳輸層采用傳輸控制協議(TCP),主要的結構有源端口號、目的端口號、序列號、檢驗碼等等。實現類型轉換的主要代碼如下所示:
const struct ethernet_header *ether_header;
const struct ip_header *ip_header;
const struct tcp_header *tcp_header;
const char *payload;
ether_header = (struct ethernet_header*)(packet);
ip_header = (struct ip_header *)(packet + 14);
ipsize = IP_HL(ip)*4;
printf(“error ”);
return;}
tcp_header = (struct tcp_header *)(packet + 14 + ipsize);
tcpsize = TH_OFF(tcp)*4;
if (tcpsize < 20) {
printf(“error ”);
return;}
payload = (u_char *)(packet + 14 + size_ip + tcpsize);
以數據包從外部網絡進入內部網絡為例,數據包協議層的剝離和重新封裝過程如圖4所示。

圖4 數據包協議層剝離和封裝過程

a.發送前測試文本 b. 接收到的文本

圖6對比實驗拓撲圖7數據傳輸效率對比結果
安全性和高效性是雙網物理隔離系統主要的兩個性能需求。由于篇幅有限,本小節僅對高效性的評估結果進行闡述。首先,當數據包從外部網絡(或內部網絡)經過物理隔離系統到達內部網絡(或外部網絡)時,需要對數據包的協議層頭部進行剝離和封裝(如圖4),這一操作可能會破壞數據包中原始數據的完整性。對此,我們在內部網絡隨機生成一個測試文本文件,并將該測試文件通過隔離系統發送到外部網絡,評估結果如圖5所示。圖5a是發送前的文本,圖5b則是接收到的文本,對比結果圖可知,本文的隔離系統能夠保證數據包的完整性。
接下來利用對比實驗對隔離系統的數據傳輸效率進行評估,比較內、外網絡直接相連接(如圖6a所示)以及內、外網絡通過本隔離系統進行連接(如圖6b所示)的平均時延,實驗進行50秒,時延的采樣周期是1秒,評估結果如圖7所示。從圖7可以看出,在內外網之間引入本隔離系統會帶來額外的平均時延。但是由于平均時延的單位是毫秒,而且引入的時延并不多,因此本隔離系統并不會對數據傳輸帶來明顯的影響。
本文設計了基于信息安全的雙網物理隔離系統,實現內部網絡與外部網絡的物理隔離,保護了內部網絡的信息安全。但是,本文僅僅完成了物理隔離系統的框架設計,未來的研究工作主要對以下幾個方面進行完善:增加常用協議的剝離和封裝功能,加入病毒、惡意軟件的檢測和防御模塊等等。