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