【交換機在江湖之初窺門徑】訪問控制列表-細說ACL那些事兒(ACL匹配篇)


【交換機在江湖之初窺門徑】訪問控制列表-細說ACL那些事兒(ACL匹配篇)

digest
交換機在江湖  官方號 2014-7-22 19:08:31 最新回復:2019-08-15 11:45:47
 5.7W  51  20  22

Hi,小伙伴們,小編又來報道啦!在上一期中,小編圍繞一張ACL結構圖展開介紹,讓大家了解了ACL的概念、作用和分類,並且知道了ACL是通過規則匹配來實現報文過濾的。但ACL到底是如何進行規則匹配的,相信大家還是一頭霧水。本期,小編就將帶領大家深入ACL內部,說一說關於“ACL匹配”的那些事兒。

1 、ACL匹配機制

首先,小編為大家介紹ACL匹配機制。上一期提到,ACL在匹配報文時遵循“一旦命中即停止匹配”的原則。其實,這句話就是對ACL匹配機制的一個高度的概括。當然,ACL匹配過程中,還存在很多細節。比如,ACL不存在系統會怎么處理?ACL存在但規則不存在系統會怎么處理?為了對整個ACL匹配過程展開詳細的介紹,小編畫了一張ACL匹配流程圖,相信對大家理解ACL匹配機制能有所幫助。

 

從整個ACL匹配流程可以看出,報文與ACL規則匹配后,會產生兩種匹配結果:匹配”和“不匹配”

l  匹配(命中規則):指存在ACL,且在ACL中查找到了符合匹配條件的規則。不論匹配的動作是“permit”還是“deny”,都稱為“匹配”,而不是只是匹配上permit規則才算“匹配”。

l  不匹配(未命中規則):指不存在ACL,或ACL中無規則,再或者在ACL中遍歷了所有規則都沒有找到符合匹配條件的規則。切記以上三種情況,都叫做“不匹配”。

小編提醒大家,無論報文匹配ACL的結果是“不匹配”、“允許”還是“拒絕”,該報文最終是被允許通過還是拒絕通過,實際是由應用ACL的各個業務模塊來決定的。不同的業務模塊,對命中和未命中規則報文的處理方式也各不相同。例如,在Telnet模塊中應用ACL,只要報文命中了permit規則,就允許通過;而在流策略中應用ACL,如果報文命中了permit規則,但流行為動作配置的是deny,該報文會被拒絕通過。在后續連載的《訪問控制列表-細說ACL那些事兒(應用篇)》中,小編將結合各類ACL應用,為大家細說各個業務模塊的區別。

2 、ACL規則匹配順序

從上面的ACL匹配報文流程圖中,可以看到,只要報文未命中規則且仍剩余規則,系統會一直從剩余規則中選擇下一條與報文進行匹配。

系統是根據什么樣的順序來選擇規則進行報文匹配的呢?

回答這個問題之前,先來看個例子。假設我們先后執行了以下兩條命令進行配置:

rule deny ip destination 1.1.0.0 0.0.255.255   //表示拒絕目的IP地址為1.1.0.0網段的報文通過

rule permit ip destination 1.1.1.0 0.0.0.255   //表示允許目的IP地址為1.1.1.0網段的報文通過,該網段地址范圍小於1.1.0.0網段范圍

這條permit規則與deny規則是相互矛盾的。對於目的IP=1.1.1.1的報文,如果系統先將deny規則與其匹配,則該報文會被禁止通過。相反,如果系統先將permit規則與其匹配,則該報文會得到允許通過。

因此,對於規則之間存在重復或矛盾的情形,報文的匹配結果與ACL規則匹配順序是息息相關的。下面,小編就為大家介紹ACL定義的兩種規則匹配順序:配置順序(config)和自動排序(auto)。

配置順序,即系統按照ACL規則編號從小到大的順序進行報文匹配,規則編號越小越容易被匹配。后插入的規則,如果你指定的規則編號更小,那么這條規則可能會被先匹配上。

小編提醒,ACL規則的生效前提,是要在業務模塊中應用ACL。當ACL被業務模塊引用時,你可以隨時修改ACL規則,但規則修改后是否立即生效與具體的業務模塊相關。關於ACL的應用,在后續連載的應用篇中,小編還將為大家詳細介紹。

