遠程訪問×××——Easy ×××

遠程訪問×××——Easy ×××

nEasy×××需要解決的問題

當兩臺路由器之間通信的流量出現匹配CryptoACL的流量時,就會發出建立IPSec ×××的連接。在L2L的IPSec ×××建立過程中,連接建立經歷兩個階段。

1.階段1——建立管理連接

協商採用何種方式建立管理連接

通過DH算法共享密鑰信息

對等體彼此進行身份驗證

2.階段2——建立數據連接

定義對等體間保護何種流量

定義用來保護數據的安全協議

定義傳輸模式

按照上述過程建立連接對於遠程訪問×××而言就會存在一些問題。遠程訪問×××一般來說,一端是硬件設備,諸如路由器、防火牆等;另一端則是客戶端設備,如臺式機、筆記本電腦等。這時客戶端一側的安全性就會存在一定問題。大家可以試想一下,公司網關級的設備與PC的安全管理級別肯定是不同的,更何況很多員工可能需要從家裏訪問公司的資源,家裏的電腦就會存在更多的安全隱患。而整個IPSec ×××加密傳輸的根本就是事先配置在設備上的預共享密鑰,一旦密鑰外泄,整個IPSec×××所做的努力全都付之東流。而IPSec只是考慮通過隧道傳輸提供一種安全的機制,並沒有引入任何的用戶名/密碼的驗證機制,所以當IPSec被應用於遠程×××的時候,將在安全問題上存在很大的隱患。

另一個問題是,建立L2L IPSec ×××時,雙方都有固定的IP地址,這樣我們纔有可能在配置Crypto Map的時候指定對方的Peer,纔有可能配置Crypto ACL來定義哪些流量將觸發連接的建立。但是對於遠程訪問×××而言,客戶端一側的IP是不可能固定的,因此,如果我們依然按照L2L的思路來建立連接是不可能的。

u在路由器上實現Easy ×××

n使用XAUTH做用戶驗證

1.XAUTH

IPSec協議最初的設計並未考慮用戶驗證的問題,所以IETF引入了一個RFC的草案——XAUTH。它是一個×××網關的增強特性,提供用戶名和密碼的方式來驗證用戶身份。由於這個過程是在兩個連接建立之間完成的,所以被戲稱爲“階段1.5”。談到用戶驗證自然就會涉及用戶名和密碼的存儲方式,通常情況下有兩種方式:

存儲在×××網關設備的內部數據庫中。

存儲在第三方設備上,例如一臺AAA服務器。

雖然增加了用戶名和密碼的驗證過程,但如果遠程訪問×××用戶的PC或筆記本電腦丟失,***還是可以從本地獲取到相關用戶名和密碼,這樣就又回到最初的安全性問題上去了。所以研發人員提供了兩種解決方案:

用戶可以使用令牌卡,使得每次輸入用戶名/口令都是不同的(與令牌卡的內同相關)。

×××的管理員強制客戶端不得本地存儲用戶名/口令,用戶每次必須手動輸入。

第一種方案相對第二種的安全性要略強一點,但是它在用戶的易用性方面就不夠好了,很多用戶必須攜帶令牌卡,經過較長的時間才能成功登錄到×××訪問相關資源。而第二種方案雖然安全性方面略遜一籌,但它對於用戶而言沒有那麼“麻煩”。這又是安全性和易用性的一次博弈,其實在網絡環境中很難做到絕對的安全,對於設備廠商而言更多收到的是來自易用性方面的投訴,所以最終Cisco選擇了第二種方案。安全性方面的努力更多的應該藉助於對用戶安全意識的培養,這當然也應是×××管理員的職責之一,所以對於網絡的安全性管理往往包括網絡環境管理和人員管理兩個方面。

2.AAA的定義

AAA是Authentication(驗證)、Authorization(授權)和Accounting(統計)的縮寫,它提供了在網絡設備上配置訪問控制的基本框架。

(1)驗證:用戶是誰?

對用戶的合法性進行驗證,包括用戶名、密碼等信息的驗證。

(2)授權:用戶可以做什麼?

在用戶通過驗證後,爲用戶指定其能夠使用的服務等權限。

(3)統計:用戶做過什麼?

在用戶驗證、授權成功後,記錄用戶的操作等信息,以便用於記賬、審計和報告。

