標籤:

IPSec VPN原理與配置

本篇主要講解IPSEC VPN相關理論概念,工作原理及配置過程。從安全和加密原理入手,講解了IPSEC 在vpn對等體設備實現的安全特性,如數據的機密性、數據的完整性,數據驗證等。重點分析IKE階段1和階段2的協商建立過程,為VPN等體間故障排查打下堅實的理論基礎,最後,分別在Cisco的路由器和防火牆上實現IPSEC VPN的應用和配置,並結合企業需求進行案例分析和講解。

一、VPN概述

VPN技術起初是為了解決明文數據在網路上傳輸帶來的安全隱患而產生的。TCP/IP協議族中的很多協議都採用明文傳輸,如telnet、ftp、tftp等。一些黑客可能為了獲取非法利益,通過諸如竊聽、偽裝等攻擊方式截獲明文數據,使企業或者個人蒙受損失。

VPN技術可以從某種程度上解決該問題。例如,它可以對公網上傳輸的數據進行加密,即使黑客通過竊聽工具截獲到數據,也無法了解數據信息的含義。VPN也可以實現數據傳輸雙方的身份驗證,避免黑客偽裝成網路中的合法用戶攻擊網路資源。

1、VPN的定義

VPN(virtual private network,虛擬專用網)就是在兩個網路實體之間建立的一種受保護的連接,這兩個實體可以通過點到點的鏈路直接相連,但通常情況下他們會相隔較遠的距離。

VPN技術的作用:

(1)通過使用加密技術防止數據被竊聽。

(2)通過數據完整性驗證防止數據被破壞、篡改。

(3)通過認證機制實現通信雙方身份確認,來防止通信數據被截獲和回放。

此外,VPN技術還定義了:

* 何種流量需要被保護。

* 數據被保護的機制。

* 數據的封裝過程。

實際工作環境中的VPN解決方案不一定包含上述所有功能,這要由具體的環境需求和實現方式決定。而且很多企業可能採用不止一種的VPN解決方案。

2、VPN的連接模式

VPN技術有兩種基本的連接模式:隧道模式和傳輸模式。這兩種模式實際上定義了兩台實體設備之間傳輸數據時所採用的不同的封裝過程。

1)傳輸模式

傳輸模式一個最顯著的特點就是:在整個VPN的傳輸過程中,IP包頭並沒有被封裝進去,這就意味著從源端到目的端數據始終使用原有的IP地址進行通信。而傳輸的實際數據載荷被封裝在VPN報文中。對於大多數VPN傳輸而言,VPN的報文封裝過程就是數據的加密過程,因此,攻擊者截獲數據後將無法破解數據內容,但卻可以清晰地知道通信雙方的地址信息。

由於傳輸模式封裝結構相對簡單(每個數據報文較隧道模式封裝結構節省20位元組),因此傳輸效率較高,多用於通信雙方在同一個區域網內的情況。例如:網路管理員通過網管主機登錄公司內網的伺服器進行維護管理,就可以選用傳輸模式VPN對其管理流量進行加密。

2)隧道模式

隧道模式中,VPN設備將整個三層數據報文封裝在VPN數據內,再為封裝後的數據報文添加新的IP包頭。由於新IP包頭中封裝的是VPN設備的ip地址信息,所以當攻擊者截獲數據後,不但無法了解實際載荷數據的內容,同時也無法知道實際通信雙方的地址信息。

由於隧道模式的VPN在安全性和靈活性方面具有很大的優勢,在企業環境中應用十分廣泛,總公司和分公司跨廣域網的通信、移動用戶在公網訪問公司內部資源等很多情況,都會應用隧道模式的VPN對數據傳輸進行加密。

3、VPN的類型

通常情況下,VPN的類型分為站點到站點VPN和遠程訪問VPN。

1)站點到站點VPN

站點到站點VPN就是通過隧道模式在VPN網關之間保護兩個或者更多的站點之間的流量,站點間的流量通常是指區域網之間(L2L)的通信流量。L2L的VPN多用於總公司與分公司、分公司之間在公網上傳輸重要業務數據。

對於兩個區域網的終端用戶來說,在VPN網關中間的網路是透明的,就好像通過一台路由器連接的兩個區域網。總公司的終端設備通過VPN連接訪問分公司的網路資源。數據包封裝的地址都是公司內網地址(一般為私有地址),而VPN網關對數據包進行的再次封裝過程,客戶端是全然不知的。

2)遠程訪問VPN

遠程訪問VPN通常用於單用戶設備與VPN網關之間通信連接,單用戶設備一般為一台pc或小型辦公網路等。VPN連接的一端為PC,可能會讓很多人誤解遠程訪問VPN使用傳輸模式,但因為該種VPN往往也是從公網傳輸關鍵數據,而且單一用戶更容易成為黑客的攻擊對象,所以遠程訪問VPN對於安全性要求較高,更適用於隧道模式。