自動排序,是指系統使用“深度優先”的原則,將規則按照精確度從高到底進行排序,系統按照精確度從高到低的順序進行報文匹配。規則中定義的匹配項限制越嚴格,規則的精確度就越高,即優先級越高,那么該規則的編號就越小,系統越先匹配。例如,有一條規則的目的IP地址匹配項是一台主機地址2.2.2.2/32,而另一條規則的目的IP地址匹配項是一個網段2.2.2.0/24,前一條規則指定的地址范圍更小,所以其精確度更高,系統會優先將報文與前一條規則進行匹配。

小編提醒,在自動排序的ACL中配置規則,不允許自行指定規則編號。系統能自動識別出該規則在這條ACL中對應的優先級,並為其分配一個適當的規則編號。

例如,在auto模式的acl 3001中,存在以下兩條規則。

如果在acl 3001中插入rule deny ip destination 1.1.1.1 0(目的IP地址是主機地址,優先級高於上圖中的兩條規則),系統將按照規則的優先級關系,重新為各規則分配編號。插入新規則后,新的排序如下。

 

可以看到,rule deny ip destination 1.1.1.1 0的優先級最高,排列最靠前。

3、ACL規則匹配項

最后,我們來說說ACL規則最核心的部分:規則匹配項。

在上一期中,小編在介紹ACL分類時,就已經提到各類ACL的規則定義描述。比如,基本ACL可以使用報文的源IP地址作為匹配選項;高級ACL則更高一籌,不僅可以使用源IP地址,還能使用目的IP地址、協議類型、端口號等等。

今天小編為大家講解幾個最常用的匹配選項:協議類型、目的地址和生效時間段。

PS:源地址的使用方法與目的地址同理,小編不再贅述。

協議類型

格式為:protocol-number | icmp | tcp | udp | gre | igmp | ip | ipinip | ospf

高級ACL支持過濾的報文類型很多,常用的協議類型包括: ICMP(協議號1)、TCP(協議號6)、UDP(協議號17)、GRE(協議號47)、IGMP(協議號2)、IP(指任何IP層協議)、IPinIP(協議號4)、OSPF(協議號89)。protocol-number取值可以是1~255。

什么情況下可以使用協議類型作為匹配項?

例如,交換機某個接口下的用戶存在大量的攻擊者,你希望能夠禁止這個接口下的所有用戶接入網絡。這時,通過指定協議類型為IP來屏蔽這些用戶的IP流量,就可以達到目的。配置如下:

rule deny ip //表示拒絕IP報文通過

再如,交換機上打開透明防火牆功能后,在缺省情況下,透明防火牆會在域間丟棄所有入域間的報文,包括業務報文和協議報文。如果你希望像OSPF這樣的動態路由協議報文能正常通過防火牆,保證路由互通,這時,通過指定協議類型為OSPF即可解決問題。配置如下:

rule permit ospf  //表示允許OSPF報文通過

 

目的地址

格式為:destination { destination-address destination-wildcard | any }

?  destination-address:指定報文的目的地址。

?  destination-wildcard:指定通配符掩碼。可以為0,相當於0.0.0.0,表示目的地址為主機地址。

?  any:表示對任意目的地址都匹配。

什么情況下可以使用目的地址作為匹配項?

例如,某公司有一台非常重要的服務器,其IP地址為1.1.1.1,現希望對該服務器的訪問權限進行限制。這時,你可以通過指定目的地址為匹配選項來解決該問題。配置如下:

rule deny ip destination 1.1.1.1 0  //表示拒絕目的地址是1.1.1.1的報文通過

小編提醒:在將目的地址定義為ACL規則匹配項時,還需要同時指定通配符掩碼,用來與目的地址字段共同確定一個地址范圍。

通配符掩碼的格式與IP地址相同,也是一個32比特位的數字字符串,用於指示目的IP地址中的哪些位將被檢查。各比特位中,0表示“檢查相應的位”,1表示“不檢查相應的位”,

概括為一句話就是“檢查0,忽略1”。 如圖所示,以8比特為例,通配符的低8位如果為全0,就表示對目的IP地址的低8位全部進行檢查;全1就表示全部忽略。有多少位為0,就表示檢查多少位;有多少位為1,就表示忽略多少位。

 

