1 前言
訪問控制列表ACL(Access Control Lists) 使用包過濾技術,在路由器上根據第三層或第四層包頭中的信息,如源地址、目的地址、源端口、目的端口以及上層協議等對數據包進行過濾。ACL技術不僅在路由器上技術成熟、應用廣泛,而且在三層交換機上也廣泛支持,甚至有的二層交換機也支持ACL。ACL可以實現如下功能:檢查和過濾數據包;限制網絡流量,提高網絡性能;限制或減少路由更新的內容;提供網絡訪問的基本安全級別;控制用戶網絡行為;控制網絡病毒的傳播。
從ACL的功能不同,ACL技術可以做如下分類:標準ACL;擴展ACL;命名ACL;基于時間的ACL;動態ACL;自反ACL;CBAC(Context-Based AccessControl)基于上下文的訪問控制列表等。按照這個順序可以看作越來越高的層次,具有越來越完善的防火墻功能。為了便于論述,本文示例依據如圖1拓樸結構。
圖1 示例網絡拓樸
圖1網絡中,R1路由器的左側fa0/0接口IP地址設為192.168.1.254/24,連接內網,fa0/1接口IP地址設為202.115.100.206/28,連接DMZ區,R1右側serial0/0接口IP地址設為202.115.100.1/30,連接外網。
2 標準訪問控制列表
標準ACL的過濾參數只有源IP地址范圍,不能做更靈活的定制,所以應用范圍受到限制,但是網絡設備處理起來卻很簡單,效率很高。
如圖1網絡拓樸,如果要應用標準ACL拒絕外部網訪問DMZ區服務器InServ,則相關的命令序列如下:
R1(config)#access-list 10 deny host 202.115.100.200
R1(config)#access-list 10 permit any
R1(config)#interface s0/0
R1(config-if)#ip access-group 10 out
如果要指定目的IP地址范圍,或者指定被拒絕訪問的某項服務,標準ACL就無法實現了。
3 擴展訪問控制列表
3.1 常規應用
要在包過濾規則中限制目的IP地址范圍,或者指定被拒絕訪問的某項服務,擴展ACL可以實現。例如在圖1網絡拓樸中,要限制外部網訪問DMZ服務器InServ的DNS、FTP和MS SQL Server服務,則相關的命令序列如下:
R1(config)#access-list110denytcpanyhost202.115.100.200eqftp
R1(config)#access-list110denyudpanyhost202.115.100.200eqdomain
R1(config)#access-list110denytcpanyhost202.115.100.200 eq 1433
R1(config)#access-list 110 permit ip any any
R1(config)#int s0/0
R1(config-if)#ip access-group 110 in
3.2VTY虛擬終端連接限制
默認狀態下路由器本身不允許通過telnet進行登錄,必須配置VTY虛擬終端,設置登錄密碼或者登錄用戶,并啟用登錄驗證,遠程主機就可以用telnet登錄路由器進行設備配置了。VTY虛擬終端連接限制有幾種方法,一種是在擴展ACL中拒絕telnet的TCP端口,例如:
R1(config) #access- list 120 denytcpany host202.115.100.1 eq telnet
R1(config)#access-list 120 permit ip any any
R1(config)#int s0/0
R1(config-if)#ip access-group 120 in
我們只對路由器的一個接口進行了限制,相似地,也可以在所有接口上對路由器的所有IP地址進行限制。第二種方法是在VTY虛擬終端線路上應用訪問控制列表,那樣就不需要限制TCP端口。例如:
R1(config)#access-list130permitip192.168.1.00.0.0.255any
R1(config)#access-list 130 denyip any any
R1(config)#linevty 0 4
R1(config-line)#access-class130in在VTY虛擬終端線路上因為只需要限制源IP地址范圍,所以用標準ACL就可以了。
3.3 established關鍵字
擴展ACL對TCP協議的包過濾有一個established關鍵字,它根據是否設置了TCP包的ACK或RST位來過濾TCP包(設置了ACK或RST位后,說明這個包不是會話的第一個包,即此包屬于某個已經建立的會話)。可以不用考慮TCP包的ACK和RST位的問題,根據established字面意義,只要此TCP包屬于某個已經建立的會話,才是我們所關注的。
例如在圖1網絡拓樸中,內網向外網發出的TCP連接是允許的,而且外網可以正;貞,但是不允許外網向內網發起TCP連接。
R1(config)#access-list112permittcpanyanyestablished
R1(config)#access-list 112 deny ip any any
R1(config)#int s0/0
R1(config-if)#ip access-group 112 in
主機InServ可以訪問OutServ的WWW、FTP等服務,但是OutServ不能訪問InServ的服務。另外established關鍵字只是針對TCP連接,對UDP、ICMP、EIGRP等協議并不適用。
3.4單向ping的實現
established關鍵字只能針對TCP連接,而ping命令使用的ICMP協議包,在圖1網絡拓樸中如果要PC1能夠ping通PC2,而PC2不允許ping通PC1,一種方法是拒絕一個方向的ICMP協議的echo-reply回應數據包。相關命令序列如下:
R1(config)#access-list 110 deny icmp any any echoreply
R1(config)#access-list 110 permit ip any any
R1(config)#int s0/0
R1(config-if)#ip access-group 110 out
當然,要實現這個單向ping功能,還有幾種方法,比如后面的動態ACL和自反ACL。
4 命名訪問控制列表
標準ACL和擴展ACL用數值序號來作為列表的名稱使用,但是Cisco設備限制了標準ACL的序號范圍是1-99,而擴展ACL的序號范圍是100-199,如果要定義更多的ACL或者要讓ACL名稱更有意義,就需要用到命名ACL了。
命名ACL與標準ACL、擴展ACL的工作原理是一樣的。編號ACL和命名ACL的主要區別是:
(1)名字能更直觀地反映出訪問列表完成的功能;
(2)命名ACL突破了99個標準ACL和100個擴展ACL的數量限制,能夠定義更多的訪問列表;
(3)命名ACL允許刪除個別語句,而編號ACL只能刪除整個訪問列表;
(4)命名ACL有一個配置子模式,而編號ACL沒有;把2.3中的示例用命名ACL來實現的命令序列如下:
R1(config)#ip access-list extended unid-acl
R1(config-ext-nacl)#permit tcp any any established
R1(config-ext-nacl)#deny ip any any
R1(config)#int s0/0
R1(config-if)#ip access-group unid-acl in
5 基于時間的訪問控制列表
基于時間的ACL可以為一天中的不同時間段,或者一個星期中的不同日期,或者兩者的結合制定不同的訪問控制策略,從而滿足用戶對網絡的靈活需求。它能夠應用于擴展編號ACL或者擴展命名ACL。
例如在圖1網絡拓樸中,內網用戶在本學期的上班時間不允許訪問外網,相關命令序列如下:
R1(config)#time-range term-res
R1(config-time-range)#absolute start 8:00 1 sept 2010end 18:00 22 jan 2011 /* 定義一個絕對時間范圍,在一個學期
R1(config-time-range)#periodic weekday 8:00 to18:00 /* 定義上班時間,周一至周五每天8:00-18:00
R1(config-time-range)#exit
R1(config) #access- l i s t 110 d e n y i p 192.168.1.00.0.0.255 any time-range term-res
R1(config)#access-list 110 permit ip any any
R1(config)#int s0/0
R1(config-if)#ip access-group 110 out
6 動態訪問控制列表
前面的標準ACL和擴展ACL,包括命名ACL對信道的限制都是永久性的,如果要臨時性地允許某個IP地址的數據包通過,只能用人工修改ACL實現。雖然established關鍵字可以實現單向訪問,但是并不支持另一個方向的臨時性通道。為了智能地解決這個問題,動態ACL技術應運而生。
要在一個拒絕通過的路由器接口上臨時打開一個通道,首先需要用telnet在該路由器上進行登錄認證,用戶一般通過提供用戶名和口令,就能夠開啟一個到路由器的telnet會話。在用戶被認證之后,路由器會自動關閉telnet會話,并將一個動態訪問表項置于某個訪問表中,以允許源地址為認證用戶工作站地址的數據包通過。這樣,我們可以在路由器接口上配置訪問表,只允許那些telnet認證的工作站才能發送臨時通過的數據包。
當然,事先我們至少應該允許到達路由器的telnet數據包,這樣才能進行用戶認證過程。如果不允許telnet連接,用戶無法在路由器上認證,也就談不上創建動態訪問表項了。
例如在圖1網絡拓樸中,允許在路由器上經過認證的外部用戶連到DMZ區的202.115.100.200服務器,以進行www和FTP訪問。相關命令序列如下:
R1(config)#username in-server secret inserv@sina.com
R1(config)#access-list 120 permit tcp any host202.115.100.1 eq telnet /* 必須先允許連接到路由器進行認證
R1(config)#access-list 120 permit tcp any host202.115.100.206 eqtelnet / * 允許連接到路由器的另一個IP地址進行認證
R1(config)#access-list 120 permit eigrp any any
R1(config)#access-list 120 dynamic dyn1 timeout 120
permit tcp any host 202.115.100.200 eq www /* 如果經過認證,此條生效,允許訪問DMZ服務器的WWW服務,絕對超時時間120分鐘,超時將斷開
R1(config)#access-list 120 dynamic dyn2 timeout 120permit tcp any host 202.115.100.200 eq ftp /* 如果經過認證,此條生效,允許訪問D M Z 服務器的F T P 服務,絕對超時時間120 分鐘,超時將斷開
R1(config)#interface s0/0
R1(config-if)#ip access-group 120 in
R1(config)#line vty 0 4
R1(config-line)#login local
R1(config-line)#autocommand access-enable host
timeout 15 /* 登錄后動態創建ACL條目,同時telnet自動斷開
R1(config-line)#rotary 1 /*telnet 斷開后,如果要再用telnet對路由器進行配置,就重新用telnet登錄,并指定telnet連接端口3001,如果是rotary2命令,就表示telnet連接端口3002。
應用的注意事項在命令注釋中已有說明,動態ACL的telnet認證成功后就會斷開,不能用這個telnet連接對路由器進行配置,如果一定要用telnet對路由器配置,用rotary命令允許另開一個帶端口號的telnet通道。
有兩個地方設置超時值,在access-list中設置的timeout值是絕對超時值,無論是不是有被允許的流量通過,超時將斷開鏈接,刪除動態表項。在autocommand命令中設置的timeout值是相對超時值,如果沒有被認證的流量通過,超時將斷開鏈接。絕對超時值必須大于相對超時值,超時值以分鐘為單位。
7 自反訪問控制列表
某些情況要允許內網訪問外網,但是不允許外網訪問內網,前面提到的擴展ACL中的established關鍵字可以實現這個功能,但是established關鍵字只適用于TCP連接,不能用于ICMP、EIGRP、UDP等協議數據包。自反ACL可以實現多種協議數據包類型的單向訪問控制。
例如在圖1網絡拓樸中,要拒絕外網向內網發起的所有訪問,但是允許內網向外網發起的所有訪問。相關的命令序列如下:
R1(config)#ip access-list extended r1-in
R1(config-ext-nacl)#permit ospf any any
R1(config-ext-nacl)#evaluate my-ref /*對進方向的數據包進行評估,評估依據是出方向的擴展訪問列表中的自反條目,如果是出方向自反條目允許訪問的回應數據包,則允許通過
R1(config)#ip access-list extended r1-out
R1(config-ext-nacl)#permit ip any any reflect myref/* 在出方向定義自反條目
R1(config)#int s0/0
R1(config-if)#ip access-group r1-in in
R1(config-if)#ip access-group r1-out out
R1(config)#ip reflexive-list timeout 60 /* 臨時反射出來的條目的全局超時有效時間60 秒
在接口的in方向上只允許了一個ospf協議,其他訪問都禁止了,也就是不允許外網訪問內網。evaluatemy-ref嵌套了一個反射ACL,名稱為my-ref。在接口的out方向上,允許所有的訪問,但是如果沒有自反功能的話是可以出去但是回不來,所以在permitipanyany后加上了一個reflect,也就是說,任何從內網發起的流量如果它匹配這條permit ip any any reflect my ref語句的話,則自動在r1-in的列表中創建一條動態的permit語句。另外,對自反ACL做以下說明:
(1)自反ACL永遠是permit的;
(2)當使用自反ACL時,命名訪問列表必須創建兩個,一個用于入站數據包,一個用于出站數據包,自反條目將成對使用并且相互關聯;
(3)自反ACL允許高層Session信息的IP包過濾;
(4)利用自反ACL可以只允許出去的流量,但是阻止從外部網絡產生的向內部網絡的流量,從而可以更好地保護內部網絡;
(5)自反ACL是在有流量產生時(如出方向的流量)臨時自動產生的,并且當Session結束時條目就刪除;
(6)自反ACL不是直接被應用到某個接口下的,而是嵌套在一個擴展命名訪問列表下的;
(7)對那些在會話過程中改變所使用端口號的應用程序來說,自反訪問列表不能與之工作,FTP是使用過程中改變端口號的應用程序,如果使用了自反ACL,必須使用被動FTP來取代;
(8)自反ACL不能處理多通道應用程序;
(9)每行自反條目可以用timeout配置超時值,也可以整個用一個全局超時值。UDP連接中,或者TCP會話未正常終止時,將使用閑置超時值刪除臨時允許條目。
8 基于上下文的訪問控制列表
基于上下文的訪問控制列表CBAC能夠處理那些不能使用自反ACL處理的多端口協議。之前的ACL工作在網絡層或傳輸層,它們處理一些應用程序的能力是有限的,而CBAC通過應用層來過濾數據包,處理能力更強。CBAC的工作方式和自反ACL很類似,它們都是基于從路由器出站經過外部接口的數據流創建一個臨時通道,這些通道允許會話返回進入內部網絡的數據流通過。應用層的協議種類很多,CBAC并不支持所有的應用層協議,但是可以修改端口應用程序映射表(PAM,PortApplication Mapping)把非標準端口號與CBAC支持的應用層協議相關聯,這也提供了一定的靈活性。
CBAC的主要功能是:(1)CBAC能夠基于應用層智能地過濾TCP/UDP包,可以支持FTP、RPC、SQL*Net等協議過濾,甚至可以過濾JAVA應用程序;(2)因為CBAC檢測流量是基于會話狀態的,所以可以防止一些DoS拒絕服務的攻擊;(3)CBAC可以創建實時的警報和審計日志,以方便對事件進行跟蹤;(4)CBAC支持Cisco的入侵檢測系統IDS,增強系統的安全性。
例如在圖1網絡拓樸中,要拒絕外網向內網發起的所有訪問,但是允許內網向外網發起的http、ftp、電子郵件訪問,并對java小應用程序進行限制。相關的命令序列如下:
R1(config)#ip inspect name test-cbac http java-list 51timeout 3600
R1(config)#ip inspect name test-cbac ftp timeout 3600
R1(config)#ip inspect name test-cbac pop3 timeout3600
R1(config)#ip inspect name test-cbac smtp timeout3600
/* 以上定義被允許的CBAC 應用協議,同時限制網頁中的java 小應用程序,相應的CBAC 名稱是test-cbac,連接超時值是3600 秒
R1(config)#access-list 51 permit host 61.139.100.200R1(config) #access- l i s t 51 p e r m i t 61.135.167.00.0.0.255
R1(config)#access-list 51 deny any
/* 上面的標準訪問列表應用于java 應用程序的友好列表中,只允許指定服務器和一個指定網段的java 程序進入內網
R1(config)#access-list 110 permit icmp any any
R1(config)#access-list 110 deny ip any any
R1(config)#int s0/0
R1(config-if)#ip access-group 110 in
R1(config-if)#ip inspect test-cbac out
CBAC的限制:(1)CBAC不能為所有協議提供智能過濾,他只能為你所指定的協議進行過濾;(2)CBAC只能提供一定類型的入侵保護.只能提供大部分常規的入侵保護;(3)CBAC只能檢查TCP和UDP連接,不能檢測ICMP、路由協議等;(4)對第三者路由器的加密的信道也無法進行檢測,如IPSec信道。
9 總結
訪問控制列表ACL是CiscoIOS防火墻的核心技術,多種訪問控制列表技術從簡到繁、從低層次到高層次,為網絡的邊界安全提供了靈活的解決方案,在此分析了各種訪問控制列表技術的性能和相互之間的差別,并使用案例對它們的應用進行了展示。
核心關注:拓步ERP系統平臺是覆蓋了眾多的業務領域、行業應用,蘊涵了豐富的ERP管理思想,集成了ERP軟件業務管理理念,功能涉及供應鏈、成本、制造、CRM、HR等眾多業務領域的管理,全面涵蓋了企業關注ERP管理系統的核心領域,是眾多中小企業信息化建設首選的ERP管理軟件信賴品牌。
轉載請注明出處:拓步ERP資訊網http://www.guhuozai8.cn/
本文標題:Cisco路由器ACL剖析