實現AAA服務器主要使用RADIUS協議和TACACS+協議。

RADIUS(RemoteAuthentication Dial In User Service,遠程驗證撥入用戶服務)是一個全開放的標準協議,廠商或用戶可以靈活的修改RADIUS。只加密用戶名和密碼,以UDP方式傳輸數據。

TACACS+(TerminalAccess Controller Access Control System,終端訪問控制器訪問控制系統)是Cisco設計的私有協議。加密所有數據,以TCP方式傳輸數據。

3.AAA的配置

(1)在路由器上需要通過“aaa new-model”命令啓用AAA。

Router(config)# aaa new-model

(2)爲遠程訪問×××客戶端進行認證。

Router(config)# aaa authentication loginauthentication_list_namemethod1 [method2……]

   aaaauthentication login命令用於指定客戶端認證的方式,authentication_list_name只是該方式的名稱,在配置遠程×××的時候一般採用兩種方式:local和group radius。

local是指本地認證方式,即在路由器上手動配置用戶名和密碼。

groupradius一般是通過一臺AAA RADIUS服務器實現用戶名和密碼的驗證,當客戶端發送用戶名和密碼給路由器時,路由器會轉給指定的RADIUS服務器進行驗證。

(3)配置用戶名和密碼。

Router(config)# usernameusername { password | secret } password

如果之前的命令選擇了本地驗證的方式,就需要在路由器上配置用戶名和密碼。可以配置多個用戶名和密碼。以供路由器與多組客戶端進行身份驗證。如果選擇了secret參數,路由器將自動加密用戶的密鑰。

(4)爲遠程訪問×××客戶端進行授權。

Router(config)# aaa authorization networkauthorization_list_namemethod1 [method2……]

   aaaauthorization network命令指定了AAA將授權客戶端使用IPSec ×××隧道。authorization_list_name依然是該授權方式的名稱,授權方式與認證類似。

(5)應用到靜態Crypto Map。

Router(config)# crypto mapstatic_map_nameclient authentication list

authentication_list_name

Router(config)# crypto map static_map_name isakmpauthorization list

authorization_list_name

將認證和授權的過程應用到Crypto Map中,這樣之前的用戶名和密碼驗證就與遠程訪問×××關聯起來。

n組策略

之前內同提及了一個關鍵問題,由於與×××網關建立連接的客戶端可能會很多,所以Peer的IP地址就不會固定,CryptoACL也不會唯一。最好的解決辦法就是讓×××網關“推送”這些策略給客戶端。但是很多情況下客戶端的這些策略可能是相同的,因此在遠程訪問×××中引入了組的概念,將這些具有相同策略的客戶端劃分在一個組裏,在×××網關上一次性的爲一組客戶端配置策略,這樣在配置過程和管理過程中都將大大節省工作量。

1.地址池

根據之前所學內同,遠程訪問×××客戶端之所以與×××網關很難建立連接,是因爲客戶端沒有固定的IP地址(與×××網關建立連接的不只是一臺PC)。在這種“動態”的情況下,最好的辦法就是讓×××網關像DHCP服務器一樣爲每個通過驗證的客戶端“推送”IP地址,由於客戶端的IP地址是×××網關動態分配的,網關自然知道應該與哪個IP建立×××連接。

注:地址池裏的地址範圍不能跟公司內部的地址是同一網段。

2.DNA和網關

正像DHCP服務器,除了給客戶端分配IP地址之外還會分配網關和DNS,×××網關也會給客戶端推送網關和DNS。這樣客戶端主機就擁有了內網的IP、網關以及DNS等必備的地址資源,真正成爲內網的一員。當客戶端接收到這些策略後,它將只有內網的網關和DNS地址。

客戶端通過×××隧道接入公司內網,就好像虛擬的與公司網絡的其他主機成爲同一局域網成員,原本在廣域網被禁的一些協議就可以應用了,比如共享。

3.共享密鑰

正如前面所講的,在L2L的過程中,需要很據預共享密鑰驗算出用於加密、身份驗證、完整性驗證的密鑰,支持後續×××連接的建立以及數據通信。在遠程訪問×××中×××網關需要與多組客戶端“共享密鑰”,因此在配置×××網關的時候需要爲每組客戶端設置不同的共享密鑰。客戶端的密鑰並不是×××網關推送的,而需要用戶通過客戶端軟件配置在主機上,而這個過程一般是由公司的×××管理員來操作實現的,那麼這個密鑰自然是保存在客戶端主機本地,因此纔會有上述講解的“階段1.5”的存在。

