訪問控制列表 ACL

 訪問控制列表(Access Control List,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 的編寫可能相當複雜而且極具挑戰性。每個接口上都可以針對多種協議和各個方向進行定義。示例中的路由器有兩個接口配置了 IP、AppleTalk 和 IPX。該路由器可能需要 12 個不同的 ACL — 協議數 (3) 乘以方向數 (2),再乘以端口數 (2)。

          ACL 的編寫可能相當複雜而且極具挑戰性。每個接口上都可以針對多種協議和各個方向進行定義。


執行過程

         一個端口執行哪條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命令來具體定義時間範圍。


ACL放置位置

標準ACL要儘量靠近目的端
       
擴展ACL要儘量靠近源端

              

                                                                                                                  注意事項
     
 1.最有限制性的語句應該放在ACL語句的首行。把最有限制性的語句放在ACL語句的首行或者語句中靠近前面的位置上,把“全部允許”或者“全部拒絕”這樣的語句放在末行或接近末行,可以防止出現諸如本該拒絕(放過)的數據包被放過(拒絕)的情況

2.增加:標準ACL、擴展ACL,新的表項只能被添加到ACL的末尾,這意味着不可能改變已有訪問控制列表的功能。如果必須改變,只有先刪除已存在的ACL,然後創建一個新ACL,將新ACL應用到相應的接口上。
       命名ACL可以在指定的位置添加新的一行。

3.刪除:!!!標準ACL、擴展ACL語句不能被逐條的刪除,只能一次性刪除整個ACL。命名ACL可以單一刪除某一行,

4.在ACL的最後,有一條隱含的“全部拒絕”的命令,所以在 ACL裏一定至少有一條“允許”的語句

5.ACL只能過濾穿過路由器的數據流量,不能過濾由本路由器上發出的數據包

6.路由器選擇進行以前,應用在接口進入方向in的ACL起作用。路由器選擇決定以後,應用在接口離開方向out的ACL起作用

7.如果建立一個空的ACL,綁定至端口,則會允許所有流量通過。如果ACL中有一句規則,則ACL末尾會隱含一條
deny any any

 

第一部分

(1)標準訪問列表

access-list   access-list-number  { permit | deny }  {source [source-wildcard] | any|host source}

                                                                                                                 源IP地址      源IP地址的通配符
access-list-number  : 1~991300~1999
{ permit | deny }:   permit、deny 、 remark
{source [source-wildcard] | any|host source}:192.168.1.0  0.0.0.255     host 192.168.0.1     any

access-list  編號 動作 源地址

access-list 1 deny host 172.17.31.222 
       access-list 1 permit any 

允許172.17.31.0/24通過,其他主機禁止 

access-list 1 permit 172.17.31.0  0.0.0.254 
          (反碼255.255.255.255減去子網掩碼,如172.17.31.0/24的255.255.255.255—   255.255.255.0=0.0.0.255) 
     
         禁止172.17.31.0/24通過,其他主機允許 
         access-list 1 deny 172.17.31.0  0.0.0.254 
         access-list 1 permit any


(2)擴展訪問列表

access-list    access-list-number  { permit | deny }    { protocol \ protocol-keyword }                                                              { source [ source-wildcard ] | any|host source }   
                           { destination destination-wildcard } | any |
host source}     
                            [protocol-specific options]     
                           [established]
      [log]


access-list-number :100-199、2000-2699
      { permit | deny } :permit   deny    remark 
      { protocol \ protocol-keyword } : tcp   udp   ip   icmp   ……    
     
{ source [ source-wildcard ] | any|host source }  :192.168.1.0  0.0.0.255     host 192.168.0.1     any
     
{ destination destination-wildcard } | any |host source}:同上
     [protocol-specific options]:eq等於   lq小於   gq大於   範圍rang 15 20
     [established] :established選項只適用於TCP,限制外部發起的TCP連接,外網只能迴應內網的TCP連接,
      而不能發起對內網的TCP連接!
      [log]:將匹配的記錄記載至日誌。

access-list  編號 動作 協議 源地址 目的地址 端口

 

允許所有主機訪問172.17.31.222的www服務
       access-list 100  permit  tcp host 172.17.31.222    any    eq www 
      允許所有主機訪問172.17.31.222主機telnet(23)端口其他禁止
      access-list 100 permit  tcp  any  host 172.17.31.222    eq 23


  如果禁用了icmp包,可禁止外部的ping 消息

(3)將acl應用到端口

進入端口:interface f0/0
      綁定命令:ip access-group 
acl_number  out | in

   再一次強調,在標準ACL和擴展ACL中,如果執行no 
         access-list acl_number 會刪除整個acl及其引用的命令。
       用no 作爲任何acl語句的開頭,會有完全相同的效果。
       千萬不要在生產設備上輕易使用此命令!

 

 

第二部分

從IOS11.2開始,思科路由器同時支持編號acl和命名acl

(1)在路由器上配置命名的標準ACL.

ip access-list standard acl名稱 回車
       動作   源地址

       ip access-list standard 
acl__name  回車

permit | deny     source source_netmask | host x.x.x.x | any 回車

 

       (2)命名擴展ACL
        ip access-list extended  acl名稱 回車
        動作   協議  源地址 目的地址 端口號 ……

        ip access-list exteded acl__name  回車
       permti | deny    tcp | udp | ip ……      源地址    目的地址  eq | lg | gq | rang    端口號|服務   [established]    [log]

 

       (3)應用到端口

        interface  f0/0 
        ip access-group 
