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 匹配過程:
可以看到:
- ACL 自上而下進行匹配
- 匹配成功就執行 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 對於自己產生的數據包,是無法進行過濾的。