要想實現隧道模式的通信,就需要給遠程客戶端分配兩個IP地址:一個是它自己的NIC地址,另一個是內網地址。也就是說遠程客戶端在VPN建立過程中同時充當VPN網關(使用NIC地址)和終端用戶(使用內網地址)。

當遠端的移動用戶與總公司的網路實現遠程訪問VPN連接後,就好像成為總公司區域網中的一個普通用戶,不僅使用總公司網段內的地址訪問公司資源,而且因為其使用隧道模式,真是的ip地址被隱藏起來,實際公網通信的一段鏈路對於遠端移動用戶而言就像是透明的。

二、加密演算法

加密就是一種將數據轉換成另外一種形式的過程,如果不了解用於加密的演算法,解密幾乎是不可能的。舉例而言,A給B發信息內容為」I LOVE YOU」,由於擔心C從中間截獲,於是,A與B協商了一種簡單的加密方法:把所有的字母按照26個字母順序+3,」I LOVE YOU」就變成了」L ORYH BYX」,即使C截獲了數據也無法得知信息的真正含義。這裡「+3」就可以理解為一種簡單的加密演算法。

實際VPN設備所使用的演算法是相當複雜的,一般會涉及一些較為複雜的數學演算法,利用這些演算法可以實現數據加密、數據完整性驗證、身份驗證等VPN的基本功能。一般來說,可以將這些加密演算法分為兩大類:對稱加密演算法和非對稱加密演算法。

1、對稱加密演算法

對稱加密演算法使用同一秘鑰對信息提供安全的保護。假設對稱加密演算法的秘鑰為「K」,客戶端傳輸的明文數據為「M」,VPN網關加密後的數據為「C」,而E和D為加密和解密函數,則數據加密過程如下:

(1)發送發和接收方共享秘鑰「K」,也就是說加密和解密使用同一把鑰匙。

(2)發送方的VPN網關通過加密函數E將明文數據M加密成為密文數據C。

(3)接收方的VPN網關通過解密函數D將數據還原為明文數據M。

目前常見的對稱加密演算法有DES、3DES、AES等。

1)DES演算法

DES加密演算法曾經在VPN領域應用很廣,屬IBM的研發產品,其秘鑰長度為4位,其中8位用於奇偶校驗,所以實際有效長度為56位。雖然該演算法目前還沒找到更好的方法破解,但是通過暴力破解已經可以在較短時間內攻破DES演算法,所以在實際工程實施過程中(如果沒有設備硬體性能支持)已經不建議使用該種演算法。

2)3DES演算法

NIST在1999年研發了3DES演算法,理論上3DES演算法是DES演算法的增強版本,因為3DES使用了三個階段的DES,即同時使用了三個不同的56位秘鑰,所以相當於產生了一個168位的有效秘鑰長度。這種級別的秘鑰目前還沒有計算機有能力在短時間內破解,而且其執行效率雖然在軟體環境中比較慢,但在硬體環境中並不明顯。

3)AES演算法

3DES演算法雖然目前為止是安全的,但隨著計算機硬體的更新,總有一天要被攻破,NIST在2002年研發了AES演算法欲取代DES和3DES演算法。該演算法比3DES演算法更安全,它支持128、192和256位秘鑰長度,有效的秘鑰長度可達上千位。更重要的是,AES演算法採用了更為高效的編寫方法,對CPU佔用率較少,所以諸如IPSEC VPN等時機工程的實施過程中趨向於使用AES來提供更好的加密功能。

2、非對稱加密演算法

1)演算法的原理

非對稱幾秒演算法使用公鑰和私鑰兩個不同的秘鑰進行加密和解密。用一個秘鑰加密的數據僅能被另一個秘鑰解密,且不能從一個秘鑰推出另一個秘鑰。假設接收方的公鑰和私鑰分別為P和Q,客戶端傳輸的明文數據為M,VPN網關加密後的數據為C,而D、E分別為加密和解密函數,數據加密過程如下:

(1)通信雙方交換公鑰(主要是把接收方的公鑰傳輸給發送方)。

(2)發送方的VPN網關通過公鑰將明文數據M加密成為密文數據C。

(3)接收方的VPN網關通過自己的私鑰解密數據。整個過程私鑰始終沒有在網路中傳輸。

2)演算法的優、缺點

非對稱加密演算法的最大優勢在於其安全性。目前為止,還沒有任何一種方法可以在合理的時間範圍內攻破該種演算法。為了方便理解,在這裡舉例說明。

假如有兩個數字分別為25169和29663,如果要求將兩個數相乘,可以輕鬆地得出答案:746588047。但如果給出的是74588047,要求猜出該數字是由哪兩個數相乘得出的,就需要花費很長時間才可能得出答案。如果數字很大,那麼可能花費一生的時間也難以得出答案,這就是非對稱加密演算法的安全性所在。更重要的是,私鑰永遠不可能被任何其他設備得到。

