一種“多才多藝”的網(wǎng)絡(luò)工具——訪問控制列表(ACL)
外圍路由器、防火墻和內(nèi)部路由器
在大中型企業(yè)網(wǎng)絡(luò)中,通常采用外圍路由器、內(nèi)部路由器和防火墻的配置來實現(xiàn)各種安全策略。
內(nèi)部路由器對前往企業(yè)網(wǎng)絡(luò)中受保護部分的數(shù)據(jù)流進行過濾,以進一步提高安全, 這是通過使用訪問控制列表實現(xiàn)的。圖12-1說明了這些設(shè)備所處的位置。
我將頻繁地使用術(shù)語可信網(wǎng)絡(luò)( trusted network)和不可信網(wǎng)絡(luò)( untrustednetwork ),因此必須知道它們位于典型的安全網(wǎng)絡(luò)的什么地方,這很重要。非軍事區(qū)(DMZ)可能是全局因特網(wǎng)地址,也可能是私有地址,這取決于如何配置防火墻,非軍事區(qū)通常包含HTTP、DNS、電子郵件和其他與因特網(wǎng)相關(guān)的企業(yè)服務(wù)器。
我們知道,在可信網(wǎng)絡(luò)內(nèi)部,可不使用路由器,而結(jié)合使用虛擬局域網(wǎng)(VLAN)和交換機。多層交換機內(nèi)置了安全功能,可替代內(nèi)部路由器在VLAN架構(gòu)中提供較高的性能。
下面介紹一些使用訪問控制列表保護互聯(lián)網(wǎng)絡(luò)的方式。
訪問控制列表簡介
從本質(zhì)上說,訪問控制列表是一-系列對分組進行分類的條件,它在需要控制網(wǎng)絡(luò)數(shù)據(jù)流時很有用。在這些情況下,可將訪問控制列表用作決策工具。訪問控制列表最常見也是最容易理解的用途之一是, 將有害的分組過濾掉以實現(xiàn)安全策略。例如,可使用訪向控制列表來作出非常具體的數(shù)據(jù)流控制決策,只允許某些主機訪問因特網(wǎng)上的Web資源。通過正確地組合使用多個訪問控制列表,網(wǎng)絡(luò)管理員幾乎能夠?qū)嵤┤魏文芟氲降陌踩呗浴?/p>
創(chuàng)建訪問控制列表相當(dāng)于編寫一系列if-then 語句一如果滿 足給定的條件,就采取給定的措施;如果不滿足,則不采取任何措施,而繼續(xù)評估下一條語句。訪問控制列表語句相當(dāng)于分組過濾器,根據(jù)它對分組進行比較、分類,并采取相應(yīng)的措施。創(chuàng)建訪問控制列表后,就可將其應(yīng)用于任何接口的人站或出站數(shù)據(jù)流。訪問控制列表被應(yīng)用于接口后,路由器將對沿指定方向穿越該接口的每個分組進行分析,并采取相應(yīng)的措施。
將分組同訪問控制列表進行比較時,需要遵守一些重要規(guī)則。
- 總是按順序?qū)⒎纸M與訪問控制列表的每一行進行比較,即總是首先與訪問控制列表的第行進行比較,然后是第二行和第三行,以此類推。
- 不斷比較,直到滿足條件為止。在訪問控制列表中,找到分組滿足的條件后,對分組采取相應(yīng)的措施,且不再進行比較。
- 每個訪問控制列表末尾都有一條隱式的 deny語句,這意味著如果不滿足訪問控制列表中任何行的條件,分組將被丟棄。
使用訪問控制列表過濾IP分組時,上述每條規(guī)則都將帶來深遠的影響;要創(chuàng)建出有效的訪問控制列表,必須經(jīng)過一段時間的練習(xí)。
訪問控制列表分兩大類:
- 標準訪問控制列表 它們只將分組的源IP地址用作測試條件,所有的決策都是根據(jù)源IP地址作出的。這意味著標準訪問控制列表要么允許要么拒絕整個協(xié)議族,它們不區(qū)分IP數(shù)據(jù)流類型(如Web.Telnet、UDP等)。
- 擴展訪問控制列表它們能夠檢查 IP分組第3層和第4層報頭中的眾多其他字段。它們能夠檢查源IP地址、目標IP地址、網(wǎng)絡(luò)層報頭的協(xié)議( Protocol )字段、傳輸層報頭中的端口號。這讓擴展訪問列表能夠做出更細致的數(shù)據(jù)流控制決策。
- 命名訪問控制列表 且慢! 前面不是說只有兩類嗎?怎么這里列出了三類呢?從技術(shù)上說,確實只有兩類,因為命名訪問控制列表要么是標準的,要么是擴展的,并非一種新類型。這里之所以專門列出它,是因為這種訪問控制列表的創(chuàng)建和引用方式不同于標準和擴展訪問控制列表,但功能是相同的。
創(chuàng)建訪問控制列表后,除非將其應(yīng)用于接口,否則它不能發(fā)揮任何作用。此時訪問控制列表確實包含在路由器配置中,但除非告訴路由器使用它來做什么,否則它處于非活動狀態(tài)。
要將訪問控制列表用作分組過濾器,需要將其應(yīng)用于要進行數(shù)據(jù)流過濾的路由器接口。還必須指定要使用訪問控制列表來過濾哪個方向的數(shù)據(jù)流,這種要求有充分的理由:對于從企業(yè)網(wǎng)絡(luò)前往因特網(wǎng)的數(shù)據(jù)流和從因特網(wǎng)進人企業(yè)網(wǎng)絡(luò)的數(shù)據(jù)流,你可能想采取不同的控制措施。通過指定數(shù)據(jù)流的方向,可以(也經(jīng)常需要)在同一個接口上將不同的訪問控制列表用于人站和出站數(shù)據(jù)流。
- 入站訪問控制列表 將訪問控制列表應(yīng)用于 入站分組時,將根據(jù)訪問控制列表對這些分組進行處理,然后再將其路由到出站接口。遭到拒絕的分組不會被路由,因為在調(diào)用路由選擇進程前,它們已被丟棄。
- 出站訪問控制列表 將訪問控制列表應(yīng)用 于出站分組時,分組將首先被路由到出站接口,然后再將分組排隊前根據(jù)訪問控制列表對其進行處理。
在路由器上創(chuàng)建和實現(xiàn)訪問控制列表時,應(yīng)遵守一些通用的指導(dǎo)原則:
- 在接口的特定方向上,每種協(xié)議只能有一個訪問控制列表。這意味著應(yīng)用IP訪問控制列表時,每個接口上只能有一個人站訪問控制列表和一個出站訪問控制列表。
注意:考慮到每個訪問控制列表末尾的隱式deny語句帶來的影響,不允許在接口的特定方向?qū)μ囟▍f(xié)議應(yīng)用多個訪問控制列表是有道理的。鑒于不滿足第一個訪問控制列表中任何條件的分組都將被拒絕,因此不會有任何分組需要與第二個訪問控制列表進行比較。
- 在訪問控制列表中,將具體的測試條件放在前面。
- 新增的語句將放在訪問控制列表的末尾。強烈建議使用文本編輯器來編輯訪問控制列表。
- 不能僅刪除訪問控制列表中的一行,如果試圖這樣做,將刪除整個訪問控制列表。要編輯訪問控制列表,最好先將其復(fù)制到文本編輯器中。使用命名訪問控制列表是唯一的例外。
注意:對于命名訪問控制列表,可編輯、添加或刪除特定行,稍后將演示這一點。
- 除非訪問控制列表以permit any命令結(jié)尾,否則不滿足任何條件的分組都將被丟棄。訪問控制列表至少應(yīng)包含注意一條 permit語句,否則它將拒絕所有的數(shù)據(jù)流。
- 創(chuàng)建訪問控制列表后應(yīng)將其應(yīng)用于接口。如果訪問控制列表沒有包含任何測試條件,即使其應(yīng)用于接口,它也不會過濾數(shù)據(jù)流。
- 訪問控制列表用于過濾穿越路由器的數(shù)據(jù)流;它們不會對始發(fā)于當(dāng)前路由器的數(shù)據(jù)流進行過濾。
- 應(yīng)將IP標準訪問控制列表放在離目的地盡可能近的地方,這就是我們不想在網(wǎng)絡(luò)中使用標準訪問控制列表的原因。不能將標準訪問控制列表放在離源主機或源網(wǎng)絡(luò)很近的地方,因為它只能根據(jù)源地址進行過濾,這將影響所有的目的地。
- 將IP擴展訪問控制列表放在離信源盡可能近的地方。擴展訪向控制列表可根據(jù)非常具體的地址和協(xié)議進行過濾,我們不希望數(shù)據(jù)流穿越整個網(wǎng)絡(luò)后,最終卻被拒絕。將這種訪問控制列表放在離信源盡可能近的地方,可在一開始就將數(shù)據(jù)流過濾掉,以免它占用寶貴的帶寬。
介紹如何配置標準和擴展訪問控制列表前,先來討論如何使用ACL緩解前面討論的安全威脅。
使用ACL緩解安全威脅:
- IP地址欺騙(人站);
- IP地址欺騙(出站);
- 拒絕服務(wù)( DoS) TCP SYN攻擊(阻斷外部攻擊);
- DoSTCPSYN攻擊(使用TCP攔截);
- DoS smurf攻擊;
- 拒絕/過濾ICMP消息(人站);
- 拒絕/過濾ICMP消息(出站);
- 拒絕/過濾traceroute。
標準訪問控制列表
標準IP訪問控制列表通過查看分組的源IP地址來過濾網(wǎng)絡(luò)數(shù)據(jù)流。創(chuàng)建標準IP訪問控制列表時,使用訪問控制列表編號1~99或1300~ 1999 (擴展范圍)。通常使用編號來區(qū)分訪問控制列表的類型。根據(jù)創(chuàng)建訪問控制列表時使用的編號,路由器知道輸入時應(yīng)使用什么樣的語法。編號1~99或1300~1999,告訴路由器要創(chuàng)建一個標準IP訪問控制列表,而路由器要求只將源IP地址用作測試條件。
下面列出了過濾網(wǎng)絡(luò)數(shù)據(jù)流時,可使用的眾多訪問控制列表編號范圍(可為哪些協(xié)議指定訪問控制列表取決于你使用的IOS版本):
下面來看創(chuàng)建標準訪問控制列表的語法:
前面說過,使用訪問控制列表編號1~99或1300~ 1999,就相當(dāng)于告訴路由器你要創(chuàng)建一個標準IP訪問控制列表。
指定訪問控制列表編號后,需要決定是要創(chuàng)建permit語句還是deny語句。在這個例子中,我們創(chuàng)建一條deny語句:
接下來的一步需要做更詳細的解釋。有3個選項可供選擇??墒褂脜?shù)any允許或拒絕任何源主機(網(wǎng)絡(luò)),可使用一個IP地址來指定單臺主機或特定范圍內(nèi)的主機,還可使用命令host指定特定的主機。命令any的含義顯而易見,它指的是與語句匹配的任何源地址,因此每個分組都與該語句匹配。命令host比較簡單,下面是一個使用它的示例:
這條語句拒絕任何來自172.16.30.2 的分組。默認參數(shù)為host,換句話說,如果輸入access-1ist 10 deny 172.16.30.2, 路由器將認為輸人的是access-1ist 10 deny host 172 .16.30.2,且在運行配置中也這樣顯示。但還有另外一種方法可指定特定主機或特定范圍內(nèi)的主機一使用通配符掩碼。事實上,要指定任何范圍內(nèi)的主機,必須在訪問控制列表中使用通配符掩碼。什么是通配符掩碼呢?以后小編會介紹的!
通配符掩碼
在訪問控制列表中,可使用通配符來指定特定主機、特定網(wǎng)絡(luò)或網(wǎng)絡(luò)的一部分。要理解通配符,就必須理解塊大小,它用于指定地址范圍。塊大小包括64、32、16、8和4等。
在需要指定地址范圍時,可使用能滿足需求的最小塊大小。例如,如果需要指定34個網(wǎng)絡(luò),則需要使用塊大小64;如果需要指定18臺主機,則需要使用塊大小32;如果只需指定2個網(wǎng)絡(luò),則使用塊大小4就可以了。
通過結(jié)合使用通配符和主機(網(wǎng)絡(luò))地址來告訴路由器要過濾的地址范圍。要指定一臺主機,可使用類似于下面的組合:
- 172.16.30.5 0.0.0.0
其中的4個0分別表示1B。0表示地址中的相應(yīng)字節(jié)必須與指定的地址相同。要指定某個字節(jié)可以為任意值,可使用255。例如,下面的示例演示了如何使用通配符掩碼指定一個/24子網(wǎng):
- 172.16.30.0 0.0.0.255
這告訴路由器,前3 B必須完全相同,而第4個字節(jié)可以為任意值。
這很容易。但如果要指定小范圍的子網(wǎng),該怎么辦呢?此時塊大小便可派上用場了。指定的范圍必須與某個塊大小相同,換句話說,不能指定20個網(wǎng)絡(luò),而只能指定與塊大小相同的范圍,即要么是16,要么是32,但不能是20。
假定要禁止網(wǎng)絡(luò)中的一部分(即172.16.8.0~ 172.16.15.0)訪問你的網(wǎng)絡(luò)。該范圍對應(yīng)的塊大小為8,因此,在訪問控制列表中,應(yīng)指定網(wǎng)絡(luò)號172.16.8.0 和通配符掩碼0.0.7.255。這是什么意思呢?路由器根據(jù)7.255確定塊大小。上述網(wǎng)絡(luò)號和通配符掩碼組合告訴路由器,從172.16.8.0開始,向上數(shù)8個(塊大小)網(wǎng)絡(luò),直到網(wǎng)絡(luò)172.16.15.0。
這比看起來簡單。我原本可以使用二進制來解釋,但不需要這樣做。實際上,只需記住,通配符掩碼總是比塊大小小1。就這個示例而言,通配符掩碼為7,因為塊大小為8。如果使用的塊大小為16,則通配符掩碼將為15。很容易,不是嗎?
下面將通過一些示例幫助你掌握這一點。下面的示例告訴路由器,前3B必須完全相同,而第4個字節(jié)可以是任意值:
- Corp(config)#access-1ist 10 deny 172.16.0.0 0.0.255.255
下面的示例告訴路由器,前2 B必須完全相同,而后2 B可以是任意值:
- Corp(config)#access-1ist 10 deny 172.16.0.0 0.0.255.255
請嘗試配置下面一行:
- Corp(config)#access-list 10 deny 172.16.16.0 0.0.3.255
該配置告訴路由器,從網(wǎng)絡(luò)172.16.16.0 開始,并使用塊大小4。因此范圍為172.16.16.0~ 172.16.19.255(CCNA考題與此類似)。
接著練習(xí)。下面的配置是什么意思呢?
- Corp(config)#access-1ist 10 deny 172.16.16.0 0.0.7.255
這條語句指出,從網(wǎng)絡(luò)172.16.16.0開始,向上數(shù)8個(塊大小)網(wǎng)絡(luò),到172.16.23.255結(jié)束。為掌握這項知識,還需做更多練習(xí)。下面的語句指定的是什么范圍呢?
- Corp(config)#access-1ist 10 deny 172.16.32.0 0.0.15 .255
這條語句指出,從網(wǎng)絡(luò)172.16.32.0開始,向上數(shù)16個(塊大小)網(wǎng)絡(luò),到172.16.47.255結(jié)束。
下面再做幾個練習(xí),然后配置一些ACL。
- Corp(config)#access-1ist 10 deny 172.16.64.0 0.0.63.255
這條語句指出,從網(wǎng)絡(luò)172.16.64.0開始,向上數(shù)64個(塊大小)網(wǎng)絡(luò),到172.16.127.255結(jié)束。
來看最后一個示例:
- Corp(config)#access-1ist 10 deny 192.168.160.0 0.0.31.255
這條語句指出,從網(wǎng)絡(luò)192.168.160.0開始,向上數(shù)32個(塊大小)網(wǎng)絡(luò),到192.168.191.255結(jié)束。
確定塊大小和通配符掩碼時,還需牢記如下兩點:
- 起始位置必須為0或塊大小的整數(shù)倍。例如,塊大小為8時,起始位置不能是12。范圍必須是0~7、8~15、 16~23等。而塊大小為32時,范圍必須是0~31、32~63、64~95等。
- 命令any與0.0.0.0 255.255.255.255等價。
注意:通配符掩碼對創(chuàng)建IP訪問控制列表來說很重要,必須掌握。在標準IP訪問控制列表和擴展IP訪問控制列表中,其用法完全相同。
標準訪問控制列表示例
在圖12-2中,路由器有3條LAN連接和1條到因特網(wǎng)的WAN連接。不應(yīng)讓銷售部LAN的用戶訪問財務(wù)部LAN,但應(yīng)允許他們訪問因特網(wǎng)和市場營銷部的文件。市場營銷部的用戶需要能夠訪問財務(wù)部LAN,以使用其應(yīng)用程序服務(wù)。
在圖中的路由器上,配置如下標準IP訪問控制列表:
命令any與0.0.0.0 255.255.255.255等價,如下所示:
- Lab_ A(config)#access-1ist 10 permit 0.0.0.0 255.255 .255.255
該通配符掩碼指出,不用考慮任何一個字節(jié),因此所有地址都滿足這個測試條件。這與使用關(guān)鍵字any等價。
當(dāng)前,該訪問控制列表禁止任何來自銷售部LAN的分組進人財務(wù)部LAN,但允許其他所有分組進入。別忘了,除非將訪問控制列表應(yīng)用于接口的特定方向,否則它不會發(fā)揮任何作用。
應(yīng)將該訪問控制列表放在什么地方呢?如果將其作為人站訪問控制列表應(yīng)用于接口fa0/0, 還不如
關(guān)閉這個快速以太網(wǎng)接口呢!因為這將導(dǎo)致銷售部LAN中的所有設(shè)備都無法訪問與該路由器相連的任何網(wǎng)絡(luò)。最佳的選擇是,將其作為出站訪問控制列表應(yīng)用于接口fa0/1:
- Lab_ A(config)#int fa0/1
- Lab_ A(config-if)#ip access-group 10 out
這就完全禁止了來自172.16.40.0 的數(shù)據(jù)流從接口fa0/1 傳輸出去。它不會影響銷售部LAN的主機訪向市場營銷部LAN和因特網(wǎng),因為前往這些目的地的數(shù)據(jù)流不會經(jīng)過接口fa0/1。任何試圖從接口fa0/1出去的分組都將首先經(jīng)過該訪問控制列表。如果在接口fa0/0 上應(yīng)用了入站訪問控制列表,則任何試圖進人該接口的分組都將首先經(jīng)過這個訪問控制列表,然后才被路由到出站接口。
下面來看另一個標準訪問控制列表示例。在圖12-3所示的互聯(lián)網(wǎng)絡(luò)中,有2臺路由器、3個LAN和1條串行WAN連接。
你想通過使用一個標準ACL,禁止財務(wù)部的用戶訪問與路由器Lab_B相連的人力資源服務(wù)器,但允許其他用戶訪問該LAN。應(yīng)該創(chuàng)建什么樣的標準訪問控制列表?將它放在哪里呢?
準確的答案是,應(yīng)該創(chuàng)建一個擴展訪問控制列表,并將其放在離信源最近的地方,但這里要求你使用標準訪問控制列表。根據(jù)經(jīng)驗規(guī)則,標準訪問控制列表應(yīng)放在離目的地最近的地方,這里是路由器Lab_B的接口E0。下面是應(yīng)在路由器Lab_B上配置的訪問控制列表:
為回答這個問題,必須理解子網(wǎng)劃分、通配符掩碼以及如何配置和實現(xiàn)ACL。我想你還需多做這方面的練習(xí)。
因此,介紹如何限制以Telnet方式訪問路由器前,再來看一個標準訪向控制列表示例,這個示例要求你更深人地思考。在圖12-4中,一臺路由器有4條LAN連接,還有1條到因特網(wǎng)的WAN連接。
編寫一個訪問控制列表,禁止圖中所示的4個LAN訪問因特網(wǎng)。對于圖中的每個LAN,都列出了其中一臺主機的IP地址,據(jù)此確定在訪問控制列表中指定每個LAN時應(yīng)使用的子網(wǎng)地址和通配符掩碼。
答案應(yīng)類似于下面這樣(-次指定了E0~E3連接的子網(wǎng)):
當(dāng)然,也可以只使用下面一行:
- Router(config)#access-1ist 1 deny 172.16.0.0 0.0.255 .255
但這樣做有什么意思呢?
創(chuàng)建這個訪問控制列表的目的是什么?如果在路由器上應(yīng)用這個訪問控制列表,就等于完全禁止訪問因特網(wǎng)了,那還要因特網(wǎng)連接做什么?.這里提供這個示例旨在讓你練習(xí)在訪問控制列表中使用塊大小,這對你備考CCNA至關(guān)重要。
控制 VTY (Telnet/SSH) 訪問
對于大型路由器,要禁止用戶以Telnet 或SSH方式訪問它可能很難,因為每個活動接口都允許VTY訪問??蓜?chuàng)建一個擴展IP訪問控制列表,禁止訪問路由器的每個地址。但如果真的這樣做,必須將其應(yīng)用于每個接口的人站方向,對于有數(shù)十甚至數(shù)百個接口的大型路由器來說,這種解決方案的可擴展性太低了。另外,如果每臺路由器都對每個分組進行檢查,以防它訪問VTY線路,導(dǎo)致的網(wǎng)絡(luò)延遲將很大。
一種好得多的解決方案是,使用標準IP訪問控制列表來控制對VTY線路的訪問。
這種解決方案為何可行呢?因為將訪問控制列表應(yīng)用于VTY線路時,不需要指定協(xié)議一訪問VTY就意味著以Telnet 或SSH方式訪問終端。也不需要指定目標地址,因為你不關(guān)心用戶將哪個接口的地址用作Telnet會話的目標。你只需控制用戶來自何方一他們的源 IP地址。要實現(xiàn)這項功能,請執(zhí)行如下步驟:
- 創(chuàng)建一個標準IP訪問控制列表,它只允許你希望的主機遠程登錄到路由器。
- 使用命令access-class in將該訪問控制列表應(yīng)用于VTY線路。
下面的示例只允許主機172.16.10.3遠程登錄到路由器:
- Lab_ A(config)#access-1ist 50 permit host 172.16.10.3
- Lab_ A(config)#line vty 0 4
- Lab_ A(config-line)#access-class 50 in
由于訪問控制列表末尾有一條隱式的deny any語句,因此除172.16.10.3外的其他任何主機都不能遠程登錄到該路由器,而不管它將路由器的哪個IP地址用作目標。你可能想將源地址指定為管理員所屬的子網(wǎng),而不是單臺主機;但下面的示例演示了如何在不增加路由器延遲的情況下確保VTY線路的安全。
真實案例:應(yīng)保護路由器的VTY線路嗎?
使用命令show users對網(wǎng)絡(luò)進行監(jiān)視時,發(fā)現(xiàn)有人遠程登錄到了你的核心路由器。此時,你使用命令disconnect斷開了他到該路由器的連接,但發(fā)現(xiàn)幾分鐘后他又連接到了該路由器。因此,你想在該路由器的接口上放置一個訪問控制列表,但又不想給每個接口增加過多的延遲,因為該路由器處理的分組已經(jīng)很多了。你想將一個訪問控制列表應(yīng)用于VTY線路本身,但以前沒有這樣做過,不知道這種解決方案能否取得與將訪問控制列表應(yīng)用于每個接口相同的效果。就這個網(wǎng)絡(luò)而言,將訪問控制列表應(yīng)用于VTY線路是個好主意嗎?
絕對是個好主意,可使用本章前面介紹的命令access-class。為什么呢?因為這可避免使用訪問控制列衣對進出接口的每個分組進行檢查,而這樣做會增加路由分組的開銷。在VTY線路上配置命令access-class in時,只會檢查并比較進入路由器的Telnet分組。這提供了一種完美而又易于配置的安全解決方案。
注意:思科建議使用Secure Shell ( SSH )而不是Telnet 來訪問路由器的VTY線路。