訪問控制列表
是路由器和交換機接口的指令列表,用來控制端口進出的數據包。ACL適用於所有的被路由協議,如IP、IPX、AppleTalk等。
信息點間通信和內外網絡的通信都是企業網絡中必不可少的業務需求,為了保證內網的安全性,需要通過安全策略來保障非授權用戶只能訪問特定的網絡資源,從而達到對訪問進行控制的目的。簡而言之,ACL可以過濾網絡中的流量,是控制訪問的一種網絡技術手段。
配置ACL後,可以限制網絡流量,允許特定設備訪問,指定轉發特定端口數據包等。如可以配置ACL,禁止局域網內的設備訪問外部公共網絡,或者只能使用FTP服務。ACL既可以在路由器上配置,也可以在具有ACL功能的業務軟件上進行配置。
作用
ACL可以限制網絡流量、提高網絡性能。例如,ACL可以根據數據包的協議,指定數據包的優先級。
ACL提供對通信流量的控制手段。例如,ACL可以限定或簡化路由更新信息的長度,從而限制通過路由器某一網段的通信流量。
ACL是提供網絡安全訪問的基本手段。ACL允許主機A訪問人力資源網絡,而拒絕主機B訪問。
ACL可以在路由器端口處決定哪種類型的通信流量被轉發或被阻塞。例如,用戶可以允許E-mail通信流量被路由,拒絕所有的Telnet通信流量。
3P原則
記住 3P 原則,您便記住了在路由器上應用 ACL 的一般規則。您可以為每種協議 (per protocol)、每個方向 (per direction)、每個接口 (per interface) 配置一個 ACL:
每種協議一個 ACL:要控制接口上的流量,必須為接口上啟用的每種協議定義相應的 ACL。
每個方向一個 ACL :一個 ACL 只能控制接口上一個方向的流量。要控制入站流量和出站流量,必須分別定義兩個 ACL。
每個接口一個 ACL :一個 ACL 只能控制一個接口(例如快速以太網0/0)上的流量。
執行過程
一個端口執行哪條ACL,這需要按照列表中的條件語句執行順序來判斷。如果一個數據包的報頭跟表中某個條件判斷語句相匹配,那麽後面的語句就將被忽略,不再進行檢查。
數據包只有在跟第一個判斷條件不匹配時,它才被交給ACL中的下一個條件判斷語句進行比較。如果匹配(假設為允許發送),則不管是第一條還是最後一條語句,數據都會立即發送到目的接口。如果所有的ACL判斷語句都檢測完畢,仍沒有匹配的語句出口,則該數據包將視為被拒絕而被丟棄。這裏要註意,ACL不能對本路由器產生的數據包進行控制。
如果設備使用了TCAM,比如aute U3052交換機,那麽所有的ACL是並行執行的。舉例來說,如果一個端口設定了多條ACL規則,並不是逐條匹配,而是一次執行所有ACL語句。
ACL分類
目前有三種主要的ACL:標準ACL、擴展ACL及命名ACL。其他的還有標準MAC ACL、時間控制ACL、以太協議 ACL 、IPv6 ACL等。
標準的ACL使用 1 ~ 99 以及1300~1999之間的數字作為表號,擴展的ACL使用 100 ~ 199以及2000~2699之間的數字作為表號。
標準ACL可以阻止來自某一網絡的所有通信流量,或者允許來自某一特定網絡的所有通信流量,或者拒絕某一協議簇(比如IP)的所有通信流量。
擴展ACL比標準ACL提供了更廣泛的控制範圍。例如,網絡管理員如果希望做到“允許外來的Web通信流量通過,拒絕外來的FTP和Telnet等通信流量”,那麽,他可以使用擴展ACL來達到目的,標準ACL不能控制這麽精確。
在標準與擴展訪問控制列表中均要使用表號,而在命名訪問控制列表中使用一個字母或數字組合的字符串來代替前面所使用的數字。使用命名訪問控制列表可以用來刪除某一條特定的控制條目,這樣可以讓我們在使用過程中方便地進行修改。 在使用命名訪問控制列表時,要求路由器的IOS在11.2以上的版本,並且不能以同一名字命名多個ACL,不同類型的ACL也不能使用相同的名字。
隨著網絡的發展和用戶要求的變化,從IOS 12.0開始,思科(CISCO)路由器新增加了一種基於時間的訪問列表。通過它,可以根據一天中的不同時間,或者根據一星期中的不同日期,或二者相結合來控制網絡數據包的轉發。這種基於時間的訪問列表,就是在原來的標準訪問列表和擴展訪問列表中,加入有效的時間範圍來更合理有效地控制網絡。首先定義一個時間範圍,然後在原來的各種訪問列表的基礎上應用它。
基於時間訪問列表的設計中,用time-range 命令來指定時間範圍的名稱,然後用absolute命令,或者一個或多個periodic命令來具體定義時間範圍。[1]
基於時間
概述
一個很通常的需求,就是在某個公司裏,有時希望限制員工在某個時間範圍內才可以訪問網頁,即HTTP服務,或其它服務,在時間範圍之外,就不能訪問,那麽這樣的需求,就可以通過配置基於時間的ACL來實現。
要通過ACL來限制用戶在規定的時間範圍內訪問特定的服務,首先設備上必須配置好正確的時間。在相應的時間要允許相應的服務,這樣的命令,在配置ACL時,是正常配置的,但是,如果就將命令正常配置之後,默認是在所有時間內允許的,要做到在相應時間內允許,還必須為該命令加上一個時間限制,這樣就使得這條ACL命令只在此時間範圍內才能生效。而要配置這樣的時間範圍,是通過配置time-range來實現的,在time-range中定義好時間,再將此time-range跟在某ACL的條目之後,那麽此條目就在該時間範圍內起作用,其它時間是不起作用的。
在定義time-range時,常用的時間簡單分為兩種,第一種叫做絕對時間(absolute),即這個時間只生效一次,比如2010年1月1月15:00;另一種時間叫做周期時間(periodic),即這個時間是會多次重復的,比如每周一,或者每周一到周五。
配置
前提:在R1路由器上需要提前配置好正確的時間,此步驟省略。
配置time-range
r1(config)#time-range TELNET
r1(config-time-range)#periodic weekdays 9:00 to 15:00
說明:定義的時間範圍為每周一到周五的9:00 to 15:00
配置ACL
說明:配置R1在上面的時間範圍內拒絕R2到R4的telnet,其它流量全部通過。
r1(config)#access-list 150 deny tcp host 10.1.1.2 any eq 23 time-range TELNET
r1(config)#access-list 150 permit ip any any
應用ACL
r1(config)#int f0/1
r1(config-if)#ip access-group 150 out
測試時間範圍內的流量情況
(1)查看當前R1的時間
r1#sh clock
14:34:33.002 GMT Thu Oct 1 2009
r1#
說明:當前時間為周四14:34,即在所配置的時間範圍內。
(2)測試R2向R4發起telnet會話
r2#telnet 14.1.1.4
Trying 14.1.1.4 ...
% Destination unreachable; gateway or host down
r2#
說明:可以看到,在規定的時間範圍內,R2向R4發起telnet會話是被拒絕的。
(3)測試除telnet外的其它流量
r2#ping 14.1.1.4
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 14.1.1.4, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/2/4 ms
r2#
說明:可以看到,在規定的時間範圍內,除了telnet之外,其它流量不受限制。
(4)測試除R2之外的設備telnet情況
r3#telnet 14.1.1.4
Trying 14.1.1.4 ... Open
r4>
說明:可以看到,除R2之外,其它設備telnet並不受限制。
測試時間範圍外的流量情況
(1)查看當前R1的時間
r1#sh clock
15:01:15.206 GMT Thu Oct 1 2009
r1#
說明:當前時間為周四15:01,即在所配置的時間範圍之外。
(2)測試R2向R4發起telnet會話
r2#telnet 14.1.1.4
Trying 14.1.1.4 ... Open
r4>
說明:在時間範圍之外,所限制的流量被放開。
正確放置
ACL通過過濾數據包並且丟棄不希望抵達目的地的數據包來控制通信流量。然而,網絡能否有效地減少不必要的通信流量,這還要取決於網絡管理員把ACL放置在哪個地方。
假設在的一個運行TCP/IP協議的網絡環境中,網絡只想拒絕從RouterA的T0接口連接的網絡到RouterD的E1接口連接的網絡的訪問,即禁止從網絡1到網絡2的訪問。
根據減少不必要通信流量的通行準則,網管員應該盡可能地把ACL放置在靠近被拒絕的通信流量的來源處,即RouterA上。如果網管員使用標準ACL來進行網絡流量限制,因為標準ACL只能檢查源IP地址,所以實際執行情況為:凡是檢查到源IP地址和網絡1匹配的數據包將會被丟掉,即網絡1到網絡2、網絡3和網絡4的訪問都將被禁止。由此可見,這個ACL控制方法不能達到網管員的目的。同理,將ACL放在RouterB和RouterC上也存在同樣的問題。只有將ACL放在連接目標網絡的RouterD上(E0接口),網絡才能準確實現網管員的目標。由此可以得出一個結論: 標準ACL要盡量靠近目的端。
網管員如果使用擴展ACL來進行上述控制,則完全可以把ACL放在RouterA上,因為擴展ACL能控制源地址(網絡1),也能控制目的地址(網絡2),這樣從網絡1到網絡2訪問的數據包在RouterA上就被丟棄,不會傳到RouterB、RouterC和RouterD上,從而減少不必要的網絡流量。因此,我們可以得出另一個結論:擴展ACL要盡量靠近源端。ACL的主要的命令 命令描述access-list 定義訪問控制列表參數ip access-group 指派一個訪問控制列表到一個接口ip access-list extended 定義一個擴展訪問控制列表Remark 註釋一個訪問控制列表show ip access-list 顯示已配置的訪問控制列表。
定義規範
(1)ACL的列表號指出了是哪種協議的ACL。各種協議有自己的ACL,而每個協議的ACL又分為標準ACL和擴展ACL。這些ACL是通過ACL列表號區別的。如果在使用一種訪問ACL時用錯了列表號,那麽就會出錯誤。
(2)一個ACL的配置是每協議、每接口、每方向的。路由器的一個接口上每一種協議可以配置進方向和出方向兩個ACL。也就是說,如果路由器上啟用了IP和IPX兩種協議棧,那麽路由器的一個接口上可以配置IP、IPX兩種協議,每種協議進出兩個方向,共四個ACL。
(3)ACL的語句順序決定了對數據包的控制順序。在ACL中各描述語句的放置順序是很重要的。當路由器決定某一數據包是被轉發還是被阻塞時,會按照各項描述語句在ACL中的順序,根據各描述語句的判斷條件,對數據報進行檢查,一旦找到了某一匹配條件就結束比較過程,不再檢查以後的其他條件判斷語句。
(4)最有限制性的語句應該放在ACL語句的首行。把最有限制性的語句放在ACL語句的首行或者語句中靠近前面的位置上,把“全部允許”或者“全部拒絕”這樣的語句放在末行或接近末行,可以防止出現諸如本該拒絕(放過)的數據包被放過(拒絕)的情況。
(5)新的表項只能被添加到ACL的末尾,這意味著不可能改變已有訪問控制列表的功能。如果必須改變,只有先刪除已存在的ACL,然後創建一個新ACL,將新ACL應用到相應的接口上。
(6)在將ACL應用到接口之前,一定要先建立ACL。首先在全局模式下建立ACL,然後把它應用在接口的出方向或進方向上。在接口上應用一個不存在的ACL是不可能的。
(7)ACL語句不能被逐條的刪除,只能一次性刪除整個ACL。
(8)在ACL的最後,有一條隱含的“全部拒絕”的命令,所以在 ACL裏一定至少有一條“允許”的語句。
(9)ACL只能過濾穿過路由器的數據流量,不能過濾由本路由器上發出的數據包。
(10)在路由器選擇進行以前,應用在接口進入方向的ACL起作用。
(11)在路由器選擇決定以後,應用在接口離開方向的ACL起作用。
常見問題
“ACL 的最後一條語句都是隱式拒絕語句” 是什麽意思?
每個 ACL 的末尾都會自動插入一條隱含的 deny 語句,雖然ACL中看不到這條語句,它仍起作用。隱含的 deny 語句會阻止所有流量,以防不受歡迎的流量意外進入網絡。
配置ACL後為什麽沒有生效?
在創建訪問控制列表之後,必須將其應用到某個接口才可開始生效。ACL 控制的對象是進出接口的流量。
命令格式
access-list命令
(1)標準訪問列表
access-list access-list-number { permit | deny } {source [source-wildcard] | any}
命令解釋如下。
access-list:訪問列表命令。
access-list-number:訪問列表號碼,值為1~99.
permit:允許。
deny:拒絕。
source:源IP地址。
source-wildcard:源IP地址的通配符。
(2)擴展訪問列表
access-list access-list-number { permit | deny } { protocol \ protocol-keyword } { source [ source-wildcard ] | any } { destination destination-wildcard } | any }[protocol-specific options][log]
命令解釋如下。
access-list-number:訪問列表號碼,值為100~199.
protocol \ protocol-keyword:可使用的協議,包括IP、ICMP、IGRP、EIGRP、OSPF等。
destination destination-wild:目的IP地址,格式與源IP地址相同。
protocol-specific options:協議制定的選項。
log:記錄有關數據報進入訪問列表的信息。
訪問控制列表