非對稱加密演算法也不是完美無缺的,由於其計算過程複雜,它的計算效率要比對稱加密演算法低很多(大約慢1500倍)。

3)DH演算法

常用的非對稱加密演算法有:RSA(使用三位數學家名字的首字母來命名)、DSA(digital signature algorithm,數字簽名演算法)、DH(diffie-hellman,迪菲赫爾曼)。前兩種常用於驗證功能,而DH一般被用來實現ipsec中的internet秘鑰交換(IKE)協議。

DH演算法的原理與傳統意義上的非對稱加密演算法有優點區別:通信雙方交換公鑰後,會用自己的秘鑰和對方的公鑰通過DH演算法計算出一個共享秘鑰,然後雙方會使用這個共享秘鑰加密傳輸數據。從演算法原理看,可以說DH演算法已經將對稱加密演算法和非對稱加密演算法綜合在一起。

DH演算法支持可變的秘鑰長度,由於公鑰和私鑰的長度不同,因此通過DH演算法計算出的共享秘鑰的有效長度也就不同。這些都是通過DH演算法的秘鑰組定義的。Cisco的路由器只支持DH組1、2和5。其中DH組1的有效秘鑰長度為768,DH組2的有效秘鑰長度為1024,DH組5的有效秘鑰長度為1536。秘鑰的有效長度越長,安全性也就越強。同時CPU的資源佔用率也就越高。因此,選擇合適的DH組要從網路的安全需求和設備本身的性能兩個方面考慮。

3、秘鑰交換

在探討加密演算法的過程中,忽略了一個關鍵的問題:秘鑰的交換。許多有經驗的網路工程師使用對稱加密演算法加密數據時,都會擔心秘鑰如何實現安全共享。

一種解決方案就是帶外共享,即通信雙方通過一張磁碟、一張紙或打一個電話方式實現秘鑰的共享。這種方案最大的缺陷是實施過程花費的時間較長。如果管理的VPN設備數量較多,或者公司對於秘鑰的安全性要求較高,需要一小時更換一次秘鑰,這種方案基本就不可能實施了。

另一種解決方案就是帶內共享。即通過telnet、ssh等連接方式通過網路傳輸秘鑰。這種方法可以提高共享秘鑰的效率,但前提是必須保證傳輸秘鑰的通道絕對安全,而傳輸秘鑰本身就是為了建立一條安全的通道,這似乎陷入一種死循環中。

其實,解決這個問題並不困難,可以通過非對稱加密演算法(如前面提到的DH演算法)加密對稱加密演算法的秘鑰,在用對稱加密演算法加密實際要傳輸的數據。如果公司需要一小時更換一次秘鑰,只需讓非對稱加密演算法一小時重新計算一次即可,而且由於非對稱加密演算法的私鑰不會在網路上傳輸,其安全性也可得到保障。

三、數據報文驗證

數據報文驗證包括兩個方面:數據來源驗證(身份驗證)和報文完整性驗證。

1、HMAC功能實現驗證功能

在VPN領域,對數據進行來源和完整性驗證通常是藉助散列演算法實現的,HMAC(hash-based message authentication codes,散列消息代碼)功能專門開發用來處理數據包相關的驗證問題,它使用一個共享的對稱秘鑰來產生固定的輸出結果——數字簽名。HMAC屬於單向散列演算法(hash演算法)的一個子集,區別於前面講解的加密演算法,散列演算法是不可逆的,即加密後的數據是無法還原的。

傳統意義上的散列函數對於保障數據傳輸的安全性存在缺陷,即網上的竊聽者可以截獲傳輸的數據,然後篡改數據內容,並通過散列演算法得到固定的輸出,這樣接收方就不可能知道有人篡改過數據。而HMAC功能讓共享秘鑰成為散列函數中的一個變數,通過計算得到固定的輸出——數字簽名,這樣及時竊聽者截獲數據,由於沒有共享秘鑰,他無法再篡改後得到正確的數字簽名,所以HMAC可以防篡改(完整性驗證)。同樣,由於共享秘鑰只有真正的通信雙方具有,所以HMAC功能也可以實現身份驗證。

HMAC演算法的原理如下:

1)雙方共享執行hash演算法的秘鑰key。

2)路由器A的用戶數據與共享秘鑰key通過hash演算法得到數字簽名。

3)路由器A將數字簽名和用戶數據一同傳輸給路由器B。

4)路由器B執行相同的演算法過程得到數字簽名。

5)路由器B比對數字簽名是否一致

