Contents

Cisco - Access Control List

Cisco 網路設備上實現簡易的防火牆功能,透過 ACL 存取控制清單 (Access Control List) 機制對封包進行篩選與過濾。

1. ACL 存取控制清單簡述

在網路架構中所有的封包流向都是沒有進或是出的概念,以路由器為例,封包只管目的地地址要轉發至哪一個網路介面,而並不在乎來源地址,不過透過 ACL (Access Control List) 存取控制清單可以針對來源位置進行篩選分類並加以進行操作。

Cisco 官方解釋

Cisco provides basic traffic filtering capabilities with access control lists (also referred to as access lists). Access lists can be configured for all routed network protocols (IP, AppleTalk, and so on) to filter the packets of those protocols as the packets pass through a router.

From Cisco DOC


2. ACL 運作機制

ACL 是一個程式,其中內容記錄多條的條件式,當條件吻合則進行判斷動作,如果沒有吻合則往下一個條件進行比對。

https://i.imgur.com/nvjL88E.png

當封包進入路由器時, ACL 檢測機制如下 :

  1. 由上而下逐一條件進行比對,直到最後一筆到程式結束。
  2. 條件如果吻合,並且該判斷動作為 允許(permit) 則允許封包通過,並跳出比對條件程式。
  3. 條件如果吻合,並且該判斷動作為 拒絕(deny) 則拒絕封包通過,並跳出比對條件程式。
  4. 如果上述所有條件都沒有吻合,程式最後一筆隱藏的條件會拒絕所有( deny any )的封包通過。

3. ACL 形式

最早 ACL 成立時只能針對來源地址來進行條件判斷並做允許或是拒絕封包動作,此模式又稱為 標準型 ( standard access list ),不過此機制對於複雜的網路架構篩選條件是遠遠不足的,後續開發能篩選 目的地址、協定及阜號的 ACL 又稱為延伸型 (extended access list)。每一組 ACL 都是一支程式有識別的 ID ,標準型與延伸型 ID 範圍各為不同。

標準型 延伸型
ID 範圍(第一版) 0-99 100-199
ID 範圍(第二版) 1300-1999 2000-2699
Access-list ID 演進
最早設計 Access-list ID 無論是標準型或是延伸型只有開放 100組,囿於 ACL 功能非常強大,僅 100 組對於中大型企業來說實在不敷使用,故又開放一組新的範圍(並非每一個網路設備都支援)供管理者使用。

3.1.1 標準型 ACL 語法

1
access-list <sequence-number> { permit | deny } 來源地址或來源網段

sequence-number -> 0-99, 1300-1999

允許所有來源 192.168.50.0/24 網段封包放行。

1
2
conf t
access-list 1 permit 192.168.50.0 0.0.0.255
Wildcard Mask
ACL 判斷網段或是主機是透過 萬用遮罩方式來計算,簡單計算方式就是將原本子網路遮罩二進位作反向( 0->1, 1->0 )得出的答案及為 Wildcard Mask。

3.1.2 延伸型 ACL 語法

1
access-list <sequence-number> { permit | deny }  { tcp | upd | icmp }  來源地址或來源網段 目的地址或目的網段  [{ eq port | range min-port max-port }]

sequence-number -> 100-199, 2000-2699

允許所有來源 192.168.50.0/24 網段封包可以存取 10.10.10.10 指定主機的 tcp/80 服務。

1
2
conf t
access-list 101 permit tcp 192.168.50.0 0.0.0.255 10.10.10.10 0.0.0.0 ep 80

3.1.3 命名型 ACL 語法

除上述使用 ID 來區分標準或是延伸型的 ACL 之外,在新版本引入透過賦予名子方式來定義 ACL,定義完後會自動進入 ACL 的子命令模式設定條件。

1
ip access-list { standard | extended }  <ACL_Name>

標準型命名方式 - 允許所有來源 192.168.50.0/24 網段封包放行。

1
2
3
R1#conf t
R1(config)#ip access-list standard example_acl1
R1(config-std-nacl)# permit 192.168.50.0 0.0.0.255

延伸型命名方式 - 允許所有來源 192.168.50.0/24 網段封包可以存取 10.10.10.10 指定主機的 tcp/80 服務。

1
2
3
R1#conf t
R1(config)#ip access-list extended example_acl2
R1(config-ext-nacl)# access-list 101 permit tcp 192.168.50.0 0.0.0.255 10.10.10.10 0.0.0.0 ep 80

4 啟用 ACL

上述步驟僅為設定 ACL 的條件,如果要將設定好的 ACL 啟用,就必須把 ACL 綁定在指定的網路介面並設定為檢測進 (Inbound) 或是出 (Outbound) 網路設備時進行 ACL 條件判斷。