acl_name  in | out

        

修改命名ACL
    在cisco的IOS新版本(12.2(14)S,12.2(15)T,12.3(2)T以上)中引入了ACL序列編號(ACL Sequence Numbering)功能,使得訪問控制列表的編輯變得非常的方便和快捷,
   序列號不會顯示在 show running-config 路由器運行配置中。只有運行show access-list查看訪問列表顯示命令才能顯示輸入的序列號信息。

例如:

show running-config
ip access-group test in
ip access-list extended tset
permit ip 10.10.10.0 0.0.0.255 any
permit icmp 10.10.10.0 0.0.0.255 any
deny ip 10.10.20.0 0.0.0.255 any
permit tcp 10.10.30.0 0.0.0.255 host 192.168.87.65 eq www


    show access-list
Extended IP access list tset
10 permit ip 10.10.10.0 0.0.0.255 any
20 permit icmp 10.10.10.0 0.0.0.255 any
30 deny ip 10.10.20.0 0.0.0.255 any
40 permit tcp 10.10.30.0 0.0.0.255 host 192.168.87.65 eq www

我們可以再指定的位置增加一行語句,
        1.建立一個測試用訪問控制列表
   R1(config)#ip access-list extended test
   R1(config-ext-nacl)#deny tcp any any eq 80
   R1(config-ext-nacl)#deny udp any any eq 8000
   R1(config-ext-nacl)#permit ip any any
    
    2.顯示訪問控制列表語句的當前序號

    R1#show ip access-lists test
    Extended IP access list test
     10 deny tcp any any eq www
     20 deny udp any any eq 8000
     30 permit ip any any

      3.在訪問控制列表中指定的位置上增加一個語句(注意新增語句的序列號)
   R1(config)#ip access-list extended test
   R1(config-ext-nacl)#12 permit udp any host 192.168.1.1 eq 8000
   
     R1#show ip access-lists test

   Extended IP access list test
     10 deny tcp any any eq www
     12 permit udp any host 192.168.1.1 eq 8000
     20 deny udp any any eq 8000
     30 permit ip any any

      新增語句排在第二的位置


  刪除命名ACL
  在命名ACL中,我們可以刪除特定的一行,
   
刪除訪問控制列表中的某個特定語句
   R1(config)#ip access-list extended test
   R1(config-ext-nacl)#no 20 deny udp any any eq 8000
   
     R1#show ip access-lists test

   Extended IP access list test
     10 deny tcp any any eq www
     12 permit udp any host 192.168.1.1 eq 8000
     30 permit ip any any


重新編排一個訪問控制列表的序號
   R1(config)#ip access-list resequence test 10 10

(從序號10開始排序,每次增加爲10)
   R1(config)#do show ip access-lists test
   Extended IP  list test
     10 deny  any any eq 
     20 permit udp any host 192.168.1.1 eq 8000
     30 permit ip any any
   (在這裏do 命令運行您在配置模式下執行一個EXEC命令,該命令要求IOS版本12.2(8)T 以上) 



第三部分
    ACL的查看、註釋、分析

查看:

show running-config:可以顯示ACL,以及哪些接口啓動ACL
show ip interfaces: 在路由器接口上啓動了哪個ACL
show access-lists :顯示ACl中的語句(可以顯示每條規則被匹配的次數),可以使用
        clear access-list counters [acl_number | acl_name]來清除計數器
show access-list [acl_number | acl_name] :查看特定ACL 
show ip access-list :只列出 IP協議的ACL


註釋:

    在大型網絡環境中可能同時存在上百條ACL,上千行規則語句。從 IOS12.0(2)T 開始可以在ACL語句中嵌入
註釋或備註,對編號ACL和命名ACL都有效果。
編號ACL  access-list 1 remark 
this is access
命名ACL  ip access-list standard|extended ACL_NAME 回車
         remark 
this is access


分析:

     如果在ACL語句後加log 選項,則匹配語句的訪問都會被記錄,問題是被記錄到哪裏?
 默認地,日誌記錄只在路由器的控制檯線路上打開,我們必須讓電腦連接路由器,在電腦上看這些記錄,當消息滾過屏幕並超出了終端軟件的歷史緩存,我們則沒有任何機制可以再看到那些丟失的消息。
    如果把日誌消息記錄到除了線路以外的其他目的地,則可以避免這個問題。
要在其他地方記錄日誌,則必須相應地打開日誌記錄並進行配置。使用以下命令打開日誌記錄:

Router(config)#logging on      允許將日誌記錄到非控制檯目的地
可以將日誌信息轉發到以下4種基本目的地
●線路;
●內部緩存;
●系統日誌服務器;
●SNMP管理臺;
Router(config)#logging console [severity_level]    記錄到控制檯
Router(config)#logging monitor [severity_level]    
記錄到邏輯VTY
Router(config)#logging buffered [buffer_size|severity_level]    記錄到路由器的內部緩存      
    該命令有兩個參數,buffer_size指定爲內部緩存分配多大的內存,以字節爲單位。使用default logging buffered命令將緩存大小設回     出廠的默認值。severity_level指出應該記錄的嚴重級別。默認的大小和嚴重級別(通常是7)依賴於平臺型號。
Router(config)#logging host {IP_address|hostname}    記錄到日誌服務器中

查看時使用的命令爲 show logging 
更多日誌信息參考(http://bbs.51cto.com/thread-911912-1.html

                          

發佈了184 篇原創文章 · 獲贊 61 · 訪問量 36萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章