如果數據在傳輸過程中被篡改或損壞,接收方通過HASH演算法計算出來的數字簽名就會和發送方的數字簽名不同,於是便可以得知數據的內容在傳輸過程中被篡改。同理,如果竊聽者想冒充一個通信方,他雖然可以偽造通信方的身份信息,但絕對無法偽造身份信息和共享秘鑰計算後的數字簽名。

2、MD5和SHA

MD5和SHA是HMAC的兩種常用演算法,在包括VPN的很多領域得到廣泛應用。

MD5(message-digest algorithm 5,信息-摘要演算法)在RFC1321中有明確規定,它創建了一個128位的簽名,是目前HMAC功能中應用最為廣泛的一種演算法。例如:以前我們講過的RIPV2,OSPF等很多路由選擇協議都使用該演算法做驗證。MD5執行速度較快,但其安全性相對SHA稍差一點。

SHA(secure hash algorithm,安全散列演算法)是由NIST(美國國家標準與技術研究院(National Institute of Standards and Technology,NIST)直屬美國商務部)開發的,且已成為美國國家標準,一般成為SHA-1,它可以產生160位的簽名(20位元組的長度)。

目前,已有人證明不同的輸入數值通過MD5計算可以得到相同的數字簽名,說明MD5的簽名可能具有一定程度的虛假性。SHA也出現類似的問題,並且有人宣稱數字簽名理論上是可以偽造的。因為存在這種安全隱患,現在已經開發了SHA-256和SHA-512等(有時統稱為SHA-2),它們具有更長的簽名長度,對於目前的計算機水平來說,可以消除上述安全隱患。

四、IPSEC VPN

IPSEC技術實現VPN是目前較為廣泛的一種應用,本節將探討IPSEC的建立過程及配置方法,實際工作中可能會遇到多個廠家的設備,有時需要網路工程師分析分體、排除故障,因此,除了查閱各廠商的專業文檔外,了解VPN建立的各個階段也是尤為重要的。

1、IPSec連接

對等體之間建立IPSec VPN的連接需要三個步驟。

1)流量觸發IPSec

一般來說,IPSec建立過程是由對等體之間發送的流量觸發的,一旦有VPN流量經過VPN網關,連接過程便開始建立了。當然,手工配置也可以實現這一過程。在配置設備實現此步驟前,網路工程師需要明確哪些流量需要被「保護」。

2)建立管理連接

IPSec使用ISAKMP/IKE階段1來構建一個安全的管理連結。這裡需要注意的是,這個管理連接只是一個準備工作,它不被用來傳輸實際的數據。在配置設備實現此步驟前,網路工程師需要明確設備如何實現驗證,使用何種加密及認證演算法,使用哪種DH組等問題。

3)建立數據連接

IPSec基於安全的管理連接協商建立安全的數據連接,而ISAKMP/IKE階段2就是用來完成這個任務的,數據連接用於傳輸真正的用戶數據。在配置設備實現此步驟前,網路工程師需要明確使用何種安全協議,針對具體的安全協議應使用加密或驗證演算法,以及數據的傳輸模式(隧道模式或傳輸模式)等問題。

經過IPSec建立的三部曲後,VPN流量便可以按照協商的結果被加密/解密了。但是VPN連接並不是一次性的,無論是管理連接還是數據連接都有一個生存周期與之關聯,一旦到期連接便會被終止。如果需要繼續傳輸VPN數據,連接需要重新被構建,這種設計主要是出於安全性的考慮的。

2、ISAKMP/IKE階段1

ISAKMP描述了秘鑰管理的架構,它定義了消息的格式和秘鑰交換協議的機制,以及構建連接的協商過程。而IKE是一個混合型的協議,它定義了秘鑰的產生、共享和管理。IKE使用UDP埠500,一般來說,ISAKMP和IKE關鍵字可互換使用。

ISAKMP/IKE階段1的交換過程有兩個模式:主模式和積極模式。積極模式比主模式快,主模式比積極模式安全。

無論VPN的類型是站點到站點還是遠程訪問,都需要完成三個任務。

(1)協商採用何種方式建立管理連接。

(2)通過DH演算法共享秘鑰信息。

(3)對等體彼此進行身份驗證。

在主模式中,這三個任務是通過六個數據報文完成的:前兩個數據包用於協商對等體間的管理連接使用何種安全策略(交換ISAKMP/IKEc傳輸集);中間的兩個數據包通過DH演算法產生並交換加密演算法和HMAC功能所需的秘鑰,最後兩個數據包使用預共享秘鑰等方式執行對等體間的身份驗證。這裡需要注意的是,前四個報文為明文傳輸,從第5個數據報文開始為密文傳輸,而前四個數據包通過各種演算法最終產生的秘鑰用於第5、地6個數據包及後續數據的加密。

1、ISAKMP/IKE階段1建立過程:

1)交換ISAKMP/IKE傳輸集

