ACL的基本原理
ACL由一系列規則組成,通過將報文與ACL規則進行匹配,設備可以過濾出特定的報文。設備支持的ACL,有軟件和硬件兩種實現方式,兩者在過濾的報文類型、報文過濾方式和對不匹配ACL的報文的處理動作這三個方面有所差異。
ACL的組成
一條ACL的結構組成,如圖1所示。
圖1 ACL的結構組成
- ACL編號:用于標識ACL,表明該ACL是數字型ACL。
- 根據ACL規則功能的不同,ACL被劃分為基本ACL、高級ACL、二層ACL、用戶自定義ACL和用戶ACL這幾種類型,每類ACL編號的取值范圍不同。關于每類ACL編號的詳細介紹,請參見ACL的分類。
- 除了可以通過ACL編號標識ACL,設備還支持通過名稱來標識ACL,就像用域名代替IP地址一樣,更加方便記憶。這種ACL,稱為命名型ACL。
- 命名型ACL實際上是“名字+數字”的形式,可以在定義命名型ACL時同時指定ACL編號。如果不指定編號,則由系統自動分配。例如,下面就是一個既有名字“deny-telnet-login”又有編號“3998”的ACL。
# acl name deny-telnet-login 3998 rule 0 deny tcp source 10.152.0.0 0.0.63.255 destination 10.64.0.97 0 destination-port eq telnet rule 5 deny tcp source 10.242.128.0 0.0.127.255 destination 10.64.0.97 0 destination-port eq telnet #
- 規則:即描述報文匹配條件的判斷語句。
- 規則編號:用于標識ACL規則。可以自行配置規則編號,也可以由系統自動分配。
- ACL規則的編號范圍是0~4294967294,所有規則均按照規則編號從小到大進行排序。所以,圖1中的rule 5排在首位,而規則編號最大的rule 4294967294排在末位。系統按照規則編號從小到大的順序,將規則依次與報文匹配,一旦匹配上一條規則即停止匹配。
- 動作:包括permit/deny兩種動作,表示允許/拒絕。
- 匹配項:ACL定義了極其豐富的匹配項。除了圖1中的源地址和生效時間段,ACL還支持很多其他規則匹配項。例如,二層以太網幀頭信息(如源mac、目的MAC、以太幀協議類型),三層報文信息(如目的地址、協議類型),以及四層報文信息(如TCP/UDP端口號)等。關于每種匹配項的詳細介紹,請參見ACL的常用匹配項。
ACL的匹配機制
設備將報文與ACL規則進行匹配時,遵循“一旦命中即停止匹配”的機制,如圖2所示。
圖2 ACL的匹配機制
首先系統會查找設備上是否配置了ACL。
- 如果ACL不存在,則返回ACL匹配結果為:不匹配。
- 如果ACL存在,則查找設備是否配置了ACL規則。
- 如果規則不存在,則返回ACL匹配結果為:不匹配。
- 如果規則存在,則系統會從ACL中編號最小的規則開始查找。
- 如果匹配上了permit規則,則停止查找規則,并返回ACL匹配結果為:匹配(允許)。
- 如果匹配上了deny規則,則停止查找規則,并返回ACL匹配結果為:匹配(拒絕)。
- 如果未匹配上規則,則繼續查找下一條規則,以此循環。如果一直查到最后一條規則,報文仍未匹配上,則返回ACL匹配結果為:不匹配。
從整個ACL匹配流程可以看出,報文與ACL規則匹配后,會產生兩種匹配結果:“匹配”和“不匹配”。
- 匹配(命中規則):指存在ACL,且在ACL中查找到了符合匹配條件的規則。
- 不論匹配的動作是“permit”還是“deny”,都稱為“匹配”,而不是只是匹配上permit規則才算“匹配”。
- 不匹配(未命中規則):指不存在ACL,或ACL中無規則,再或者在ACL中遍歷了所有規則都沒有找到符合匹配條件的規則。
- 以上三種情況,都叫做“不匹配”。
無論報文匹配ACL的結果是“不匹配”、“允許”還是“拒絕”,該報文最終是被允許通過還是拒絕通過,實際是由應用ACL的各個業務模塊來決定。不同的業務模塊,對命中和未命中規則報文的處理方式也各不相同。例如,在Telnet模塊中應用ACL,只要報文命中了permit規則,就允許通過;而在流策略中應用ACL,如果報文命中了permit規則,但流行為動作配置的是deny,該報文仍會被拒絕通過。關于各個業務模塊ACL處理機制的詳細介紹,請參見ACL應用模塊的ACL默認動作和處理機制。
ACL的實現方式
目前設備支持的ACL,有以下兩種實現方式。
- 軟件ACL:針對與本機交互的報文(必須上送CPU處理的報文),由軟件實現來過濾報文的ACL,比如FTP、TFTP、Telnet、SNMP、HTTP、路由協議、組播協議中引用的ACL。
- 硬件ACL:針對所有報文(一般是針對轉發的數據報文),通過下發ACL資源到硬件來過濾報文的ACL,比如流策略、基于ACL的簡化流策略、用戶組以及為接口收到的報文添加外層Tag功能中引用的ACL。
兩者主要區別在于:
- 過濾的報文類型不同:軟件ACL用來過濾與本機交互的報文(必須上送CPU處理的報文),硬件ACL可以用來過濾所有報文(一般是針對轉發的數據報文)。
- 報文過濾方式不同:軟件ACL是被上層軟件引用來實現報文的過濾,硬件ACL是被下發到硬件來實現報文的過濾。通過軟件ACL過濾報文時,會消耗CPU資源,通過硬件ACL過濾報文時,則會占用硬件資源。通過硬件ACL過濾報文的速度更快。
- 對不匹配ACL的報文的處理動作不同:當使用軟件ACL時,如果報文未匹配上ACL中的規則,設備對該報文采取的動作為deny,即拒絕報文通過;當使用硬件ACL時,如果報文未匹配上ACL中的規則,設備對該報文采取的動作為permit,即允許報文通過。