4.1.1 標準型 ACL 啟用

拒絕所有來源 192.168.20.0/24 網段封包進入 GigabitEthernet0/0/0 介面。

1
2
3
4
5
conf t
access-list 1 deny 192.168.50.0 0.0.0.255
access-list 1 permit any
int g0/0/0
    ip access-group 1 in
最少需要一個 permit
上述提到每一個 ACL 程式都有一個隱藏的 deny any 的條件,如果設定的條件列表中沒有任何一行是 permit 就毫無意義,預設最基本就是 deny any 拒絕所有封包規則。

4.1.1 延伸型 ACL 啟用

允許所有來源 192.168.50.0/24 網段封包( 從 GigabitEthernet0/0/1 介面離開 )可以存取 10.10.10.10 指定主機的 tcp/80 服務。

1
2
3
4
conf t
access-list 101 permit tcp 192.168.50.0 0.0.0.255 10.10.10.10 0.0.0.0 ep 80
int g0/0/1
    ip access-group 101 out
命名型 ACL 啟用
如果是命名型 ACL 僅需將 ID 更改成 ACL 名稱即可。

5. Packet Tracer 實作 – 5.4.13 Configure Extended IPv4 ACLs

https://i.imgur.com/yzYapyw.png

https://i.imgur.com/EfYJQ1J.png

  • Download 此 LAB PKA 檔案請點我,資源來至 itexamanswers.net 網站。

5.1. 目標:

  1. 以名稱方式創建延伸型的 ACL。
    • 禁止 PC1 存取 Server 1 及 Server 2 的 Http 及 Https 服務。
    • 禁止 PC2 存取 Server 1 及 Server 2 的 FTP 服務 。
    • 禁止 PC3 發送 ICMP 封包至 Server1 及 Server2
  2. 啟用 ACL 。

5.2. 步驟 :

  1. 創建 ACL 名稱及制訂規則
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
conf t
ip access-list extended ACL-LAB
 deny tcp host 172.31.1.101 host 64.101.255.254 eq 80
 deny tcp host 172.31.1.101 host 64.101.255.254 eq 443
 deny tcp host 172.31.1.101 host 64.103.255.254 eq 80
 deny tcp host 172.31.1.101 host 64.103.255.254 eq 443
 deny tcp host 172.31.1.102 host 64.101.255.254 eq ftp
 deny tcp host 172.31.1.102 host 64.103.255.254 eq ftp
 deny icmp host 172.31.1.103 host 64.101.255.254
 deny icmp host 172.31.1.103 host 64.103.255.254
 permit ip any any
  1. 啟用 ACL
1
2
int g0/0
 ip access-group ACL-LAB in
檢查攔截封包次數

透過 show ip access-lists 指令可以看出有多少封包被攔截。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
show ip access-lists
Extended IP access list ACL-LAB
10 deny tcp host 172.31.1.101 host 64.101.255.254 eq www (12 match(es))
20 deny tcp host 172.31.1.101 host 64.101.255.254 eq 443 (12 match(es))
30 deny tcp host 172.31.1.101 host 64.103.255.254 eq www
40 deny tcp host 172.31.1.101 host 64.103.255.254 eq 443
50 deny tcp host 172.31.1.102 host 64.101.255.254 eq ftp
60 deny tcp host 172.31.1.102 host 64.103.255.254 eq ftp
70 deny icmp host 172.31.1.103 host 64.101.255.254
80 deny icmp host 172.31.1.103 host 64.103.255.254
90 permit ip any any

6. 小結

ACL 在 Cisco 網路設備中是非常重要的功能,許多功能都能與 ACL 進行組合搭配,例如 NAT 、 VPN 、 VTY 存取等。 另外曾經學習過 Linux 的 iptables 指令會發現其使用方式十分相似,等於會了 iptables 規則設定 ACL 規則就很容易,反之亦然。

允許所有來源 192.168.50.0/24 網段封包可以存取指定主機 10.10.10.10 的 tcp/80 服務。

1
2
3
4
# ACL 
access-list 101 permit tcp 192.168.50.0 0.0.0.255 10.10.10.10 0.0.0.0 ep 80
# Iptables
iptables -A OUTPUT -s 192.168.50.0/24 -d 10.10.10.10 -p tcp --dport 80 -j ACCEPT 


如果你還沒有註冊 Like Coin,你可以在文章最下方看到 Like 的按鈕,點下去後即可申請帳號,透過申請帳號後可以幫我的文章按下 Like,而 Like 最多可以點五次,而你不用付出任何一塊錢,就能給我寫這篇文章的最大的回饋!