4.分離隧道

默認情況下,客戶端與×××網關建立隧道後,只能訪問內網授權資源。這是因爲隧道會允許所有的流量,也就是說所有流量必須流經隧道到達公司內網,自然也就不允許任何流量訪問外網。但對於用戶而言,辦公的同時訪問Internet是在平常不過的需求了,所以需要針對遠程訪問×××配置ACL來分離隧道。

通過配置ACL,所有“permit”的流量都被加密傳輸,所有“deny”的流量都被明文傳輸,而加密的流量就是通過隧道訪問公司內網的流量,明文的流量就是訪問Internet的流量,將這個ACL應用到組策略中即可實現需求。

客戶端通過認證後,ACL將隨其他組策略一同被推送到客戶端主機,此時主機的網關將變爲公網網關,查看主機的路由表會發現有一條明細的路由指向×××網關,這條明細的路由就是×××客戶端根據推送過來的ACL生成。

5.分離DNS

當客戶端主機通過遠程訪問×××連接到公司內網,即使分離隧道後,客戶端訪問Internet的Web服務時,也需要使用公司內網的DNS解析(之前講解過關於DNS的推送)。但這實際是一個不合理的過程,細想一下,客戶端每次訪問外網的某一個域名,都需要不遠×××的去公司內部進行DNS解析,其實是沒有必要的;但如果客戶端訪問的是公司內網的Web服務器就需要通過內網的DNS解析。若要實現訪問不同的域名使用不同的DNS時,使用的最佳方案是分離DNS。

6.組策略的配置

(1)創建地址池

Router(config)# ip local poolpool_namefirst_ip_address last_ip_address

pool_name:地址池的名稱。

first_ip_addresslast_ip_address:地址池的IP範圍。

(2)創建用戶組

Router(config)# crypto isakmp clientconfiguration group {group_name |

               default}

如果AAA的授權方式選擇了本地授權方法,在路由器上就需要定義組從而實現組策略的授權。cryptoisakmp client configuration group命令用於創建用戶組。group_name指這個組的名字,方便後續命令調用組。而default參數用於創建一個默認組,如果用戶沒有指定特定組,則默認使用default組,當選擇default參數後,可以對默認組的參數進行修改。

(3)配置策略

創建組後將會進入子配置模式,該模式用於配置組策略。

Router(config-isakmp-group)# keypre_share_key

Router(config-isakmp-group)# pool pool_name

Router(config-isakmp-group)# dns 1st_DNS_server[2nd_DNS_server]

key命令用於配置預共享密鑰,該組用戶都要匹配這個密鑰才能與×××網關建立管理連接。

pool命令用於應用之前配置的地址池。與key命令類似,地址池的應用也可以配置在全局模式,區別在於應用的範圍。如果在全局模式,則所有連接的客戶端都將被推送該地址池的IP;如果配置在組裏,只有該組的客戶端使用這個地址池的IP。

dns用於指定內網的DNS服務器IP,同時可以指定備份的DNS服務器IP。

Router(config)# ip access-list extendedACL_name

Router(config)# permit ip sourcesource-wildcard any


Router(config-isakmp-group)# aclACL_name_or_#

Router(config-isakmp-group)# split-dnsdomain_name

配置分離隧道的時候需要先配置ACL,這裏需要強調一點,ACL是基於×××網關的角度編寫的,也就是說這裏的source指的是×××網關這一側。當ACL被推送到客戶端時,相對於客戶端而言,source是建立×××連接後客戶端被授權訪問的內網資源。

   ACL配置完成後需要應用到組策略中,通過命令acl調用之前的名稱或序號即可。split-dns命令用於分離dns,domain_name參數表示希望×××網關內部DNS解析的域名。

還有一個組策略的內容是save-password,意思是讓客戶端自動保存用戶名和密碼,這在之前的內容已經分析過了,讓客戶端保存用戶名和密碼會導致安全性的下降,所以Cisco產品默認情況下是要求手動輸入用戶名和密碼的。

n動態Crypto Map

首先,讓我們先回顧一下靜態的Crypto Map,先從一個簡單的實例入手吧。