為了進一步加深對通配符掩碼的理解,小編特出一道考題來考考大家:

destination-address =172.30.16.0  destination -wildcard = 0.0.15.255 ,表示什么范圍的地址?

1.    首先,分析該目的地址和通配符掩碼共同確定的地址范圍的高兩個字節。目的地址高兩個字節是“172.30”,通配符掩的高兩個字節是“0.0”,按照“檢查0”原則,該目的地址和通配符掩碼確定的地址的高兩個字節必然是“172.30”。

2.    然后,再分析第三個字節。通配符掩碼的第三個字節是15,轉換為二進制比特是00001111。根據“檢查0,忽略1”原則,小編將分析過程畫圖如下。

     

 

3.    由於通配符掩碼的高4位是0000、后四位是1111,所以得出該目的地址和通配符掩碼確定的地址的第三個字節,是00010000~00011111這樣一個地址范圍,轉化成十進制是16~31。同理,目的地址的最后一個字節是0,通配符掩碼的最后一個字節是255(轉換成二進制比特是全1),按照“忽略1”原則,該目的地址和通配符掩碼確定的地址的第四個字節也是一個地址范圍00000000~11111111,轉化成十進制是0~255。

基於以上分析,我們得到最終結果是:destination-address =172.30.16.0  destination-wildcard = 0.0.15.255共同確定的地址范圍為172.30.16.0/24~172.30.31.0/24,最小的IP地址是172.30.16.0,最大的IP地址是172.30.31.255。小伙伴們,你們答對了嗎?

 

生效時間段 time-range

?  第一種模式——相對時間段:以星期為參數來定義時間范圍。

格式為:time-range time-name start-time to end-time days } &<1-7>

  • time-name:時間段名稱,以英文字母開頭的字符串。
  • start-time to end-time:開始時間和結束時間。格式為[小時:分鍾] to [小時:分鍾]。
  • days:有多種表達方式:
    • MonTueWedThuFriSatSun中的一個或者幾個的組合,也可以用數字表達,0表示星期日,1表示星期一,……6表示星期六。
    • working-day:從星期一到星期五,五天。
    • daily:包括一周七天。
    • off-day:包括星期六和星期日,兩天。

?  第二種模式——絕對時間段:從某年某月某日的某一時間開始,到某年某月某日的某一時間結束。

格式為:time-range time-name from time1 date1 [ to time2 date2 ]

  • time:格式為 [小時:分鍾]。
  • date:格式為[YYYY/MM/DD],表示年/月/日。

什么情況下可以使用生效時間段作為匹配項?

例如,每天20:00~22:00為網絡流量的高峰期,大量P2P、下載類業務的使用影響了其他數據業務的正常使用,此時通過設置在這個時間段內降低P2P、下載類業務的帶寬,可以防止網絡擁塞。配置如下:

time-range time1 20:00 to 22:00 daily

再舉一例,某公司對外開放服務器的訪問權限,但開放時間限制為:從2014年1月1日零點開始生效,到2014年12月31日晚上23:59截止。此時通過設置在這個時間段內訪問服務器的報文才允許通過,就可以達到基於時間的訪問權限控制的效果。配置如下:

time-range time2 from 00:00 2014/1/1 to 23:59 2014/12/31

最后,小遍提醒大家,配置完時間段,千萬別忘記要將時間段與ACL規則關聯起來,這樣才是一條基於時間的ACL的完整配置過程。配置如下:

acl acl-number

rule [ rule-id ] { deny | permit } other-options time-range time-name

 

好啦,說完ACL規則的匹配項,本文也要接近尾聲了。回顧全文,小編圍繞ACL匹配機制、ACL匹配順序和ACL匹配項展開了介紹,讓大家了解了ACL匹配報文的整個流程,知道了ACL存在哪些匹配結果、ACL按照什么樣的順序進行規則匹配,並且掌握了最常用的ACL規則匹配項的使用方法。現在大家對ACL的認識,是不是又進一步加深了呢?

在下一期連載系列中,小編將為大家帶來ACL的應用篇,讓大家了解ACL可以應用的范圍,並將帶領大家一起動手配置真實的ACL應用案例。敬請期待喲!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM