本篇主要講解IPSEC ***相關理論概念,工作原理及配置過程。從安全和加密原理入手,講解了IPSEC 在***對等體設備實現的安全特性,如數據的機密性、數據的完整性,數據驗證等。重點分析IKE階段1和階段2的協商建立過程,爲***等體間故障排查打下堅實的理論基礎,最後,分別在Cisco的路由器和防火牆上實現IPSEC ***的應用和配置,並結合企業需求進行案例分析和講解。
一、***概述
***技術起初是爲了解決明文數據在網絡上傳輸帶來的安全隱患而產生的。TCP/IP協議族中的很多協議都採用明文傳輸,如telnet、ftp、tftp等。一些***可能爲了獲取非法利益,通過諸如竊聽、僞裝等***方式截獲明文數據,使企業或者個人蒙受損失。
***技術可以從某種程度上解決該問題。例如,它可以對公網上傳輸的數據進行加密,即使***通過竊聽工具截獲到數據,也無法瞭解數據信息的含義。***也可以實現數據傳輸雙方的身份驗證,避免***僞裝成網絡中的合法用戶***網絡資源。
1、***的定義
***(virtual private network,虛擬專用網)就是在兩個網絡實體之間建立的一種受保護的連接,這兩個實體可以通過點到點的鏈路直接相連,但通常情況下他們會相隔較遠的距離。
***技術的作用:
(1)通過使用加密技術防止數據被竊聽。
(2)通過數據完整性驗證防止數據被破壞、篡改。
(3)通過認證機制實現通信雙方身份確認,來防止通信數據被截獲和回放。
此外,***技術還定義了:
* 何種流量需要被保護。
* 數據被保護的機制。
* 數據的封裝過程。
實際工作環境中的***解決方案不一定包含上述所有功能,這要由具體的環境需求和實現方式決定。而且很多企業可能採用不止一種的***解決方案。
2、***的連接模式
***技術有兩種基本的連接模式:隧道模式和傳輸模式。這兩種模式實際上定義了兩臺實體設備之間傳輸數據時所採用的不同的封裝過程。
1)傳輸模式
傳輸模式一個最顯著的特點就是:在整個***的傳輸過程中,IP包頭並沒有被封裝進去,這就意味着從源端到目的端數據始終使用原有的IP地址進行通信。而傳輸的實際數據載荷被封裝在***報文中。對於大多數***傳輸而言,***的報文封裝過程就是數據的加密過程,因此,***者截獲數據後將無法破解數據內容,但卻可以清晰地知道通信雙方的地址信息。
由於傳輸模式封裝結構相對簡單(每個數據報文較隧道模式封裝結構節省20字節),因此傳輸效率較高,多用於通信雙方在同一個局域網內的情況。例如:網絡管理員通過網管主機登錄公司內網的服務器進行維護管理,就可以選用傳輸模式***對其管理流量進行加密。
2)隧道模式
隧道模式中,***設備將整個三層數據報文封裝在***數據內,再爲封裝後的數據報文添加新的IP包頭。由於新IP包頭中封裝的是***設備的ip地址信息,所以當***者截獲數據後,不但無法瞭解實際載荷數據的內容,同時也無法知道實際通信雙方的地址信息。
由於隧道模式的***在安全性和靈活性方面具有很大的優勢,在企業環境中應用十分廣泛,總公司和分公司跨廣域網的通信、移動用戶在公網訪問公司內部資源等很多情況,都會應用隧道模式的***對數據傳輸進行加密。
3、***的類型
通常情況下,***的類型分爲站點到站點***和遠程訪問***。
1)站點到站點***
站點到站點***就是通過隧道模式在***網關之間保護兩個或者更多的站點之間的流量,站點間的流量通常是指局域網之間(L2L)的通信流量。L2L的***多用於總公司與分公司、分公司之間在公網上傳輸重要業務數據。
對於兩個局域網的終端用戶來說,在***網關中間的網絡是透明的,就好像通過一臺路由器連接的兩個局域網。總公司的終端設備通過***連接訪問分公司的網絡資源。數據包封裝的地址都是公司內網地址(一般爲私有地址),而***網關對數據包進行的再次封裝過程,客戶端是全然不知的。
2)遠程訪問***
遠程訪問***通常用於單用戶設備與***網關之間通信連接,單用戶設備一般爲一臺pc或小型辦公網絡等。***連接的一端爲PC,可能會讓很多人誤解遠程訪問***使用傳輸模式,但因爲該種***往往也是從公網傳輸關鍵數據,而且單一用戶更容易成爲***的***對象,所以遠程訪問***對於安全性要求較高,更適用於隧道模式。
要想實現隧道模式的通信,就需要給遠程客戶端分配兩個IP地址:一個是它自己的NIC地址,另一個是內網地址。也就是說遠程客戶端在***建立過程中同時充當***網關(使用NIC地址)和終端用戶(使用內網地址)。
當遠端的移動用戶與總公司的網絡實現遠程訪問***連接後,就好像成爲總公司局域網中的一個普通用戶,不僅使用總公司網段內的地址訪問公司資源,而且因爲其使用隧道模式,真是的ip地址被隱藏起來,實際公網通信的一段鏈路對於遠端移動用戶而言就像是透明的。
二、加密算法
加密就是一種將數據轉換成另外一種形式的過程,如果不瞭解用於加密的算法,解密幾乎是不可能的。舉例而言,A給B發信息內容爲”I LOVE YOU”,由於擔心C從中間截獲,於是,A與B協商了一種簡單的加密方法:把所有的字母按照26個字母順序+3,”I LOVE YOU”就變成了”L ORYH BYX”,即使C截獲了數據也無法得知信息的真正含義。這裏“+3”就可以理解爲一種簡單的加密算法。
實際***設備所使用的算法是相當複雜的,一般會涉及一些較爲複雜的數學算法,利用這些算法可以實現數據加密、數據完整性驗證、身份驗證等***的基本功能。一般來說,可以將這些加密算法分爲兩大類:對稱加密算法和非對稱加密算法。
1、對稱加密算法
對稱加密算法使用同一祕鑰對信息提供安全的保護。假設對稱加密算法的祕鑰爲“K”,客戶端傳輸的明文數據爲“M”,***網關加密後的數據爲“C”,而E和D爲加密和解密函數,則數據加密過程如下:
(1)發送發和接收方共享祕鑰“K”,也就是說加密和解密使用同一把鑰匙。
(2)發送方的***網關通過加密函數E將明文數據M加密成爲密文數據C。
(3)接收方的***網關通過解密函數D將數據還原爲明文數據M。
目前常見的對稱加密算法有DES、3DES、AES等。
1)DES算法
DES加密算法曾經在***領域應用很廣,屬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 ***等時機工程的實施過程中趨向於使用AES來提供更好的加密功能。
2、非對稱加密算法
1)算法的原理
非對稱幾秒算法使用公鑰和私鑰兩個不同的祕鑰進行加密和解密。用一個祕鑰加密的數據僅能被另一個祕鑰解密,且不能從一個祕鑰推出另一個祕鑰。假設接收方的公鑰和私鑰分別爲P和Q,客戶端傳輸的明文數據爲M,***網關加密後的數據爲C,而D、E分別爲加密和解密函數,數據加密過程如下:
(1)通信雙方交換公鑰(主要是把接收方的公鑰傳輸給發送方)。
(2)發送方的***網關通過公鑰將明文數據M加密成爲密文數據C。
(3)接收方的***網關通過自己的私鑰解密數據。整個過程私鑰始終沒有在網絡中傳輸。
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、祕鑰交換
在探討加密算法的過程中,忽略了一個關鍵的問題:祕鑰的交換。許多有經驗的網絡工程師使用對稱加密算法加密數據時,都會擔心祕鑰如何實現安全共享。
一種解決方案就是帶外共享,即通信雙方通過一張磁盤、一張紙或打一個電話方式實現祕鑰的共享。這種方案最大的缺陷是實施過程花費的時間較長。如果管理的***設備數量較多,或者公司對於祕鑰的安全性要求較高,需要一小時更換一次祕鑰,這種方案基本就不可能實施了。
另一種解決方案就是帶內共享。即通過telnet、ssh等連接方式通過網絡傳輸祕鑰。這種方法可以提高共享祕鑰的效率,但前提是必須保證傳輸祕鑰的通道絕對安全,而傳輸祕鑰本身就是爲了建立一條安全的通道,這似乎陷入一種死循環中。
其實,解決這個問題並不困難,可以通過非對稱加密算法(如前面提到的DH算法)加密對稱加密算法的祕鑰,在用對稱加密算法加密實際要傳輸的數據。如果公司需要一小時更換一次祕鑰,只需讓非對稱加密算法一小時重新計算一次即可,而且由於非對稱加密算法的私鑰不會在網絡上傳輸,其安全性也可得到保障。
三、數據報文驗證
數據報文驗證包括兩個方面:數據來源驗證(身份驗證)和報文完整性驗證。
1、HMAC功能實現驗證功能
在***領域,對數據進行來源和完整性驗證通常是藉助散列算法實現的,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的兩種常用算法,在包括***的很多領域得到廣泛應用。
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 ***
IPSEC技術實現***是目前較爲廣泛的一種應用,本節將探討IPSEC的建立過程及配置方法,實際工作中可能會遇到多個廠家的設備,有時需要網絡工程師分析分體、排除故障,因此,除了查閱各廠商的專業文檔外,瞭解***建立的各個階段也是尤爲重要的。
1、IPSec連接
對等體之間建立IPSec ***的連接需要三個步驟。
1)流量觸發IPSec
一般來說,IPSec建立過程是由對等體之間發送的流量觸發的,一旦有***流量經過***網關,連接過程便開始建立了。當然,手工配置也可以實現這一過程。在配置設備實現此步驟前,網絡工程師需要明確哪些流量需要被“保護”。
2)建立管理連接
IPSec使用ISAKMP/IKE階段1來構建一個安全的管理連結。這裏需要注意的是,這個管理連接只是一個準備工作,它不被用來傳輸實際的數據。在配置設備實現此步驟前,網絡工程師需要明確設備如何實現驗證,使用何種加密及認證算法,使用哪種DH組等問題。
3)建立數據連接
IPSec基於安全的管理連接協商建立安全的數據連接,而ISAKMP/IKE階段2就是用來完成這個任務的,數據連接用於傳輸真正的用戶數據。在配置設備實現此步驟前,網絡工程師需要明確使用何種安全協議,針對具體的安全協議應使用加密或驗證算法,以及數據的傳輸模式(隧道模式或傳輸模式)等問題。
經過IPSec建立的三部曲後,***流量便可以按照協商的結果被加密/解密了。但是***連接並不是一次性的,無論是管理連接還是數據連接都有一個生存週期與之關聯,一旦到期連接便會被終止。如果需要繼續傳輸***數據,連接需要重新被構建,這種設計主要是出於安全性的考慮的。
2、ISAKMP/IKE階段1
ISAKMP描述了祕鑰管理的架構,它定義了消息的格式和祕鑰交換協議的機制,以及構建連接的協商過程。而IKE是一個混合型的協議,它定義了祕鑰的產生、共享和管理。IKE使用UDP端口500,一般來說,ISAKMP和IKE關鍵字可互換使用。
ISAKMP/IKE階段1的交換過程有兩個模式:主模式和積極模式。積極模式比主模式快,主模式比積極模式安全。
無論***的類型是站點到站點還是遠程訪問,都需要完成三個任務。
(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產品實現***連接,在ISAKMP/IKE傳輸集中除了生存週期,其他項必須匹配才能建立連接。如果對等圖之間的生存週期不同,對等體會使用雙方生存週期數值較小的一個。這同樣是ipsec的規則。但有些廠商沒有遵循這一規則,因此如果遇到cisco與其他廠商設備構建ipsec連接時,應注意確保ISAKMP/IKE傳輸集中所有參數的匹配。
2)通過DH算法實現祕鑰交換
第一步只是協商管理連接的安全策略,而共享祕鑰的產生與交換就要通過Diffie-Hellman來實現。
DH算法屬於非對稱加密算法,因此它將產生公鑰和私鑰對的組合,且彼此共享公鑰。***對等體用對方的公鑰和自己的私鑰通過一種功能運算產生一個安全的共享祕鑰,即使有人截獲數據,也會因爲沒有私鑰而無法對出共享祕鑰。
3)實現設備之間的身份驗證
設備身份驗證時最常使用的方法就是預共享祕鑰,即在對等體之間通過帶外的方式共享祕鑰,並存儲在設備的本地。設備驗證的過程可以通過加密算法或HMAC功能兩種方法實現,而加密算法很少用於身份驗證,多數情況都會通過HMAC功能實現。
2、ISA/KMP/IKE階段1相關配置命令
1)配置安全策略
ISAKMP/IKE策略包含以下參數:策略的序列號、加密算法、驗證方法、DH組、生存週期。配置命令如下。(用於加密和驗證階段1第5、6個數據包)
Router(config)# crypto isakmp policy { 1-10000 } #建立ISAKMP/IKE管理連接策略,序列號越低,優先級越高 Router(config-isakmp)# encryption { des | 3des | aes } #指定加密算法 Router(config-isakmp)# hash { sha | md5 } #指定驗證過程採用HMAC的驗證功能 Router(config-isakmp)# authentication pre-share #採用預共享密鑰方式進行身份驗證 Router(config-isakmp)# group { 1 | 2 | 5 } #指定DH算法的密鑰長度,默認爲1,組號越大,算法越安全,佔用設備資源越多 Router(config-isakmp)# lifetime 86400 #指定管理連接的生存週期,默認86400s(24小時) Router# show crypto isakmp policy #查看上述配置
2)配置預共享祕鑰
通過下述命令配置預共享祕鑰。
Router(config)# crypto isakmp key { 0 | 6 } keystring address peer-address {subnet_mask} 參數解釋: 0表示祕鑰爲明文,6表示祕鑰被加密 Keystring表示祕鑰的具體內容 Peer-address表示對端與之共享祕鑰的對等體設備地址 Subnet_mask:這裏爲可選命令,如果沒有指定,默認將使用255.255.255.255作爲掩碼 Router# show crypto isakmp key #查看密鑰,祕鑰處於明文和密文時,命令顯示內容的差異
通過show run信息看到的祕鑰配置中仍然顯示明文的密碼。
爲了增強安全性,在IOS12.3(2)T版本中,增加了一個選項來加密祕鑰,但是要求設備的IOS鏡像必須支持AES加密,具體命令如下
Router(config)#key config-key password-encrypt New key: #輸入的祕鑰至少爲8個字母 Confirm key: #確認密鑰 Router(config)#password encryption aes
五、ISAKMP/IKE階段2
ISAKMP/IKE階段2主要是在兩個ipsec對等體間建立數據連接,其主要完成以下任務。
(1)定義對等體間需要保護何種流量。
(2)定義用來保護數據的安全協議。
(3)定義傳輸模式。
(4)定義數據連接的生存週期及祕鑰刷新的方式。
(5)其中,ipsec對等體一般是通過ACL來匹配那些需要加密傳輸的***流量。
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 ***流量,其中,permit語句指定了需要被保護的流量,而deny語句定義了不需要保護的流量。通常情況,兩端對等體設備上的crypto ACL互爲鏡像,否則階段2的連接建立就會失敗。配置命令如下:
Router(config)# access-list number{ deny | permit } protocol source mac destination mac
2)配置階段2的傳輸集
在ipsec對等體之間可以配置多個數據連接的傳輸集,必須保證兩端至少有一對匹配的傳輸集,這樣ISAKMP/IKE階段2的數據SA連接才能協商成功。設備的傳輸集由設備性能決定,如果所有對等體設備的性能相近,則共同使用一種傳輸集即可,如果設備間性能差異較爲明顯,通常就需要多個傳輸集了。配置名另如下。
Router(config)# crypto ipsec transform-set transform_set_name transform1[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-aes 128 esp-aes 192 esp-aes 256 |
Router(cfg-crypto-tran)# mode { tunnel | transport } #定義傳輸模式,默認爲隧道模式
要想查看路由器上的傳輸集,使用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)# crypto map map_name seq_num ipsec-isakmp #seq_num爲map序列號,範圍1-65535,值越小,優先級越高 Router(config-crypto-m)# match address ACL_name_or_num #調用ACL的名字或編號 Router(config-crypto-m)# set peer { hostname| IP_address} #指定對等體設備,即配置的設備與誰建立連接 Router(config-crypto-m)# set transform-set transform_set_name1 #指定傳輸集的名稱,最多可以列出六個傳輸集的名稱 Router(config-crypto-m)# set pfs [ group1 | group2 | group5 ] Router(config-crypto-m)# set security-association lifetime {seconds seconds| kilobytes kilobytes} Router(config-crypto-m)# set security-association idle-time seconds
命令解釋:
* 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也始終處於激活狀態,如果在***設備上配置了很多ipsec連接,這些暫時沒有實際意義的SA就會佔用設備的內存和CPU資源。從IOS12.2(15)T開始,cisco爲數據SA引入空閒超時計時器,如果沒有流量通過SA傳輸,SA就會被設備自動刪除。
* Set security-association idle-time命令用於設定空閒超時計數器,範圍爲60-86400s。默認情況下,空閒超時計時器是關閉的。
IPSec ***綜合案例
某軟件開發公司爲了降低人員成本,在中小城市建立了分支公司,但是分支公司上傳給總公司的數據一般爲軟件開發的關鍵業務數據,如果其被竊取,可能給公司帶來難以預計的損失。作爲該分支公司的網絡管理員,對網絡提出以下設計需求。
(1)分支公司開發項目小組所在網絡地址爲172.16.10.0/24,該網絡的主機可以通過***訪問總公司開發數據服務器(10.10.33.0/24),但不能訪問internet。
(2)分支公司的其他客戶端(同屬於172.16.0.0/16網段)可以訪問internet。
根據上述需求可以明顯看出,網絡管理員需要在分支公司的網關路由器上同時配置***和PAT。
在GNS3上實驗拓撲如下圖:
在3sw上的配置
3sw#vlan database #創建VLAN 3sw(vlan)#vlan 10 3sw(vlan)#vlan 20 3sw(vlan)#exit 3sw#conf t 3sw(config)#int vlan 10 #配置VLAN地址 3sw(config-if)#ip add 172.16.10.254 255.255.255.0 3sw(config-if)#no sh 3sw(config-if)#int vlan 20 3sw(config-if)#ip add 172.16.20.254 255.255.255.0 3sw(config-if)#no sh 3sw(config-if)#int f1/0 3sw(config-if)#no switchport 3sw(config-if)#ip add 192.168.1.2 255.255.255.252 3sw(config)#int f1/1 3sw(config-if)#switchport access vlan 10 3sw(config-if)#int f1/2 3sw(config-if)#switchport access vlan 20 3sw(config-if)#exit 3sw(config)#ip route 0.0.0.0 0.0.0.0 192.168.1.1 #配置路由
在分公司R1的配置如下:
R1#conf t R1(config)#int f0/0 #配置接口地址 R1(config-if)#ip add 192.168.1.1 255.255.255.252 R1(config-if)#no sh R1(config-if)#int f0/1 R1(config-if)#ip add 100.0.0.1 255.255.255.252 R1(config-if)#no sh R1(config)#ip route 0.0.0.0 0.0.0.0 100.0.0.2 #配置路由 R1(config)#ip route 172.16.0.0 255.255.0.0 192.168.1.2 R1(config)#access-list 1 deny 172.16.10.0 0.0.0.255 #配置NAT R1(config)#access-list 1 permit 172.16.0.0 0.0.255.255 R1(config)#ip nat inside source list 1 interface f0/1 overload R1(config)#int f0/0 R1(config-if)#ip nat inside R1(config)#int f0/1 R1(config-if)#ip nat outside R1(config)#crypto isakmp policy 1 #配置ISAKMP策略 R1(config-isakmp)#encryption 3des #配置加密算法 R1(config-isakmp)#hash sha #配置數字簽名 R1(config-isakmp)#authentication pre-share #採用預共享密鑰 R1(config-isakmp)#group 2 #指定DH密鑰組 R1(config-isakmp)#lifetime 10000 #設定生存週期 R1(config)#crypto isakmp key 6 ***key address 200.0.0.1 #配置預共享密鑰 R1(config)#access-list 100 permit ip 172.16.10.0 0.0.0.255 10.10.33.0 0.0.0.255 #ACL R1(config)#crypto ipsec transform-set ***-set esp-des ah-sha-hmac #配置IPSec變換集 R1(cfg-crypto-trans)#exit R1(config)#crypto ipsec security-association lifetime seconds 1800 #設定生存週期 R1(config)#crypto map ***-map 1 ipsec-isakmp #配置加密映射 R1(config-crypto-map)#set peer 200.0.0.1 #配置IPSec對等體設備 R1(config-crypto-map)#set transform-set ***-set #應用IPSec變換集 R1(config-crypto-map)#match address 100 #應用ACL R1(config)#int f0/1 #將其映射到接口 R1(config-if)#crypto map ***-map
在ISP上配置:
ISP#conf t ISP(config)#int f0/0 ISP(config-if)#ip add 100.0.0.2 255.255.255.252 ISP(config-if)#no sh ISP(config-if)#int f0/1 ISP(config-if)#ip add 200.0.0.2 255.255.255.252 ISP(config-if)#no sh
在總公司R2的配置:
R3#conf t R3(config)#int f0/0 R3(config-if)#ip add 200.0.0.1 255.255.255.252 R3(config-if)#no sh R3(config-if)#int f0/1 R3(config-if)#ip add 10.10.33.254 255.255.255.0 R3(config-if)#no sh R3(config)#ip route 0.0.0.0 0.0.0.0 200.0.0.2 R3(config)#crypto isakmp policy 1 R3(config-isakmp)#encryption 3des R3(config-isakmp)#hash sha R3(config-isakmp)#authentication pre-share R3(config-isakmp)#group 2 R3(config-isakmp)#lifetime 10000 R3(config)#crypto isakmp key 6 ***key address 100.0.0.1 R3(config)#access-list 100 permit ip 10.10.33.0 0.0.0.255 172.16.10.0 0.0.0.255 R3(config)#crypto ipsec transform-set ***-set esp-des ah-sha-hmac R3(cfg-crypto-trans)#exit R3(config)#crypto ipsec security-association lifetime seconds 1800 R3(config)#crypto map ***-map 1 ipsec-isakmp R3(config-crypto-map)#set peer 100.0.0.1 R3(config-crypto-map)#set transform-set ***-set R3(config-crypto-map)#match address 100 R3(config)#int f0/0 R3(config-if)#crypto map ***-map
驗證IPSec ***
R1#show crypto isakmp policy #顯示ISKMP協商策略的配置結構 R1#show crypto isakmp sa #查看管理連接SA的狀態 R1#show crypto ipsec transform-set #查看IPSec變換集 R3#show crypto ipsec security-association lifetime #顯示數據連接的生存週期 R1#show crypto ipsec sa #查看數據連接SA的細節信息 R1#show crypto map #查看Crypto Map的信息