Router(config)# crypto map benet-map 1ipsec-isakmp

Router(config-crypto-m)# match address 100

Router(config-crypto-m)# set peer 200.0.0.1

Router(config-crypto-m)# set transform-setbenet-set

本例中配置了對端的peer映射,指定了Crypto ACL,指定了傳輸集,當然,這些並不是所有Crypto Map的配置,但這些對於靜態Crypto Map是必須的,否則映射將無法建立。這對於遠程訪問×××而言就變得很麻煩,因爲我們無法在×××網關上實現指定對方的IP地址,這就導致上述三個要素中peer和Crypto ACL無法預先配置,而最終導致靜態Crypto Map無法映射。

動態的Crypto Map簡單的說就是無需上述必要配置的靜態Crypto Map,這些配置將在IPSec參數協商時被動態填充。使用動態的Crypto Map必須採用ISAKMP/IKE發起協商,而且在實際遠程訪問×××的時候通常在×××網關上需要同時配置靜態和動態的Crypto Map,因爲只有一臺具有靜態配置的設備可以發起IPSec的隧道。也正因如此,動態的Crypto Map很少被用於L2L會話建立。

在實現遠程訪問×××的時候,一般會先配置transform-set,因爲指定傳輸集與peer的IP地址無關,可以將傳輸集直接應用到動態Crypto Map;由於在接口上只能配置一個Crypto Map,且×××網關上必須有靜態Crypto Map,所以需將動態Crypto Map應用到靜態的Crypto Map中,再將靜態Crypto Map應用到接口上。上述過程就是配置Crypto Map的一般思路。

1.創建動態Crypto Map

1)配置transform-set

Router(config)# crypto ipsec transform-setbenet-set esp-3des

esp-sha-hmac

Router(cfg-crypto-tran)# exit

2)創建動態Crypto Map

Router(config)# crypto dynamic-map dynamic_map_namesequence_#

Router(config-crypto-m)# set transform-setbenet-set

首先指定transform-set的名稱和加密驗證方式,該命令已在之前內容講解過,這裏直接應用esp-3des、esp-sha-hmac兩種加密驗證方式。之後通過crypto dynamic-map創建動態Crypto Map,與靜態的Crypto Map類似,dynamic_map_name是指動態Crypto Map的命令,sequence_#是序號,用於定義優先級。在動態Crypto Map中定義transform-set。

2.應用動態Crypto Map

1)應用到靜態Crypto Map

Router(config)# crypto map static_map_nameseq_# ipsec-isakmp dynamic dynamic_map_name

2)應用到接口

Router(config)# int f0/0

Router(config-if)# crypto mapstatic_map_name

配置靜態Crypto Map的命令大家已經很熟練了,這裏只是新增了參數dynamic,用於調用動態Crypto Map的名稱。這裏大家也許會有疑問,在靜態Crypto Map下面沒有配置任何具體的參數,例如peer和Crypto ACL。因爲這裏調用了動態的Crypto Map,這是靜態Crypto Map存在的原因,之前我們已經配置了相關命令向客戶端推送peer和ACL,當IPSec連接建立的時候,×××網關會自動根據推送的配置內容來匹配這些要素,只要客戶端的密鑰以及用戶名和密碼驗證都正確。即使之前並沒有配置分離隧道,Crypto ACL也會推送到客戶端,只不過推送的內容是全部匹配的。

另一個關鍵的問題是seq_#,調用動態Crypto Map的序號一般配置得比較大,這樣優先級就會比較低。原因是×××網關上可能會配置多種×××,例如遠程訪問×××和L2L ×××並存。但由於實際需求,這些×××使用的是同一個名稱的Crypto Map(接口只能同時生效一個Crypto Map),這時就會遇到先匹配哪個Crypto Map的問題,這取決於序列號。由於L2L ×××需要指定具體的peer和CryptoACL,因此L2L的Crypto Map更加“明細”,優先級應該配置得更高一些。否則,所有的Map更加“明細”,優先級應該配置得更高一些。否則,所有的Map就會先匹配“不明細”的動態Crypto Map,而導致L2L ×××無法建立。

n實驗案例

在路由器上實現Easy ×××

