鐵之狂傲

 取回密碼
 註冊
搜尋

【理論解析】 存取控制清單 Access List

[複製連結] 檢視: 11592|回覆: 3
  • 名望的英雄

    KUSO四格畫家

    1-1 基本知識

    1-1-1 TCP

    現在的網路在通訊時,多半是使用 TCP/IP 協定,TCP/IP 協定是連線導向
    (connection-oriented)、全雙工、可靠的服務,這裡所謂可靠的服務,是指當個
    人電腦與目的地伺服器通訊時,會先建立一個 TCP 連線。在下圖中,左邊是一
    台個人電腦,右邊假設是一台網頁伺服器。




    在上圖中,PC 會先送出一個 ACK (acknowledgement,確認)給目的地伺
    服器,這個 ACK 事實上只是在TCP 封包上的一個被標記的 bit 。如果目的地
    伺服器收到這個 ACK ,就會送一個 SYN/ACK 回覆給 PC ,發送端 PC 收到
    後會再送回一個 ACK 通知以完成同步,接下來PC 就可以傳送資料。當傳送
    資料開始,PC 會發出一個需求給伺服器,這個需求帶有URL 與網頁名稱,伺
    服器收到後會送一個 ACK 給 PC ,並且開始傳送資料,PC 若收到資料會回覆
    ACK 給伺服器 。當資料傳送結束,伺服器會送出一個 FIN/ACK 給PC。


    1-1-2 Port

    TCP 協定與 UDP 協定分別都有定義 Port 號與其對應的用途,Port 依據
    範圍進行分類,可以分為「公認(Well Known)」、「註冊(Registered)」及「私有/
    動態」三種,以下分別說明這三種 Port 。

    (1) 公認 Port :

    範圍是 0 到 1023 ,在這個範圍內的 Port 是大家所公認使用的 Port 。
    TCP 協定常見的有 : 21 是 FTP、23 是 Telnet、25 是 SMTP、80是HTTP
    、110 是 POP3、443 是HTTPS。UDP 協定常見的有 : 69 是 TFTP、520 是 RIP。

    (2) 註冊 Port :

    範圍是 1024 到 49151。
    TCP 協定常見的有 : 1863 是被 MSN Messager 使用。
    UDP 協定常見的有 : 1812 是RADIUS 認證。


    (3) 私有/動態 Port :

    這段保留不使用,通常會做為來源 Port 使用。
    TCP 與 UDP 的某些服務是使用相同的 Port 號碼。公認 Port 相同的有 :
    53 是 DNS 、161 是 SNMP ,在註冊 Port 中相同的有 : 1433 是 MS SQL。

    1-2 ACL

    1-2-1 ACL 的功能

    網路安全的範圍非常廣,在 CCNA 的範圍中,最重要的課題就是存取控制
    清單或簡稱存取清單(Access Control List,ACL),管理者可以利用路由器及
    ACL,允許某些流量可以通過,某些流量不准通過。ACL 就像是一個簡單的防
    火牆(Firewall),提供了基本的流量過濾功能。

    ACL 是一串的「允許」與「拒絕」的敘述清單,這個清單會套用在路由器的介面
    上,當封包到達路由器的介面時,因為封包中包含了一些資訊,路由器就會依據
    這張清單進行「允許」或「拒絕」的決策。過濾清單中可以使用第三層的條件,
    例如 : 來源 IP、目的 IP、ICMP 訊息型態。過濾清單中也可以包含第四層的資訊,
    TCP、UDP、Port 號。

    總結 ACL 提供了下面的功能 :

    (1) 提供流量(traffic flow)控制。

    ACL 可以對繞送協定的路徑更新進行限制性傳送,因此頻寬可以被節省下來。

    (2) 增加網路效能。

    使不需要的流量或服務不會出現,降低網路的負載,就是增加網路的效能。

    (3) 提供基本的網路安全。

    就像一個防火牆一樣。


     

    回覆 使用道具 檢舉

    全世界最先進的跳動筆
  • 名望的英雄

    KUSO四格畫家

    1-2-2 ACL 簡介

    預設的情況下,路由器內沒有設定任何的 ACL ,所以不會過濾任何的流量,
    所以當封包進入路由器時,是直接依據路由表來繞送。

    ACL 是在路由器上的一種設定,把它想像成是一張清單,當管理者在介面上設定
    ACL 完成後,經過此介面的封包就會依據這張清單的列表,由上而下一行一行的
    比對,檢視此封包的內容是否符合清單上其中一行的敘述條件,若封包符合其中
    一行的敘述條件,就會看看這行要處理的行為是「允許」還是「拒絕」,若這行
    是拒絕 ,那麼這個封包會被丟棄。若這行是「允許」那麼這個封包就會被放行。

    設定 ACL 時,要注意三個項目 : 「協定」、「方向」、「介面」

    一個介面有兩個方向,分別是「inbound」及「outbound」,這兩個方向可以分
    別套用各自的 ACL (如果要套用同一 ACL 當然也可以),每個 ACL 包含多條規
    則,每條規則可以針對不同的協定。



    ACL 是被套用在介面上,如果是套用在 Inbound 方向,代表將來封包在繞送到
    Outbound 介面之前,封包即先進行 ACL 的判斷。如果是套用在Outbound 方向
    ,代表封包已經繞送到 Outbound 介面,封包在此將進行 ACL判斷。

    如果所有的比對都不成功,最後會有一個「隱含」的Deny 敘述,其實這個 Deny
    敘述就是將比對不成功的封包一律丟棄。

    1-2-3 ACL 的型態

    ACL 主要有兩大類 : 「標準」與「延伸」。標準 ACL 是以來源 IP 位址的
    封包為目標進行比對,命令的語法比較單純,如下所示 :

    access-list 10 permit 192.168.1.0 0.0.0.255

    上面的 ACL 會允許 192.168.1.0/24 通過,其他的封包則會被丟棄,不要
    忘記最後有一個隱含的 Deny ,會將所有封包丟棄。

    延伸 ACL 的命令語法就比較複雜,命令中可能包含了 TCP 或 UDP、來源
    IP 位址、來源 Port 、目的 IP 位址、目的地 Port …等項目,所以語法看起
    來也比較複雜,如下所示 :

    access-list 110 permit tcp 192.168.1.0 0.0.0.255 any eq 80

    上面的 ACL 針對的是來源位址192.168.1.0/24 的封包,目的地位址不限制,
    但是目的地 Port 是 80 (HTTP)的封包可以通過,其他的封包則會被丟棄。
    實際在開始使用 ACL 前,要完成兩項主要的工作 :

    (1) 依據要過濾的封包,決定使用哪一種 ACL,不同的 ACL 存取清單的號碼或
    名字會不同,然後定義 ACL 的細節 。

    (2) 將 ACL 套用在介面上或是終端線路上,例如 : 套用在FastEthernet 0/0 或
    line vty 上。

    1-2-4 數字清單與命名清單

    ACL 可以使用數字來決定使用的是「標準 ACL」或是「延伸ACL」。

    標準ACL 的範圍是 1 到 99 及 1300 到 1999 ,延伸 ACL 的範圍是 100 至199
    及 2000 到2699。例如 : 若有一個存取清單的編號是 access-list 10 ,即代表
    這份清單是標準 ACL,不可能會有類似下面的這種語法出現 :

    access-list 10 permit tcp 192.168.1.0 0.0.0.255 any eq 80

    標準 ACL 與延伸 ACL 的數字範圍,並沒有包括 200 到 1299 ,因為這是保留給
    其他非 IP 協定(例如: IPX 及 AppleTalk)使用。

    以上敘述的都是數字型 ACL ,也可以用命名型 ACL ,命名型 ACL 的名字最好是
    用大寫字母,名字的第一個字必須是英文字元,名字中不可包含空白及標點符號。

    使用命名 ACL 的優點就是可以隨意增加及刪除清單中的列表項目。


     

    回覆 使用道具 檢舉

  • 名望的英雄

    KUSO四格畫家

    1-2-5 ACL 套用的位置

    ACL 放置的位置關係到網路的「效率」,ACL 放置的位置如果正確,可以過濾
    許多網路上不必要的流量,增加網路的效能;但是封包在進行 ACL 的比對時,
    每經過 ACL 中的一條項目,就會花費路由器的 CPU 時間,因此如果 ACL放置
    的位置不恰當,可能會造成封包進行不必要的比對,浪費路由器 CPU 的時間,
    等於變成降低網路的效能。因此在決定 ACL 放置的地方時,有幾個基本的原則 :

    (1) 如果是延伸 ACL,要盡量放在靠近來源 IP (網段)的介面上。因為延伸 ACL
    清單內容的針對性較強,目的地位址較清楚,放在靠近來源的地方,可以阻止

    不必要的流量穿越網路。

    (2) 如果是標準 ACL ,因為清單項目中沒有包含目的地位址,目的地位址不明
    確,若放在靠近來源的地方,會有太多不必要的比對,因此應該放在靠近目的
    地的位置。

    以下圖為例,PC 會存取伺服器,所以來源是 PC ,目的地是伺服器,若使用
    的是標準 ACL ,套用時應該要將其盡量靠近伺服器(也就是 Router1 的乙太網
    路介面);若是使用延伸 ACL ,套用時應該盡量靠近 PC(也就是 Router0的乙太
    網路介面)。



    設定 ACL 要非常注意,因為如果 ACL 因為設定不正確而發生問題,輕者消耗
    CPU 及網路資源、網路品質下降、增加除錯的困難,嚴重的會使網路停止服務。

    因此在設定 ACL 之前,先把ACL 要達成的事情描述清楚,最好先在紙上將 ACL
    寫出來,與目標做了比對,以減少思考上的盲點。

    然後使用文字編輯器(例如 : 記事本)把 ACL 先編輯好,這個作法是為了如果發現
    有錯誤,只要修改文字檔,將命令重新貼回路由器,可以快速的修正錯誤,此文
    字檔也可將來再次利用。最好能夠先在一個實驗網路上測試,確定 ACL 設定沒
    問題後,再放在真實的網路上面。


    1-3 標準ACL 的設定

    標準 ACL 可以分為「數字型」與「命名型」兩種方式,下面分別說明 :

    1-3-1 數字型的 ACL

    語法 :

    Router(config)#access-list 存取清單號碼 {deny|permit} source[source-wildcard] [log]

    範例 :
    Router(config)#access-list 2 remark Standard ACL1
    Router(config)#access-list 2 deny 192.168.1.1 0.0.0.0
    Router(config)#access-list 2 permit 192.168.1.0 0.0.0.255
    Router(config)#access-list 2 permit 192.168.16.0 0.0.15.255
    Router(config)#access-list 2 deny 192.168.0.0 0.0.255.255
    Router(config)#access-list 2 permit 192.0.0.0 0.255.255.255
    Router(config)#access-list 2 deny any

    上面這個存取清單的編號是 2 ,第一行 remark 之後的文字都是註解,不
    會進行任何過濾動作,第二行會阻擋 192.168.1.1 這個 IP ,這命令等同下面
    的這個命令:


    Router(config)#access-list 2 deny 192.168.1.1

    第三行會允許 192.168.1.0 至 192.168.1.255 整個網段的 IP 封包通過,
    第四行會允許 192.168.16.0 到 192.168.31.255 的 IP 通過。
    第五行會禁止192.168.0.0 至 192.168.255.255 的 IP 通過。
    第六行會允許 192.0.0.0 至192.255.255.255 範圍內的 IP 通過。最後一行會將前面沒有檢查成功的剩下IP
    的封包全部丟棄,這行不寫亦可,因為不要忘記最後有一行隱含的 Deny

    如果想要顯示存取清單的內容,有兩種方法 :
    (1)顯示指定的存取清單,可以使用下面的命令 :

    Router#show access-lists 存取清單號碼

    (2)包含所有設定全部列出,可以使用下面的命令 :
    Router#show running-config

    如果知道要顯示的存取清單號碼,建議使用第一種方式,因為較節省時間,
    如果不清楚存取清單號碼,才會使用第二種方法。
    如果要將某個存取清單刪除,只需要輸入如下的命令 :

    Router(config)#no access-list 存取清單號碼


     

    回覆 使用道具 檢舉

  • 名望的英雄

    KUSO四格畫家

    某些 ACL 命令的設定不是只有一種方法,下面進行一些命令的對照與比較 :

    (1)下面這行命令的意義是讓所有(任何)的 IP 都通過 :

    Router(config)#access-list 1 permit 0.0.0.0 255.255.255.255

    上面這行的功能與下面這命令的意義是相同的 :

    Router(config)#access-list 1 permit any

    (2)下面這行的命令是允許 192.168.10.10 這個單一 IP 的封包通過 :

    Router(config)#access-list permit 192.168.10.10 0.0.0.0

    上面這行的功能與下面這命令的意義是相同的 :

    Router(config)#access-list permit host 192.168.10.10

    當 ACL 存取清單完成以後,接下來就是要套用到介面上,假設現在已經決
    定要在某個介面上套用,必須先進入該介面的設定模式,然後進行下面的語
    法設定 :

    Router(config-if)#ip access-group 存取清單號碼 {in | out}

    例如 :

    Router(config)#access-list 10 permit 192.168.1.0 0.0.0.255
    Router(config)#interface FastEthernet 0/0
    Router(config-if)#ip access-group 10 out

    在上面的例子中,存取清單 10 被套用在乙太網路介面 0/0 上,並且是在
    out 的方向。

    ACL 也可以被套用在 VTY (或 Console)上,也就是說遠端使用 Telnet 連
    入路由器的使用者,必須先經過存取清單的檢查才能登入,但是套用的語
    法不同,必須要注意。例如 :

    Router(config)#access-list 10 permit 192.168.1.0 0.0.0.255
    Router(config)#line vty 0 4
    Router(config-line)#access-class 10 in

    在上面的例子中,編號 10 的 ACL 套用在 VTY 上,語法是 access-class
    而不是 acceee-group ,套用之後,將只允許 IP 是 192.168.1.0 的遠端網段
    可以利用 Telnet 登入此路由器。注意! VTY 只能使用數字式 ACL 。

    如果要將套用取消,可以使用下面的語法 :

    Router(config-if)#no ip access-group 存取清單號碼

    對一個在設定檔中已經存在的 ACL 清單,可以用 show running-config 顯
    示其 ACL 內容,並以「複製」「貼上」的方式,將這個 ACL 備份到記事
    本中。

    如果要新建立的存取控制清單,因為路由器中沒有內建的編輯器,當要建立一個
    新的數字型 ACL 時,必須以一行接著一行的方式,由上到下進行編輯,且一行
    編輯完畢後一旦換行,就不能再回頭去修改。

    如果要修改,是沒辦法將單獨的一項清除的,必須要把整個ACL 清除後(使用
    no access-list 命令),再重新輸入一次,因此如果不小心打錯字,就必須重新
    輸入一次,非常浪費時間。

    因此強烈建議在編輯數字型 ACL 時,一定要使用記事本先進行編輯,再「複製」「貼上」
    路由器。例如 :

    Router(config)#access-list 10 permit 10.1.1.0 0.0.0.255
    Router(config)#access-list 10 permit 10.1.2.0 0.0.0.255

    假設現在發現第二行的 10.1.2.0 輸入錯誤,必須要改為 10.1.3.0 。完整的輸入
    重建命令應該是 :

    Router(config)# no access-list 10
    Router(config)#access-list 10 permit 10.1.1.0 0.0.0.255
    Router(config)#access-list 10 permit 10.1.3.0 0.0.0.255


     

    回覆 使用道具 檢舉

    你需要登入後才可以回覆 登入 | 註冊

    存檔|手機版|聯絡我們|新聞提供|鐵之狂傲

    GMT+8, 19-11-21 18:39 , Processed in 0.057933 second(s), 16 queries .

    回頂部