黃超++趙建平++韋勇鋼
摘 要:文章分析研究Netlink機(jī)制對(duì)于Linux內(nèi)核IPSec服務(wù)的支持,提出了一種基于Netlink消息通信機(jī)制的IPSec VPN實(shí)現(xiàn)方案。方案由內(nèi)核空間IPSec服務(wù)模塊和用戶空間IPSEC管理軟件組成,兩者通過Netlink進(jìn)行通信,并為IPSec VPN提供了靈活、高效的IKE協(xié)商機(jī)制和安全可靠IP數(shù)據(jù)包傳輸保障。
關(guān)鍵詞:Netlink;IPSec VPN;IKE協(xié)商;用戶空間;內(nèi)核空間
中圖分類號(hào):TP393 文獻(xiàn)標(biāo)識(shí)碼:A
1 引言
VPN即虛擬專用網(wǎng),是利用開放、不安全的公用網(wǎng)絡(luò)作為基本傳輸介質(zhì),通過采用隧道封裝、信息加密、用戶認(rèn)證和訪問控制等技術(shù)形成專用的虛擬鏈路實(shí)現(xiàn)對(duì)信息傳輸過程的安全保護(hù),從而向用戶提供類似專用網(wǎng)絡(luò)安全性能的網(wǎng)絡(luò)服務(wù)技術(shù)。
IPSec是Internet工程任務(wù)組IETF定義的一套安全標(biāo)準(zhǔn),包括一系列安全協(xié)議,為IP數(shù)據(jù)包傳輸提供安全保障。Linux 虛擬地址空間為0到4G,劃分為內(nèi)核空間和用戶空間兩部分。內(nèi)核空間包括最高的1G字節(jié),而用戶空間包括較低的3G字節(jié)。
基于Linux 的IPSec VPN由內(nèi)核IPSEC服務(wù)模塊和用戶空間IPSec管理軟件組成。內(nèi)核IPSec模塊在內(nèi)核提供IP數(shù)據(jù)包的地址驗(yàn)證、數(shù)據(jù)完整性校驗(yàn),數(shù)據(jù)機(jī)密性保護(hù)等業(yè)務(wù),用戶空間IPSec管理軟件執(zhí)行IKE密鑰協(xié)商,密鑰配置等業(yè)務(wù)。其中IKE密鑰協(xié)商用于產(chǎn)生通信雙方可用于加解密的工作密鑰。
Netlink是Linux提供的一種消息通信機(jī)制,用于內(nèi)核空間和用戶空間之間的信息傳輸。本文提出了一種基于Netlink消息通信機(jī)制的IPSec VPN的實(shí)現(xiàn)方案。本方案重點(diǎn)是設(shè)計(jì)用戶空間IPSec管理軟件,實(shí)現(xiàn)安全策略管理配置等功能,內(nèi)核模塊采用Linux內(nèi)核原生IPSec服務(wù)模塊。
2 Netlink機(jī)制對(duì)IPSEC的支持
內(nèi)核的 IPSEC 處理邏輯中包含SAD 和 SPD 兩個(gè)策略數(shù)據(jù)庫,其中 SAD 中包含了所有有效的用于保護(hù)通信的安全關(guān)聯(lián)(SA),SPD中包含了使用的安全策略(SP)。所有數(shù)據(jù)包在進(jìn)行IPSEC處理時(shí)都要查詢SAD和SPD,根據(jù)查詢到的策略來執(zhí)行相應(yīng)的安全處理。每個(gè)IP數(shù)據(jù)包的處理都需要SP和SA結(jié)合起來使用。內(nèi)核在處理IP數(shù)據(jù)包時(shí),如果應(yīng)用于該IP數(shù)據(jù)包的安全策略不完整,則通過Netlink向應(yīng)用層發(fā)送SAD和SPD的管理請(qǐng)求消息。
Linux內(nèi)核空間和用戶空間使用一種特殊的套接字Netlink Socket實(shí)現(xiàn)雙向通信。Linux內(nèi)核中xfrm_user.c文件實(shí)現(xiàn)了針對(duì)IPSec的Netlink通信模塊,主要是對(duì)SAD和SPD的策略管理。xfrm.h文件中定義了14種SAD和SPD的策略管理消息類型,包括新增、刪除、修改、查詢SA和SP,清除所有SA、SP等。
3 IPSEC-VPN數(shù)據(jù)包處理流程
基于Netlink的IPSec VPN的IP數(shù)據(jù)包處理流程如圖1所示。
IPSec管理軟件初始化,讀取解析網(wǎng)絡(luò)地址配置文件,分析需要建立IPSec VPN的IP地址,端口號(hào)等信息。通過IPSec管理軟件內(nèi)的Netlink消息通信模塊用戶端(以下簡稱Netlink用戶端)發(fā)送“新建SP”消息到內(nèi)核,Netlink消息通信模塊內(nèi)核端(以下簡稱Netlink內(nèi)核端)接收消息并解析出配置信息,調(diào)用內(nèi)核SPD數(shù)據(jù)庫管理接口將新的SP注入到SPD數(shù)據(jù)庫。
在內(nèi)核層,當(dāng)有IP數(shù)據(jù)包到來時(shí),判斷合法性,并根據(jù)該包的目的地址、源地址、端口等信息檢索SPD,根據(jù)檢索到的SP對(duì)IP數(shù)據(jù)包進(jìn)行安全策略處理。SPD中對(duì)于數(shù)據(jù)包的處理策略包括“應(yīng)用”“繞過”“丟包”。判斷安全策略的行為是“丟棄”,終止對(duì)IP數(shù)據(jù)包的外出處理,包被丟棄;如果行為是“繞過”,做透明處理,不應(yīng)用安全處理。如果安全策略的行為是“應(yīng)用”,則進(jìn)入第三步。
根據(jù)SAD建立dst_entry鏈表。sk_buff是Linux操作系統(tǒng)網(wǎng)絡(luò)部分的一個(gè)重要數(shù)據(jù)結(jié)構(gòu),在整個(gè)網(wǎng)絡(luò)傳輸中作為數(shù)據(jù)載體。dst_entry是sk_buff中的重要組成部分,鏈表記錄了應(yīng)用于該IP數(shù)據(jù)包的路由,dst_entry中的成員函數(shù)Output指明了數(shù)據(jù)包的具體協(xié)議處理函數(shù)。內(nèi)核IPSEC模塊根據(jù)SP查詢對(duì)應(yīng)SA,如存在,則根據(jù)SA建立dst_entry鏈表。如果沒有,則進(jìn)行第四步,協(xié)商并建立SA。
內(nèi)核通過Netlink內(nèi)核端向應(yīng)用層發(fā)送“請(qǐng)求SA”消息,消息包括需要協(xié)商的對(duì)端IP地址等。Netlink用戶端接收到消息并解析為“請(qǐng)求SA”類型以后,發(fā)起IKE密鑰協(xié)商,IKE成功以后,向內(nèi)核發(fā)送“新建SA”消息,消息包括IP地址,SPI,所采取的保護(hù)算法,加密參數(shù)等。內(nèi)核接收解析消息,調(diào)用內(nèi)核SAD數(shù)據(jù)庫管理接口將新的SA注入到SAD數(shù)據(jù)庫。隨后根據(jù)SA建立dst_entry鏈表。
內(nèi)核調(diào)用Output成員函數(shù)進(jìn)行IP數(shù)據(jù)包的安全協(xié)議處理。處理完成后,將數(shù)據(jù)包放回協(xié)議棧進(jìn)行后續(xù)的處理。
4 IPSec管理軟件設(shè)計(jì)與實(shí)現(xiàn)
在前文對(duì)于Linux內(nèi)核IP數(shù)據(jù)包處理流程分析的基礎(chǔ)上,本文設(shè)計(jì)了用戶友好的IPSec管理軟件。用戶空間IPSec管理軟件結(jié)構(gòu)框圖如圖2所示,由功能模塊組成:主程序模塊、IKE密鑰協(xié)商模塊、策略管理模塊、策略配置模塊、日志記錄模塊、Netlink通信模塊。
4.1 主線程模塊
(1)IPSec策略初始化:讀取并解析網(wǎng)絡(luò)地址配置信息,根據(jù)地址規(guī)劃配置SP到內(nèi)核SPD數(shù)據(jù)庫,并將配置的SP狀態(tài)信息告知策略管理模塊。地址配置信息包括VPN的IP地址,受IPSEC保護(hù)的應(yīng)用服務(wù)器IP地址,IPSec處理模式等,其中處理模式包括“傳輸模式”和“隧道模式”兩種。
(2)提供用戶友好界面以及IPSec VPN的各項(xiàng)操作指令,包括IPSEC啟動(dòng)、配置、重啟、查詢等。
(3)提供面向用戶的操作接口,包括靜態(tài)協(xié)商、策略管理等。
4.2 IKE密鑰協(xié)商模塊
支持靜態(tài)和動(dòng)態(tài)兩種模式IKE協(xié)商。靜態(tài)模式下,用戶通過本軟件手動(dòng)觸發(fā)IKE協(xié)商功能,動(dòng)態(tài)模式下,IPSec管理軟件在接收到內(nèi)核的“請(qǐng)求SA”消息以后才會(huì)觸發(fā)IKE協(xié)商。IKE協(xié)商模塊接收協(xié)商請(qǐng)求并執(zhí)行,成功后將SA配置信息告知策略管理模塊,并調(diào)用策略配置模塊配置SA到內(nèi)核SAD數(shù)據(jù)庫。
4.3 策略配置模塊
根據(jù)需要配置的SA和SP的具體參數(shù),并根據(jù)內(nèi)核xfrm.h定義的14種消息格式將請(qǐng)求封裝成“策略配置消息”,通過Netlink通信模塊發(fā)送到內(nèi)核。
4.4 Netlink通信模塊
(1)Netlink通信初始化:創(chuàng)建套接字,指明PF_Netlink 協(xié)議簇、Netlink_XFRM 協(xié)議。
(2)接收到“策略配置消息”,進(jìn)一步封裝成內(nèi)核Netlink消息格式,并發(fā)送到內(nèi)核。
(3)接收并解析來自Netlink內(nèi)核端的Netlink消息,根據(jù)消息內(nèi)容具體處理。例如接收到“請(qǐng)求SA”消息,則觸發(fā)IKE模塊發(fā)起協(xié)商。
4.5 策略管理模塊
(1)在本地維護(hù)一個(gè)安全策略數(shù)據(jù)庫,記錄已存在的SA和SP,提供面向用戶的策略查詢接口。
(2)提供面向用戶的安全策略管理接口,用戶可以手動(dòng)對(duì)策略進(jìn)行增刪改查等操作,模塊接收到用戶請(qǐng)求后,首先通過Netlink通信模塊發(fā)送“策略配置消息”到內(nèi)核,更新內(nèi)核的數(shù)據(jù)庫,然后在本地更新數(shù)據(jù)庫,實(shí)現(xiàn)應(yīng)用層和內(nèi)核層的策略信息同步。
4.6 日志模塊
(1)記錄運(yùn)行日志,包括用戶操作過的所有指令。
(2)協(xié)商信息,包括協(xié)商對(duì)端的IP地址,協(xié)商成功記錄等。
5 結(jié)束語
本文提出的實(shí)現(xiàn)方案為IPSec VPN提供了靈活方便的IKE密鑰協(xié)商,安全策略管理,數(shù)據(jù)包安全處理機(jī)制,目前已經(jīng)在Linux3.1操作系統(tǒng)上應(yīng)用,經(jīng)測試運(yùn)行穩(wěn)定,符合預(yù)期要求。在基于Linux操作系統(tǒng)的項(xiàng)目開發(fā)中,用戶空間和內(nèi)核空間的通信研究具有重要意義,本文提出的實(shí)現(xiàn)方案可以為同類軟件開發(fā)提供思路。
參考文獻(xiàn)
[1] 高海英,薛元星,辛陽.VPN技術(shù)[M].北京:機(jī)械工業(yè)出版社,2004.
[2] 余青霓.Linux防火墻[M].北京:人民郵電出版社,2000。
[3] 高月松,錢晶.基于Netfilter框架的IPSec VPN網(wǎng)關(guān)實(shí)現(xiàn)[J].泰州職業(yè)技術(shù)學(xué)院學(xué)報(bào),2009(3):9-10.
[4] 章曉明,杜春燕,陸建德.Netlink 消息通信機(jī)制的研究和在 IPsec VPN 中的應(yīng)用[J].微電子學(xué)與計(jì)算機(jī),2007, 24(2): 135-138
[5] 周莉.Linux 2.6 IPsec 分析與 VPN 網(wǎng)關(guān)的研究與實(shí)現(xiàn)[D].蘇州大學(xué),2005.6.
作者簡介:
黃超(1987-),男,碩士研究生;主要研究方向和關(guān)注領(lǐng)域:計(jì)算機(jī)網(wǎng)絡(luò)、信息安全。
趙建平 (1977-),男,碩士研究生;主要研究方向和關(guān)注領(lǐng)域:嵌入式系統(tǒng)、信息安全。
韋勇鋼(1983-),男,本科學(xué)士;主要研究方向和關(guān)注領(lǐng)域:移動(dòng)通信信息、物聯(lián)網(wǎng)安全。