如圖所示,一臺筆記本電腦從外網通過遠程×××連接到內網,R1路由器的內網IP地址是192.168.1.0/24網段,DNS是192.168.1.10,且有一臺Web服務器供內網用戶訪問,域名爲www.benet.com。×××網關預將192.168.10.200-210地址段的IP推送給客戶端主機,而且客戶端在訪問內網資源的同時希望可以訪問Internet。

spacer.gif

具體步驟:

1.R1的配置

R1(config)# int f0/0

R1(config-if)# ip address 192.168.1.2255.255.255.0

R1(config-if)# no sh

R1(config-if)# int f1/0

R1(config-if)# ip address 192.168.2.1255.255.255.0

R1(config-if)# no sh

R1(config)# ip route 0.0.0.0 0.0.0.0192.168.2.2


R1(config)# aaa new-model

R1(config)# aaa authentication loginbenet-authen local

R1(config)# aaa authorization networkbenet-author local

R1(config)# username benet password cisco

R1(config)# crypto isakmp policy 10

R1(config-isakmp)# encryption 3des

R1(config-isakmp)# hash sha

R1(config-isakmp)# authentioncationpre-share

R1(config-isakmp)# group 2

R1(config-isakmp)# exit

R1(config)# ip local pool benet-pool192.168.10.200 192.168.10.210

R1(config)# access-list 101 permit ip192.168.1.0 0.0.0.255  any

R1(config)# crypto isakmp clientconfiguration group test-group

R1(config-isakmp-group)# key benet-key

R1(config-isakmp-group)# pool benet-pool

R1(config-isakmp-group)# dns 192.168.1.10

R1(config-isakmp-group)# acl 101

R1(config-isakmp-group)# split-dnsbenet.com

R1(config-isakmp-group)# exit

R1(config)# crypto ipsec transform-setbenet-set esp-3des esp-sha-hmac

R1(cfg-crypto-tran)# exit

R1(config)# crypto dynamic-map benet-dymap1

R1(config-crypto-m)# set transform-setbenet-set

R1(config-crypto-m)# exit

R1(config)# crypto map benet-stamap 1000ipsec-isakmp dynamic

benet-dymap

R1(config)# crypto map benet-stamap clientauthentication list

benet-authen

R1(config)# crypto map benet-stamap isakmpauthorization list

benet-author

R1(config)# crypto map benet-stamap clientconfiguration address respond

//用於讓客戶端先發起連接

R1(config)# int f1/0

R1(config-if)# crypto map benet-stamap

2.ISP的配置

只需配置好IP地址

3.Web的配置

Web(config)# int f0/0

Web(config-if)# ip address 192.168.1.1255.255.255.0

Web(config-if)# no sh

Web(config)# ip route 0.0.0.0 0.0.0.0192.168.1.2

4.PC的配置

1)配置好IP地址和網關

spacer.gif

2)安裝Cisco System ××× Client軟件,雙擊以.msi爲後綴的安裝程序(注意:保證系統的分辨率必須是800×600)

spacer.gif

3)根據安裝嚮導安裝。安裝成功後,重啓系統。

spacer.gif

4)運行Cisco System ××× Client程序。

spacer.gif

5)單擊”New”按鈕新建×××連接。如圖所示:

spacer.gif

6)如圖所示,Connection Entry是×××連接的名稱,因爲客戶端可能需要連接很多×××,×××名稱可以用於客戶端用戶區分不同的連接;Description是這個×××連接的描述信息;Host後面填寫的IP地址是指×××網關的IP,相當於爲客戶端指定對端的peer。中間部分填寫的Name和Password並不是用戶名和密碼,這裏一定要注意,而是策略組的組名和密鑰key。最後單擊“Save”按鈕保存。

spacer.gif

   7)保存成後之後,就會看到有一行記錄。如圖所示:

spacer.gif

   8)然後單擊“Connect”按鈕或是雙擊那行記錄,連接×××服務器,需要輸入用戶名和密碼。如圖所示:

spacer.gif

   9)連接成功後,可以看到PC客戶端有兩塊網卡信息。如圖所示:

spacer.gif

   10)驗證結果:

   PC客戶機能夠訪問公司內部的Web服務器。如圖所示:

spacer.gif

   PC客戶機也能夠訪問Internet。如圖所示:

spacer.gif

在路由器上配置Easy ×××有幾點注意:

1.密鑰組不能使用密鑰組1

2.不能使用AH安全協議

3.不能使用傳輸模式

4.只能使用NAT-T


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章