* ISAKMP/IKE傳輸集就是一組用來保護管理連接的安全措施,有些書籍稱之為IKE策略或ISAKMP策略,它主要包括以下幾個方面。

* 加密演算法:DES,3DES或AES。

* HMAC功能:MD5或SHA-1。

* 設備驗證的類型:預共享秘鑰(也可以使用RSA簽名等方法)。

* Diffie-Hellman秘鑰組:cisco支持1、2、5、7(cisco的路由器不支持秘鑰組7)。

* 管理連接的生存周期。

設備可能會有不止一個傳輸集,如果設備發起來接,它會將傳輸集列表(包括所有傳輸集)發送到遠端對等體設備進行依次對比,直到找到匹配的結果。如果對比所有傳輸集後沒有發現匹配的傳輸集,管理連接將無法建立,ipsec連接失敗。例如,兩端設備都只有一個傳輸集,且一端配置DES加密演算法,另一端配置了3DES加密演算法,就會導致IPSEC建立失敗。如果給其另一端多配置一個傳輸集使用DES演算法,對等體會自動找到與之匹配的傳輸集,管理連接便會建立起來。

如果使用cisco產品實現VPN連接,在ISAKMP/IKE傳輸集中除了生存周期,其他項必須匹配才能建立連接。如果對等圖之間的生存周期不同,對等體會使用雙方生存周期數值較小的一個。這同樣是ipsec的規則。但有些廠商沒有遵循這一規則,因此如果遇到cisco與其他廠商設備構建ipsec連接時,應注意確保ISAKMP/IKE傳輸集中所有參數的匹配。

2)通過DH演算法實現秘鑰交換

第一步只是協商管理連接的安全策略,而共享秘鑰的產生與交換就要通過Diffie-Hellman來實現。

DH演算法屬於非對稱加密演算法,因此它將產生公鑰和私鑰對的組合,且彼此共享公鑰。VPN對等體用對方的公鑰和自己的私鑰通過一種功能運算產生一個安全的共享秘鑰,即使有人截獲數據,也會因為沒有私鑰而無法對出共享秘鑰。

3)實現設備之間的身份驗證

設備身份驗證時最常使用的方法就是預共享秘鑰,即在對等體之間通過帶外的方式共享秘鑰,並存儲在設備的本地。設備驗證的過程可以通過加密演算法或HMAC功能兩種方法實現,而加密演算法很少用於身份驗證,多數情況都會通過HMAC功能實現。

2、ISA/KMP/IKE階段1相關配置命令

1)配置安全策略

ISAKMP/IKE策略包含以下參數:策略的序列號、加密演算法、驗證方法、DH組、生存周期。配置命令如下。(用於加密和驗證階段1第5、6個數據包)

Router(config)#cryptoisakmppolicy{1-10000}#建立ISAKMP/IKE管理連接策略,序列號越低,優先順序越高

Router(config-isakmp)#encryption{des|3des|aes}#指定加密演算法

Router(config-isakmp)#hash{sha|md5}#指定驗證過程採用HMAC的驗證功能

Router(config-isakmp)#authenticationpre-share#採用預共享密鑰方式進行身份驗證

Router(config-isakmp)#group{1|2|5}#指定DH演算法的密鑰長度,默認為1,組號越大,演算法越安全,佔用設備資源越多

Router(config-isakmp)#lifetime86400#指定管理連接的生存周期,默認86400s(24小時)

Router#showcryptoisakmppolicy#查看上述配置

2)配置預共享秘鑰

通過下述命令配置預共享秘鑰。

Router(config)#cryptoisakmpkey{0|6}keystringaddresspeer-address{subnet_mask}

參數解釋:

0表示秘鑰為明文,6表示秘鑰被加密

Keystring表示秘鑰的具體內容

Peer-address表示對端與之共享秘鑰的對等體設備地址

Subnet_mask:這裡為可選命令,如果沒有指定,默認將使用255.255.255.255作為掩碼

Router#showcryptoisakmpkey#查看密鑰,秘鑰處於明文和密文時,命令顯示內容的差異

通過show run信息看到的秘鑰配置中仍然顯示明文的密碼。

為了增強安全性,在IOS12.3(2)T版本中,增加了一個選項來加密秘鑰,但是要求設備的IOS鏡像必須支持AES加密,具體命令如下

Router(config)#keyconfig-keypassword-encrypt

Newkey:#輸入的秘鑰至少為8個字母

Confirmkey:#確認密鑰

Router(config)#passwordencryptionaes

五、ISAKMP/IKE階段2

ISAKMP/IKE階段2主要是在兩個ipsec對等體間建立數據連接,其主要完成以下任務。

(1)定義對等體間需要保護何種流量。

(2)定義用來保護數據的安全協議。

(3)定義傳輸模式。

(4)定義數據連接的生存周期及秘鑰刷新的方式。

