目前,互聯網通信面臨的風險主要包括兩個方面:1.信息在傳輸時被偷看或非法修改;2.公網對內部網的非法訪問和攻擊。在這樣的情況下,VPN技術脫穎而出,它可以很好地解決利用互聯網傳輸的安全問題。 IPSec是被廣泛接受用來實現VPN的技術,在企業中得到廣泛應用。IPSec在IP層上對數據包進行保護,它可提供數據源驗證、無連接數據完整性、數據機密性、抗重播和有限業務流機密性等安全服務,可以在相當程度上降低互聯網通信的風險。 IKE(Internet Key Exchange)是IPSec中至關重要的一個協議,因為IPSec需要使用它協商某些與IPSec安全有關的安全參數,包括計算機信任、加密密鑰和安全方法。IKE的主要功能就是安全聯盟(SA)的建立和維護。 本文主要從IPSec及IKE簡介、Linux VPN運行環境組建和IKE配置等三個方面進行描述,並給出利用IKE構建VPN應用的實例。 IPSec及IKE簡介 1.IPSec簡介 IPSec協議由一組協議組成,其中包括AH、ESP、IKE及加密和驗證算法。ESP用於確保IP數據包的機密性(未被別人看過)、數據的完整性及對數據源的身份驗證。此外,它還要負責對重播攻擊的抵抗。AH也提供了數據完整性、數據源驗證及抗重播攻擊的能力,但不能用它來保證數據的機密性。 IPSec的安全服務是由通信雙方建立的安全聯盟(SA)來提供的。SA表示了策略實施的具體細節,包括源/目的地址、應用協議、SPI(安全策略索引)、所用算法/密鑰/長度,它們決定了用來保護數據安全的IPSec協議、模式、算法/密鑰、生存期、抗重播窗口及計數器等。 每一個IPSec節點都包含有一個安全策略庫(SPD)。SPD決定了整個VPN的安全需求。在SPD這個數據庫中,每個條目都定義了要保護的是什麼通信、怎樣保護它,以及和誰共享這種保護。IPSec系統在處理輸入/輸出IP流時必須參考該策略庫,並根據從SPD中提取的策略對IP流進行不同的處理:拒絕、繞過或進行IPSec保護。 IPSec協議(包括AH和ESP)有傳輸模式和通道模式兩種工作模式。傳輸模式用來保護上層協議;而通道模式用來保護整個IP數據報。在傳輸模式中,IP頭與上層協議頭之間需插入一個特殊的IPSec頭;而在通道模式中,要保護的整個IP包都需封裝到另一個IP數據報裡,同時在外部與內部IP頭之間插入一個IPSec頭。 2.IKE簡介 用IPSec保護一個IP包之前,必須先建立一個SA。IKE用於動態建立SA。IKE代表IPSec對SA進行協商,並對SADB和SPD數據庫進行填充。 IKE利用PF_KEY接口與內核進行交互,以便更新內核的SPD和SADB。SADB是一個存在於內核中的邏輯實體,用來存儲、更新、刪除安全協議的安全聯盟數據。安全協議(如IPSec)利用內核中的邏輯接口來請求和獲取SA。 IKE規定了協商的兩個獨立階段。第一階段目的是通信各方彼此間建立一個通過身份驗證和安全保護的通道IKE SA。對該階段來說,IKE采用的是身份保護交換,以及根據基本ISAKMP文檔制定的野蠻交換法,即“主模式”和“野蠻模式”。它們各自做的都是建立一個保密和驗證無誤的通信信道(IKE SA),並建立驗證過的密鑰,為雙方的IKE通信提供機密性、消息完整性及消息源驗證服務。 IKE SA提供了各種各樣的參數,這些參數稱為“保護套件”,包括加密算法、散列算法、驗證方法及Diffie-Hellman組。還有一些可選屬性,它們可作為保護套件的一部分進行協商。在這些可選屬性之前,必須加上一個“存活時間”(有效期)。 對第二階段來說,IKE定義了一種快速模式交換。在第一階段建立IKE SA後,就可以利用它加密地進行IPSec SA的參數協商,如加密算法、驗證算法、密鑰和存活時間等。 Linux VPN運行環境組建 1.升級到內核2.6.0 目前發行的各種Linux版本基本都是采用2.4.x內核,Linux VPN實現大都采用Freeswan軟件。現在2.6.0內核的協議棧嵌入了IPSec處理代碼,將內核升級到2.6.0,可以利用其固有的IPSec功能。本文描述的Linux VPN實現基於Red Hat 9.0。 介紹如何將內核升級到2.6.0的文章較多,這裡僅簡單列出升級內核的基本步驟。 (1)首先從www.kernel.org網站下載2.6.0內核,將它放到/usr/src目錄下。 (2)將內核源碼釋放到/usr/src/目錄下。 #tar -zxvf linux-2.6.0.tar.gz #cd linux-2.6.0 #make mrproper #make menUConfig 注意,為了保證與內核2.4.x中文件系統兼容,必須將文件系統ext3改為必選項。並在網絡選項中選擇以下四項,使系統內核能夠支持IPSec。 <*> PF_KEY sockets <*> IP: AH transformation <*> IP: ESP transformation <*> IP: IPComp transformation 重新使用內核2.6.0啟動系統。 #make; make bzImage #make modules; make modules_install #make install (3)安裝IPSec手工配置工具。 從http://ipsec-tools.sourceforge.net/下載源碼ipsec-tools-0.2.2.tar.gz,按照幫助文件提示進行編譯。 #./configure #make; make install 這樣有了應用程序sekey,就可用它手工配置SPD和SA。 ipsec-tools自帶的IKE進程racoon運行時不能自動執行通道模式下的協商過程,必須由內核發起SA請求來觸發,所以必須事前手工輸入安全策略。這給VPN應用帶來了很大不便,因此這裡將采用後文描述的isakmpd進程。 2.安裝IKE相關應用程序 本文介紹的IKE支持預共享密鑰和X.509兩種認證模式。為了支持X.509證書認證,必須首先安裝keynotes。 安裝keynotes的步驟如下: (1)從 http://www1.cs.columbia.edu/~angelos/keynote.Html獲取源碼keynote.tar。 (2)將其解壓並編譯。 #tar -xvf keynote.tar #./configure #make 注意,編譯isakmpd時,需要keynotes的文件頭和庫libkeynotes.a。 現在可以安裝isakmpd了。isakmpd最早運行在OpenBSD上,由Thomas Walpuski將其移植到Linux平台,所以在源碼裡會看到OpenBSD的痕跡。 安裝isakmpd的步驟如下: (1)從http://bender.thinknerd.de/~thomas/IPsec/isakmpd-linux.html獲取源碼isakmpd.tgz。 (2)解壓縮並編譯。 #tar -zxvf isakmpd.tzg 修改文件GNUmakefile,將OS改為Linux。 修改文件isakmpd/sysdep/linux/GNUmakefile.sysdep,將內核2.6.0和keynotes的頭文件加入編譯路徑。 #make (3)裝備運行目錄。 #mkdir /etc/isakmpd 存放配置文件和策略文件。 #mkdir /etc/isakmpd/ca 存放CA X.509證書。 #mkdir /etc/isakmpd/certs 存放本機和其它主機X.509證書。 #mkdir /etc/isakmpd/private 存放本機的私鑰。 #cp isakmpd /usr/sbin/. 至此,支持IPSec和IKE的Linux運行環境組建完成。