1. 程式人生 > 其它 >【交換機在江湖之初窺門徑】訪問控制列表-細說ACL那些事兒(ACL匹配篇)

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

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

交換機在江湖官方號2014-7-22 19:08:31最新回覆:2019-08-15 11:45:47 5.7W512022

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.0destination-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.0destination-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-rangetime-namestart-timetoend-time{days} &<1-7>

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

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

格式為:time-rangetime-namefromtime1 date1[totime2 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的完整配置過程。配置如下:

aclacl-number

rule [rule-id] { deny | permit }other-optionstime-rangetime-name

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

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