(5)其中,ipsec對等體一般是通過ACL來匹配那些需要加密傳輸的VPN流量。

1、ISAKMP/IKE階段2的建立過程

1)安全關聯(sa)

Ipsec需要在兩個對等體之間建立一條邏輯連接,這就要使用一個被稱為安全關聯的信令協議,這是因為ipsec需要無連接的IP協議在安全運行之前要成為面向連接的協議。SA的連接是在源點和終點之間的單向連接,如果需要雙向連接,就需要兩個SA連接,每個方向一個。SA連接由三個要素定義。

* 安全參數索引(SPI):用於唯一表示每條SA連接。

* 安全協議的類型:IPSEC定義了兩種安全協議,即AH和ESP。

* 目的IP地址。

ISAKMP/IKE階段2具有這種特性,即ISAKMP/IKE的數據連接實際是通過兩個單向連接建立的,而兩個連接採用的加密或者認證方式都是相同的。這就使ISAKMP/IKE階段2的這個特性不易被觀察到。

2)ISAKMP/IKE階段2的傳輸集

數據連接的傳輸集頂一個數據連接時如何被保護的。與管理連接的傳輸集類似。對等體設備可以保存一個或多個傳輸集,但其具體內容卻完全不同。

* 安全協議:AH協議,ESP協議。

* 連接模式:隧道模式,傳輸模式。

* 加密方式:對於ESP而言,有DES、3DES、AES、AES-192、AES-256或不使用加密演算法。

* 驗證方式:MD5或SHA-1。

3)ISAKMP/IKE階段2的安全協議

IPSEC的數據連接可以通過安全協議實現對數據連接的保護:AH協議和ESP協議。可以通過其中的一個協議來實現數據的加密和驗證,如使用ESP協議,也可以使用兩個協議一起來實現。AH使用IP協議號51,ESP使用IP協議號50。

AH(認證頭協議)在RFC 2402中有明確定義。

* 數據完整性服務。

* 數據驗證。

* 保護數據回放攻擊。

AH協議保護整個數據報文,但易變的欄位除外,如IP包頭中的TTL和TOS欄位。

* 下一個頭:這個八位欄位定義了IP數據報文攜帶的有效載荷類型(TCP,UDP,ICMP,OSPF等),它與封裝前IP首部中的協議欄位功能一樣。

* 有效載荷長度:這個八位欄位的功能與字面意思不同,它並不定義有效載荷的長度,實際只定義了AH頭部的長度。

* 安全參數索引(SPI):這個32欄位是由接收端設備分配的一個數字,用來唯一表示一條單向連接,可以提供超過1億種標識號碼。

* 序列號:這個32位欄位對於數據報文提供排序信息,用來防止重放攻擊。即使數據報文重傳,該序列號也不會重複,而且當需要到達232也不會迴繞,而必須重新建立新的連接。

* 完整性校驗和(ICV):這個欄位提供驗證功能,它就是MD5或SHA等HMAC功能產生的數字簽名。AH的ICV值是完整的IP數據報文產生的數字簽名,也就是說,它對整個IP數據報文進行完整性校驗。

從報文結果不難發現,AH協議只能實現驗證功能,而並未提供任何形式的數據加密,而且正因為其對整個IP數據報文實現驗證功能,所以他與NAT或PAT不能一起使用。

ESP在RFC2406中有明確定義,它與AH區別如下:

(1)ESP對用戶數據實現加密功能。

(2)ESP只對IP數據的有效載荷進行驗證,不包括外部的IP包頭。

因此,如果有黑客對IP包頭內容進行篡改,ESP是無法檢測到的。這一點一點卻使ESP可以和NAT一起共用。但是,無論是ESP還是AH都無法和PAT一起使用,這是由於PAT要修改第四層的數據包頭。

* ESP頭部:SPI欄位、序列號與AH報文結構中對應的欄位的功能類似。

* ESP尾部:補丁用於減少有效載荷被竊聽並被猜測的可能性:補丁長度定義了補丁位元組數。下一個頭與AH報文結構中對應欄位的功能類似。ICV依然提供驗證功能,但是ICV只是ip數據報文的有效載荷通過HMAC功能產生的數字簽名。

另外,ESP協議加密功能的實現與採用何種連接模式相關。

2、ISAKMP/IKE階段2的配置命令

ISAKMP/IKE階段2的配置過程有三個部分組成。

1)配置Crypto ACL

定義何種流量需要被保護的一種方法就是建立一個crypto ACL,通過ACL匹配ipsec vpn流量,其中,permit語句指定了需要被保護的流量,而deny語句定義了不需要保護的流量。通常情況,兩端對等體設備上的crypto ACL互為鏡像,否則階段2的連接建立就會失敗。配置命令如下:

Router(config)#access-listnumber{deny|permit}protocolsourcemacdestinationmac

