IOS - ACL (訪問控制列表)

以終為始發表於2020-08-08

ACL 介紹

ACL 是一款 IOS 軟體工具,而不是某種協議。從名字上來看,ACL 的主要功能是控制對網路資源的訪問。事實上這是 ACL 最早的用途。現在 ACL 除了能夠限制訪問外,更多時候,我們用它來標識流量(識別某種流量的特徵)。

ACL 特點:

  • 有序的宣告,是一張由 permit 或 deny 的宣告組成的列表
  • ACL 僅是一種工具,如果不進行呼叫的話,不會產生任何效果
  • 使用萬用字元掩碼來匹配一定範圍內的 IP 主機
  • ACL 在介面上呼叫時,必須指定方向,ACL 只對流量入介面的入方向或出介面的出方向產生效果
  • 每個 ACL 的底部,總會包含一個隱式的拒絕語句。它會匹配所有流量。
  • 所有的 ACL 都應該至少包含一個 permit,否則該 ACL 沒有意義

ACL 應用場景:

包括常見的訪問控制,NAT,遠端連線限制,VPN 匹配感興趣流量,配合分法列表過濾路由等。

ACL 分類

ACL大體可以分為標準 ACL 和擴充套件 ACL 兩大類。用於匹配流量的標準主要是 IP 資料包的 3 層和 4 層報文的內容。

下面是 ACL 標準和擴充協議的對比:

可以看到:

  • 標準 ACL 功能較為簡單,三層 ACL,基於 IP 頭進行匹配,只能匹配源 IP 地址。
  • 擴充 ACL 則可以匹配源,目的,埠等等資訊。

ACL 寫法

首先來看一下 ACL 匹配過程:

可以看到:

  1. ACL 自上而下進行匹配
  2. 匹配成功就執行 Action:Permit 或者 Action

所以在編寫 ACL 時,越精確的範圍越應該優先處理,寫在前面。

在寫 ACL 時,標準 ACL 和 擴充都有兩種命名方式:

  • 標號的 ACL,不容易修改。
    • 比如編寫了 access-list 10 permit 10.1.1.0 255.255.255.0 access-list 10 permit 10.1.2.0 255.255.255.0
    • 這時發現第二條 ACL 寫錯了,就必須把所有的 no access-list 10 刪掉,重新寫。
  • 命名的 ACL:在每個 ACL 中會有序列號,修改時可以修改序列號。

標準 ACL

省略寫法,匹配唯一主機地址:

permit host 1.1.1.0 
permit 1.1.1.0 0.0.0.0

省略寫法,匹配所有:

permit any any 
permit 0.0.0.0 255.255.255.255 

在寫時,儘量靠近目的端,因為只能匹配源,匹配範圍較廣

擴充 ACL

在寫時,儘量靠近源端,因為擴充 ACL 更精確

在每個介面,每個方向上,針對每個協議只能呼叫一個 ACL,並且 ACL 不能過濾自己產生的資料.

案例

案例一:標準 ACL 和 擴充 ACl 對比

這裡都是想要禁止掉 PC2 的流量,分別採用標準 ACL 和擴充 ACL:

對於標準 ACL 來說,可以看到配置在路由器上的 Gi0/1 的出介面上,因為使用標準 ACL 推薦儘量離源遠的位置。

對於擴充 ACl 來說,配置在 Gi0/0 的入介面上,因為使用擴充 ACL 推薦儘量離源近的位置。

案例二:標準 ACL 配置

# 標準 ACL
Router(config)#access-list 100 permit ip 10.1.4.0 0.0.0.255  10.1.8.0 0.0.0.255
Router(config)#access-list 100 permit ip 10.1.5.0 0.0.0.255 10.1.7.0 0.0.0.255
Router(config)#access-list 100 permit eigrp any any
Router(config)#do show access-lists

# 呼叫 ACL
Router(config)#int e 0/1
Router(config-if)#ip access-group 100 out

VPC2 能 ping 通 VPC5 ,VPC5 不能 ping 通 VPC2

Router(config)#access-list 100 deny ip 10.1.5.0 0.0.0.255  10.1.8.0 0.0.0.255 echo-reply
Router(config)#access-list 100 permit ip any any
Router(config)#do show access-lists

Router(config)#int e 0/1
Router(config-if)#ip access-group 100 out

總結

在這篇文章中,介紹了 ACL 常見的應用場景,以及 ACL 的匹配過程。

並且知道了 ACL 分為標準和擴充兩種,標準只是對 3 層源 IP 進行過濾,而擴充則加上了目的 IP,埠等多個屬性。

對於標準 ACL 來說,因為其匹配範圍較廣,儘量在靠近目的編寫 ACl。

對於擴充 ACL 來說,因為匹配更加精確,儘量靠近源來編寫,可以更好的節省頻寬。

在編寫 ACL 時,要將精確匹配的 ACL 寫在前面,並且儘量使用命名 ACL 代替標號 ACL。並且 ACL 對於自己產生的資料包,是無法進行過濾的。

相關文章