墮夜 發表於 10-8-29 21:29:40

存取控制清單 Access List

1-1 基本知識

1-1-1 TCP

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

http://slap999.myweb.hinet.net/CCNA/3_1_01.png

在上圖中,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) 提供基本的網路安全。

就像一個防火牆一樣。


墮夜 發表於 10-8-29 21:37:46

1-2-2 ACL 簡介

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

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

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

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

http://slap999.myweb.hinet.net/CCNA/3_1_02.png

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 的優點就是可以隨意增加及刪除清單中的列表項目。


墮夜 發表於 10-8-29 21:50:58

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的乙太
網路介面)。
http://slap999.myweb.hinet.net/CCNA/3_1_03.png

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

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

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


1-3 標準ACL 的設定

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

1-3-1 數字型的 ACL

語法 :

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

範例 :
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 存取清單號碼


墮夜 發表於 10-8-29 21:55:04

某些 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

頁: [1]
檢視完整版本: 存取控制清單 Access List