2)配置階段2的傳輸集

在ipsec對等體之間可以配置多個數據連接的傳輸集,必須保證兩端至少有一對匹配的傳輸集,這樣ISAKMP/IKE階段2的數據SA連接才能協商成功。設備的傳輸集由設備性能決定,如果所有對等體設備的性能相近,則共同使用一種傳輸集即可,如果設備間性能差異較為明顯,通常就需要多個傳輸集了。配置名另如下。

Router(config)#cryptoipsectransform-settransform_set_nametransform1[transform2[transform3]

參數解釋:

Transform_set_name:為傳輸集名稱,該名稱具有唯一性,不能與任何其他傳輸集相同

Transform1:傳輸集選項,參考下表:

AH

ESP驗證

ESP加密

ah-md5-hmac

ah-sha-hmac

esp-md5-hmac

esp-sha-hmac

esp-null

esp-des

esp-3des

esp-aes128

esp-aes192

esp-aes256

要想查看路由器上的傳輸集,使用show crypto ipsec transform-set命令。

如果在數據連接建立之後修改傳輸集的配置,並不會影響現有的SA設置,只有連接的生存周期到期,SA才會重新建立連接或者SA被手動清除(通過clear crypto sa或clear crypto ipsec sa命令)。

3)配置crypto map

Crypto map的功能就是將所有的信息組織在一起構建ipsec會話。通常路由器的介面上只對應一個crypto map,一台路由器可以在多個介面上實現流量保護,這時可能就需要多個crypto map了。

Crypto map有兩種類型:靜態的crypto map和動態的crypto。在構建L2L會話時通常會使用靜態的,具體配置命令如下。

Router(config)#cryptomapmap_nameseq_numipsec-isakmp#seq_num為map序列號,範圍1-65535,值越小,優先順序越高

Router(config-crypto-m)#matchaddressACL_name_or_num#調用ACL的名字或編號

Router(config-crypto-m)#setpeer{hostname|IP_address}#指定對等體設備,即配置的設備與誰建立連接

Router(config-crypto-m)#settransform-settransform_set_name1#指定傳輸集的名稱,最多可以列出六個傳輸集的名稱

Router(config-crypto-m)#setpfs[group1|group2|group5]

Router(config-crypto-m)#setsecurity-associationlifetime{secondsseconds|kilobyteskilobytes}

Router(config-crypto-m)#setsecurity-associationidle-timeseconds

命令解釋:

* Set PFS:(PFS:perfect forward secrecy,完美轉發保密)保證兩個階段中的秘鑰只能使用一次,進一步增強了安全性,但使用PFS可能佔用設備更多的資源。Set pfs命令用於啟用這項功能並指定使用哪個DH秘鑰組,這是一條可選命令。

* Set security-association lifetime:用於指定SA的生存周期。默認情況下,cisco的設備已經設定數據連接的生存周期為3600s或4608000KB,相當於一小時內以10Mb/s速率傳輸的流量。生存周期的閾值是由時間和流量兩個方面的因素決定的。且相當於任何一項到達閾值的限制時,SA就會被重新協商建立。

如果在IPSEC對等體之間只設置lifetime,即使沒有ipsec流量傳遞,SA也始終處於激活狀態,如果在VPN設備上配置了很多ipsec連接,這些暫時沒有實際意義的SA就會佔用設備的內存和CPU資源。從IOS12.2(15)T開始,cisco為數據SA引入空閑超時計時器,如果沒有流量通過SA傳輸,SA就會被設備自動刪除。

* Set security-association idle-time命令用於設定空閑超時計數器,範圍為60-86400s。默認情況下,空閑超時計時器是關閉的。

IPSec VPN綜合案例

某軟體開發公司為了降低人員成本,在中小城市建立了分支公司,但是分支公司上傳給總公司的數據一般為軟體開發的關鍵業務數據,如果其被竊取,可能給公司帶來難以預計的損失。作為該分支公司的網路管理員,對網路提出以下設計需求。

(1)分支公司開發項目小組所在網路地址為172.16.10.0/24,該網路的主機可以通過vpn訪問總公司開發數據伺服器(10.10.33.0/24),但不能訪問internet。

(2)分支公司的其他客戶端(同屬於172.16.0.0/16網段)可以訪問internet。

根據上述需求可以明顯看出,網路管理員需要在分支公司的網關路由器上同時配置vpn和PAT。

在GNS3上實驗拓撲如下圖:

在3sw上的配置

3sw#vlandatabase#創建VLAN

3sw(vlan)#vlan10

3sw(vlan)#vlan20

3sw(vlan)#exit

3sw#conft

3sw(config)#intvlan10#配置VLAN地址

3sw(config-if)#ipadd172.16.10.254255.255.255.0

3sw(config-if)#nosh

3sw(config-if)#intvlan20

