網絡基礎知識筆記07 ACL訪問控制列表
企業網絡中的設備進行通信時,需要保障數據傳輸的安全可靠和網絡的性能穩定。
訪問控制列表ACL(Access Control List)可以定義一系列不同的規則,設備根據這些規則對數據包進行分類,並針對不同類型的報文進行不同的處理,從而可以實現對網絡訪問行為的控制、限制網絡流量、提高網絡性能、防止網絡攻擊等等。
ACL應用場景
ACL可以通過定義規則來允許或拒絕流量的通過。
ACL的應用場景非常廣泛。經常與網絡地址轉換技術(NAT),路由策略(route-policy),策略路由(policy-based-route),VPN(Virtual Private Network)和服務質量(QoS)等網絡核心技術配合使用,是網絡專業必須掌握的知識。
ACL是由一系列規則組成的集合。設備可以通過這些規則對數據包進行分類,並對不同類型的報文進行不同的處理。
如上圖示例中,現在某企業有對網絡中不同的網段有不同的訪問限制。網關RTA允許192.168.1.0/24中的主機可以訪問外網,也就是Internet;而192.168.2.0/24中的主機則被禁止訪問Internet。對於服務器A而言,情況則相反。網關允許192.168.2.0/24中的主機訪問服務器A,但卻禁止192.168.1.0/24中的主機訪問服務器A。通過ACL技術,可以將這個需求完美實現。
ACL工作原理
ACL可以根據需求來定義過濾的條件以及匹配條件后所執行的動作。
設備可以依據ACL中定義的條件(例如源IP地址等)來匹配入(出)方向的數據,並對匹配了條件的數據執行相應的動作。
在本示例所述場景中。RTA依據所定義的ACL而匹配到的感興趣流量來自192.168.2.0/24網絡, RTA會對這些感興趣流量進行加密(在之后的虛擬局域網VPN筆記中會進行介紹)之后再轉發。
ACL分類
根據不同的划分規則,ACL可以有不同的分類。最常見的三種分類是基本ACL、高級ACL和二層ACL。
分類 |
編號范圍 |
參數(匹配規則) |
基本ACL |
2000-2999 |
源IP地址等 |
高級ACL |
3000-3999 |
源IP地址、目的IP地址、 源端口、目的端口等 |
二層ACL |
4000-4999 |
源MAC地址、目的MAC地址、以太幀協議類型等 |
用戶自定義ACL |
5000-5999 |
可根據偏移位置和偏移量從報文中提取出一段內容進行匹配。 |
用戶ACL |
6000-6999 |
既可使用IPv4報文的源IP地址或源UCL(User Control List)組,也可使用目的地址或目的UCL組、IP協議類型、ICMP類型、TCP源端口/目的端口、UDP源端口/目的端口號等來定義規則。 |
①基本ACL可以使用報文的源IP地址,分片標記和時間段信息來匹配報文,其編號取值范圍是2000-2999。
②高級ACL可以使用報文的源/目的IP地址,源/目的端口號以及協議類型等信息來匹配報文。高級ACL可以定義比基本ACL更准確、更豐富、更靈活的規則,其編號取值范圍是3000-3999。
③二層ACL可以使用源/目的MAC地址以及二層協議類型等二層信息來匹配報文,其編號取值范圍是4000-4999。
④用戶自定義ACL和用戶ACL在這里不做討論。
ACL匹配規則
每個ACL可以包含多個規則(rule),路由器RTA根據規則來對數據流量進行過濾。如下圖所示:
一個ACL可以由多條“deny | permit”語句組成,每一條語句描述了一條規則。設備收到數據流量后,會從上到下逐條匹配ACL規則(rule),看其是否匹配,如果不匹配,則繼續匹配下一條規則(rule):
①如果找到一條匹配的規則,則執行規則中定義的動作,並不再繼續與后續規則進行匹配。
②如果找不到匹配的規則,則設備不對報文進行任何處理。
Tips:需要注意的是,ACL中定義的這些規則可能存在重復或矛盾的地方。規則的匹配順序(從上到下)決定了規則的優先級,ACL通過設置規則的優先級來處理規則之間重復或矛盾的情形。
路由器支持兩種匹配順序:配置順序(config)和自動排序(auto)。
(1)配置順序
配置順序按ACL規則編號(rule-id)從小到大的順序進行匹配。設備會在創建ACL的過程中自動為每一條規則分配一個編號,規則編號決定了規則被匹配的順序。
如上圖示例中,RTA收到了來自兩個網絡的報文。默認情況下,RTA會依據ACL的配置順序來匹配這些報文。網絡172.16.0.0/24發送的數據流量將被RTA上配置的ACL 2000的規則15匹配,因此會被拒絕。而來自網絡172.17.0.0/24的報文不能匹配訪問控制列表中的任何規則,因此RTA對報文不做任何處理,而是正常轉發。
(2)自動排序
自動排序使用“深度優先”的原則進行匹配,即根據規則的精確度排序(從高到低)。規則中定義的匹配項限制越嚴格,規則的精確度就越高,即優先級越高,系統越先匹配。各類ACL的“深度優先”順序匹配原則如下表所示(用戶自定義ACL和用戶ACL不做討論):
ACL類型 |
自動排序匹配原則 |
基本ACL&ACL6 |
①先看規則中是否帶VPN實例,帶VPN實例的規則優先。 ②再比較源IP地址范圍,源IP地址范圍小(IP地址通配符掩碼中“0”位的數量多)的規則優先。 ③如果源IP地址范圍相同,則規則編號小的優先。 |
高級ACL&ACL6 |
①先看規則中是否帶VPN實例,帶VPN實例的規則優先。 ②再比較協議范圍,指定了IP協議承載的協議類型的規則優先。 ③如果協議范圍相同,則比較源IP地址范圍,源IP地址范圍小(IP地址通配符掩碼中“0”位的數量多)的規則優先。 ④如果協議范圍、源IP地址范圍相同,則比較目的IP地址范圍,目的IP地址范圍小(IP地址通配符掩碼中“0”位的數量多)的規則優先。 ⑤如果協議范圍、源IP地址范圍、目的IP地址范圍相同,則比較四層端口號(TCP/UDP端口號)范圍,四層端口號范圍小的規則優先。 ⑥如果上述范圍都相同,則規則編號小的優先。 |
二層ACL |
①先比較二層協議類型通配符掩碼,通配符掩碼大(協議類型通配符掩碼中“1”位的數量多)的規則優先。 ②如果二層協議類型通配符掩碼相同,則比較源MAC地址范圍,源MAC地址范圍小(MAC地址通配符掩碼中“1”位的數量多)的規則優先。 ③如果源MAC地址范圍相同,則比較目的MAC地址范圍,目的MAC地址范圍小(MAC地址通配符掩碼中“1”位的數量多)的規則優先。 ④如果源MAC地址范圍、目的MAC地址范圍相同,則規則編號小的優先。 |
“深度優先”規則,就是把指定數據包范圍最小的語句排在最前面。這一點主要可以通過比較IP地址的通配符來實現。通配符越小,則指定主機的范圍就越小。
Tips:匹配順序可以采用命令match-order { auto | config }來修改。
(3)ACL的步長
如果將步長設定為5,則規則編號將按照5、10、15…這樣的規律自動分配。同理如果步長設定為2,則規則編號將按照2、4、6、8…這樣的規律自動分配。
通過設置步長,使規則之間留有一定的空間,用戶可以在已存在的兩個規則之間插入新的規則。路由器匹配規則時默認采用配置順序。
Tips:華為系列路由器默認規則編號的步長是5。
基本ACL(2000-2999)的配置方法
如下圖所示,拓撲中有三台主機和兩台路由器。主機A和主機B分別代表172.16.1.0/24和172.16.2.0/24兩個網段,還有一台外網的主機代表10.1.1.0/24網段。
現有需求:172.16.1.0/24網段可以訪問外網主機,但172.16.2.0/24網段不能。可以通過配置基本ACL來達到需求。
Step 1:基礎配置。配置路由器的端口IP和靜態路由,主機的配置省略。
路由器R1的基礎配置:
路由器R2的基礎配置:
Step 2:在R1路由器上配置基本ACL
命令:acl [ number ]
創建一個ACL,並進入ACL視圖。基本ACL的編號為2000-2999。
命令:rule [ rule-id ] { deny | permit } source { source-address source-wildcard | any }
增加或修改ACL的規則。
①deny用來指定拒絕符合條件的數據包,permit用來指定允許符合條件的數據包。
②source用來指定ACL規則匹配報文的源地址信息,any表示任意源地址。
③wildcard指反掩碼。關於反掩碼筆記下面會有介紹。
命令:traffic-filter { inbound | outbound }acl{ acl-number }
在接口上配置基於ACL對報文進行過濾。
inbound應用在端口的入方向匹配的流量上
outbound應用在端口的出方向匹配的流量上
若該ACL應用在路由器R1的端口GE0/0/0上,也就是R1連接R2的端口。現在的需求是禁止172.16.2.0網段訪問10.1.1.0網段,數據流方向是從R1到R2。所以要匹配的數據流是出方向的。
Step 3:配置驗證
本示例中,主機B發送的流量到達RTA后,會匹配ACL 2000中創建的規則rule deny source 172.16.2.0 0.0.0.255,因而將被拒絕繼續轉發到Internet。
主機A發送的流量不匹配任何規則,所以會被RTA正常轉發到Internet。
命令:display acl <acl-number>
可以驗證配置的基本ACL。
配置的ACL只有一條規則,即拒絕源IP地址在172.16.2.0/24范圍的所有IP報文。由於在172.16.2.0網段的主機B上使用ping命令驗證了兩次,每次ping會發送5個數據包,所以上圖中顯示該條ACL一共成功匹配了10次數據包(10 matches)。
命令:display traffic-filter applied-record
可以查看設備上所有基於ACL進行報文過濾的應用信息。這些信息可以幫助用戶了解報文過濾的配置情況並核對其是否正確,同時也有助於進行相關的故障診斷與排查。
Tips:補充知識
反掩碼(通配符掩碼)告訴路由器為了判斷出匹配,它需要檢查IP地址中的多少位。
反掩碼中,0表示要檢查的位,1表示不需要檢查的位。而在IP子網掩碼中,數字1、0用來決定網絡、子網,還是相應的主機的IP地址。
反掩碼中,可以用255.255.255.255表示所有IP地址,因為全為1說明32位中所有位都不需檢查,此時可用any替代。而0.0.0.0的通配符則表示所有32位都必須要進行匹配,它只表示一個IP地址,可以用host表示。
簡單計算反掩碼的方法:使用代表全1的網絡IP按每位減去子網掩碼代表的二進制數字,即可得到反掩碼。如下圖所示:例如172.16.2.0/24的子網掩碼為24位,計算得出反掩碼為0.0.0.255。
高級ACL(3000-3999)的配置方法
基本ACL可以依據源IP地址進行報文過濾,而高級ACL能夠依據源/目的IP地址、源/目的端口號、網絡層及傳輸層協議以及IP流量分類和TCP標記值等各種參數(SYN|ACK|FIN等)進行報文過濾。
拓撲如下圖所示。在基本ACL拓撲圖的基礎上,在代表外網的10.1.1.0/24網段作出了一些更改,該網段現在有兩台服務器,一台服務器提供FTP服務(10.1.1.1),一台服務器提供私有服務(10.1.1.2),其他設備配置不變。
關於各設備的基礎配置(端口配置,互聯調通,服務器配置)此處已省略。現在有一個需求,PCA不能通過FTP協議訪問FTP服務器,PCB不能訪問私有服務器。因為涉及端口號,網絡協議等,所以高級ACL可以滿足需求。
Step 1:首先對基礎配置進行驗證
PCA可以正常訪問FTP服務器(10.1.1.1)
正常登陸,可以讀取到服務器的文件列表。
PCB可以正常訪問私有服務器(10.1.1.2)
正常訪問,成功發送4個ping包。
Step 2:在路由器R1上配置高級ACL
第一條規則匹配並拒絕源地址為172.16.1.1訪問10.1.1.1的tcp 21端口。即FTP協議的端口
第二條規則匹配並拒絕源地址為172.16.2.1訪問10.1.1.2
第三條規則用於匹配所有IP報文,並對報文執行允許動作。
在R1的出方向端口GE0/0/0上應用高級ACL
Step 3:配置驗證
PCA不能訪問FTP服務器。
PCB不能訪問私有服務器。
小結
高級ACL可以基於哪些條件來定義規則?
高級ACL可以基於源/目的IP地址,源/目的端口號,協議類型以及IP流量分類和TCP標記值(SYN|ACK|FIN等)等參數來定義規則。
參考鏈接:
https://support.huawei.com/enterprise/zh/knowledge/EKB1000070062