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