3sw(config-if)#ipadd172.16.20.254255.255.255.0

3sw(config-if)#nosh

3sw(config-if)#intf1/0

3sw(config-if)#noswitchport

3sw(config-if)#ipadd192.168.1.2255.255.255.252

3sw(config)#intf1/1

3sw(config-if)#switchportaccessvlan10

3sw(config-if)#intf1/2

3sw(config-if)#switchportaccessvlan20

3sw(config-if)#exit

3sw(config)#iproute0.0.0.00.0.0.0192.168.1.1#配置路由

在分公司R1的配置如下:

R1#conft

R1(config)#intf0/0#配置介面地址

R1(config-if)#ipadd192.168.1.1255.255.255.252

R1(config-if)#nosh

R1(config-if)#intf0/1

R1(config-if)#ipadd100.0.0.1255.255.255.252

R1(config-if)#nosh

R1(config)#iproute0.0.0.00.0.0.0100.0.0.2#配置路由

R1(config)#iproute172.16.0.0255.255.0.0192.168.1.2

R1(config)#access-list1deny172.16.10.00.0.0.255#配置NAT

R1(config)#access-list1permit172.16.0.00.0.255.255

R1(config)#ipnatinsidesourcelist1interfacef0/1overload

R1(config)#intf0/0

R1(config-if)#ipnatinside

R1(config)#intf0/1

R1(config-if)#ipnatoutside

R1(config)#cryptoisakmppolicy1#配置ISAKMP策略

R1(config-isakmp)#encryption3des#配置加密演算法

R1(config-isakmp)#hashsha#配置數字簽名

R1(config-isakmp)#authenticationpre-share#採用預共享密鑰

R1(config-isakmp)#group2#指定DH密鑰組

R1(config-isakmp)#lifetime10000#設定生存周期

R1(config)#cryptoisakmpkey6vpnkeyaddress200.0.0.1#配置預共享密鑰

R1(config)#access-list100permitip172.16.10.00.0.0.25510.10.33.00.0.0.255#ACL

R1(config)#cryptoipsectransform-setvpn-setesp-desah-sha-hmac#配置IPSec變換集

R1(cfg-crypto-trans)#exit

R1(config)#cryptoipsecsecurity-associationlifetimeseconds1800#設定生存周期

R1(config)#cryptomapvpn-map1ipsec-isakmp#配置加密映射

R1(config-crypto-map)#setpeer200.0.0.1#配置IPSec對等體設備

R1(config-crypto-map)#settransform-setvpn-set#應用IPSec變換集

R1(config-crypto-map)#matchaddress100#應用ACL

R1(config)#intf0/1#將其映射到介面

R1(config-if)#cryptomapvpn-map

在ISP上配置:

ISP#conft

ISP(config)#intf0/0

ISP(config-if)#ipadd100.0.0.2255.255.255.252

ISP(config-if)#nosh

ISP(config-if)#intf0/1

ISP(config-if)#ipadd200.0.0.2255.255.255.252

ISP(config-if)#nosh

在總公司R2的配置:

R3#conft

R3(config)#intf0/0

R3(config-if)#ipadd200.0.0.1255.255.255.252

R3(config-if)#nosh

R3(config-if)#intf0/1

R3(config-if)#ipadd10.10.33.254255.255.255.0

R3(config-if)#nosh

R3(config)#iproute0.0.0.00.0.0.0200.0.0.2

R3(config)#cryptoisakmppolicy1

R3(config-isakmp)#encryption3des

R3(config-isakmp)#hashsha

R3(config-isakmp)#authenticationpre-share

R3(config-isakmp)#group2

R3(config-isakmp)#lifetime10000

R3(config)#cryptoisakmpkey6vpnkeyaddress100.0.0.1

R3(config)#access-list100permitip10.10.33.00.0.0.255172.16.10.00.0.0.255

R3(config)#cryptoipsectransform-setvpn-setesp-desah-sha-hmac

R3(cfg-crypto-trans)#exit

R3(config)#cryptoipsecsecurity-associationlifetimeseconds1800

R3(config)#cryptomapvpn-map1ipsec-isakmp

R3(config-crypto-map)#setpeer100.0.0.1

R3(config-crypto-map)#settransform-setvpn-set

R3(config-crypto-map)#matchaddress100

R3(config)#intf0/0

R3(config-if)#cryptomapvpn-map

驗證IPSec VPN

R1#showcryptoisakmppolicy#顯示ISKMP協商策略的配置結構

R1#showcryptoisakmpsa#查看管理連接SA的狀態

R1#showcryptoipsectransform-set#查看IPSec變換集

R3#showcryptoipsecsecurity-associationlifetime#顯示數據連接的生存周期

R1#showcryptoipsecsa#查看數據連接SA的細節信息

R1#showcryptomap#查看CryptoMap的信息

TAG: |