當前位置: 華文世界 > 科技

ACL 詳解

2024-02-11科技

ACL簡介

定義

存取控制列表ACL(Access Control List)是由一條或多條規則組成的集合。所謂規則,是指描述報文匹配條件的判斷語句,這些條件可以是報文的源地址、目的地址、埠號等。

ACL本質上是一種報文過濾器,規則是過濾器的濾芯。器材基於這些規則進行報文匹配,可以過濾出特定的報文,並根據套用ACL的業務模組的處理策略來允許或阻止該報文透過。

目的

隨著網絡的飛速發展,網絡安全和網絡服務質素QoS(Quality of Service)問題日益突出。

  • 企業重要伺服器資源被隨意存取,企業機密資訊容易泄露,造成安全隱患。
  • Internet病毒肆意侵略企業內網,內網環境的安全性堪憂。
  • 網絡頻寬被各類業務隨意擠占,服務質素要求最高的語音、影片業務的頻寬得不到保障,造成使用者體驗差。
  • 以上種種問題,都對正常的網絡通訊造成了很大的影響。因此,提高網絡安全性服務質素迫在眉睫。ACL就在這種情況下應運而生了。

    透過ACL可以實作對網絡中報文流的精確辨識和控制,達到控制網絡存取行為、防止網絡攻擊和提高網絡頻寬利用率的目的,從而切實保障網絡環境的安全性和網絡服務質素的可靠性。

    下圖是一個典型的ACL套用組網場景

  • 某企業為保證財務數據安全,禁止研發部門存取財務伺服器,但總裁辦公室不受限制。實作方式:在Interface 1的入方向上部署ACL,禁止研發部門存取財務伺服器的報文透過。Interface 2上無需部署ACL,總裁辦公室存取財務伺服器的報文預設允許透過。
  • 保護企業內網環境安全,防止Internet病毒入侵。實作方式:在Interface 3的入方向上部署ACL,將病毒經常使用的埠予以封堵。
  • ACL基本原理

    ACL由一系列規則組成,透過將報文與ACL規則進行匹配,器材可以過濾出特定的報文。

    ACL組成

    一條ACL的結構組成,如下圖1-2所示

    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-2中的rule 5排在首位,而規則編號最大的rule 4294967294排在末位。系統按照規則編號從小到大的順序,將規則依次與報文匹配,一旦匹配上一條規則即停止匹配。
  • 動作 :包括permit/deny兩種動作,表示允許/拒絕。
  • 匹配項 :ACL定義了極其豐富的匹配項。除了 圖1-2中的源地址和生效時間段,ACL還支持很多其他規則匹配項。例如,二層乙太網路幀頭資訊(如源MAC、目的MAC、以太幀協定類別)、三層報文資訊(如目的地址、協定類別)以及四層報文資訊(如TCP/UDP埠號)等。關於每種匹配項的詳細介紹,請參見 ACL的常用匹配項。
  • ACL的匹配機制

    器材將報文與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標識方法的劃分

    劃分如下:

  • 數碼型ACL:傳統的ACL標識方法。建立ACL時,指定一個唯一的數碼標識該ACL。
  • 命名型ACL:透過名稱代替編號來標識ACL。
  • 使用者在建立ACL時可以為其指定編號,不同的編號對應不同類別的ACL,如 表1-1所示。同時,為了便於記憶和辨識,使用者還可以建立命名型ACL,即在建立ACL時為其設定名稱。命名型ACL,也可以是「名稱 數碼」的形式,即在定義命名型ACL時,同時指定ACL編號。如果不指定編號,系統則會自動為其分配一個數碼型ACL的編號。

    基於對IPv4和IPv6支持情況的劃分

    劃分如下:

  • ACL4:通常直接叫做「ACL」,特指僅支持過濾IPv4報文的ACL。
  • ACL6:又叫做「IPv6 ACL」,特指僅支持過濾IPv6報文的ACL。
  • 以上兩種ACL,以及既支持過濾IPv4報文又支持過濾IPv6報文的ACL,統一稱做「ACL」。各類別ACL對IPv4和IPv6的支持情況,如 表1-1所示。

    基於ACL規則定義方式的劃分

    如表1-1所示,基於ACL規則定義方式的劃分如下。

    表1-1 基於ACL規則定義方式的ACL分類

    分類

    適用的IP版本

    規則定義描述

    編號範圍

    基本ACL

    IPv4

    僅使用報文的 源IP地址 、分片資訊和生效時間段資訊來定義規則。

    2000~2999

    高級ACL

    IPv4

    既可使用IPv4報文的 源IP地址 ,也可使用 目的IP地址 、IP協定類別、ICMP類別、TCP源/目的埠、UDP源/目的埠號、生效時間段等來定義規則。

    3000~3999

    二層ACL

    IPv4&IPv6

    使用報文的 乙太網路幀頭資訊 來定義規則,如根據源MAC(Media Access Control)地址、目的MAC地址、二層協定類別等。

    4000~4999

    使用者自訂ACL

    IPv4&IPv6

    使用 報文頭、偏移位置、字串掩碼和使用者自訂字串 來定義規則,即以報文頭為基準,指定從報文的第幾個字節開始與字串掩碼進行「與」操作,並將提取出的字串與使用者自訂的字串進行比較,從而過濾出相匹配的報文。

    5000~5999

    使用者ACL

    IPv4

    既可使用IPv4報文的 源IP地址 ,也可使用 目的IP地址 、IP協定類別、ICMP類別、TCP源埠/目的埠、UDP源埠/目的埠號等來定義規則。

    6000~6031

    基本ACL6

    IPv6

    可使用IPv6報文的 源IPv6地址 、分片資訊和生效時間段來定義規則。

    2000~2999

    高級ACL6

    IPv6

    可以使用IPv6報文的 源IPv6地址 目的IPv6地址 、IPv6協定類別、ICMPv6類別、TCP源/目的埠、UDP源/目的埠號、生效時間段等來定義規則。

    3000~3999

    ACL的匹配順序

    一條ACL可以由多條「deny | permit」語句組成,每一條語句描述一條規則,這些規則可能存在重復或矛盾的地方。例如,在一條ACL中先後配置以下兩條規則:

    rule deny ip destination 10.1.0.0 0.0.255.255 //表示拒絕目的IP地址為10.1.0.0/16網段地址的報文透過 rule permit ip destination 10.1.1.0 0.0.0.255 //表示允許目的IP地址為10.1.1.0/24網段地址的報文透過,該網段地址範圍小於10.1.0.0/16網段範圍

    其中,permit規則與deny規則是相互矛盾的。對於目的IP=10.1.1.1的報文,如果系統先將deny規則與其匹配,則該報文會被拒絕透過。相反,如果系統先將permit規則與其匹配,則該報文會得到允許透過。

    因此,對於規則之間存在重復或矛盾的情形,報文的匹配結果與ACL的匹配順序是息息相關的。

    器材支持兩種ACL匹配順序:配置順序( config 模式)和自動排序( auto 模式)。缺省的ACL匹配順序是 config 模式。

    配置順序

    配置順序,即系統按照ACL規則編號從小到大的順序進行報文匹配,規則編號越小越容易被匹配。

  • 如果配置規則時指定了規則編號,則規則編號越小,規則插入位置越靠前,該規則越先被匹配。
  • 如果配置規則時未指定規則編號,則由系統自動為其分配一個編號。該編號是一個大於當前ACL內最大規則編號且是步長整數倍的最小整數,因此該規則會被最後匹配。
  • 自動排序

    自動排序,是指系統使用「深度優先」的原則,將規則按照精確度從高到低進行排序,並按照精確度從高到低的順序進行報文匹配。規則中定義的匹配項限制越嚴格,規則的精確度就越高,即優先級越高,系統越先匹配。

    ACL的生效時間

    產生背景

    ACL定義了豐富的匹配項,可以滿足大部份的報文過濾需求。但需求是不斷變化發展的,新的需求總是不斷湧現。例如,某公司要求,在上班時間只允許員工瀏覽與工作相關的幾個網站,下班或周末時間才可以存取其他互聯網網站;再如,在每天20:00~22:00的網絡流量的高峰期,為防止P2P、下載類業務占用大量頻寬對其他數據業務的正常使用造成影響,需要對P2P、下載類業務的頻寬進行限制。

    基於時間的ACL過濾就是用來解決上述問題的。管理員可以根據網絡存取行為的要求和網絡的擁塞情況,配置一個或多個ACL生效時間段,然後在ACL規則中參照該時間段,從而實作在不同的時間段設定不同的策略,達到網絡最佳化的目的。

    生效時間段模式

    在ACL規則中參照的生效時間段存在兩種模式:

  • 第一種模式——周期時間段:以星期為參數來定義時間範圍,表示規則以一周為周期(如每周一的8至12點)迴圈生效。格式: time-range time-name start-time to end-time { days } &<1-7>
  • time-name :時間段名稱,以英文字母開頭的字串。
  • start-time to end-time :開始時間和結束時間。格式為[小時:分鐘] to [小時:分鐘]。
  • days :有多種表達方式。
  • Mon Tue Wed Thu Fri Sat Sun 中的一個或者幾個的組合,也可以用數碼表達,0表示星期日,1表示星期一,……6表示星期六。
  • working-day :從星期一到星期五,五天。
  • daily :包括一周七天。
  • off-day :包括星期六和星期日,兩天。
  • 第二種模式——絕對時間段:從某年某月某日的某一時間開始,到某年某月某日的某一時間結束,表示規則在這段時間範圍內生效。格式: time-range time-name from time1 date1 [ to time2 date2 ]
  • time-name :時間段名稱,以英文字母開頭的字串。
  • time1 / time2 :格式為[小時:分鐘]。
  • date1 / date2 :格式為[YYYY/MM/DD],表示年/月/日。
  • 可以使用同一名稱( time-name )配置內容不同的多條時間段,配置的各周期時間段之間以及各絕對時間段之間的交集將成為最終生效的時間範圍。

    例如,在ACL 2001中參照了時間段「test」,「test」包含了三個生效時間段:

    # time-range test 8:00 to 18:00 working-day time-range test 14:00 to 18:00 off-day time-range test from 00:00 2014/01/01 to 23:59 2014/12/31 # acl number 2001 rule 5 permit time-range test

  • 第一個時間段,表示在周一到周五每天8:00到18:00生效,這是一個周期時間段。
  • 第二個時間段,表示在周六、周日下午14:00到18:00生效,這是一個周期時間段。
  • 第三個時間段,表示從2014年1月1日00:00起到2014年12月31日23:59生效,這是一個絕對時間段。
  • 時間段「test」最終描述的時間範圍為:2014年的周一到周五每天8:00到18:00以及周六和周日下午14:00到18:00。

    實驗

    還是老樣子先奉上完整拓撲(已配置好)戳我

    拓撲圖

    概述:

  • 人事部在工作日08:00--12:00以及13:30--17:30不能存取外部網絡(AR5)
  • 財務部只能在休息日12:00--18:00點存取外部網絡(AR5)
  • 研發部只能在2022年10月22日到2023年10月22日工作日的8:00--18:00點存取外部網絡
  • 配置命令

    AR1上:

    // 建立時間組time-range morning 8:00 to 12:00 working-daytime-range afternoon 13:30 to 17:30 working-day// 建立高級ACLacl name deny_renshiToInternet 3000rule deny ip source 192.168.10.0 0.0.0.255 destination 172.16.1.0 0.0.0.255 time-range morningrule deny ip source 192.168.10.0 0.0.0.255 destination 172.16.1.0 0.0.0.255 time-range afternoon// 出介面掛起int g0/0/1traffic-fitter outbound acl 3000

    AR2上:

    // 建立時間組time-range caiwu 12:00 to 18:00 off-day// 建立高級ACLacl name permit_caiwuToInternet 3000rule deny ip source 192.168.20.0 0.0.0.255 destination 172.16.1.0 0.0.0.255 time-range caiwurule deny ip source any// 出介面掛起int g0/0/2traffic-fitter outbound acl 3000

    AR3上:

    // 建立時間組time-range yanfa 8:00 to 18:00 working-daytime-range yanfa from 00:00 2022/10/22 to 23:59 2023/10/22// 建立高級ACLacl name permit_yanfaToInternet 3000rule deny ip source 192.168.30.0 0.0.0.255 destination 172.16.1.0 0.0.0.255 time-range yanfarule deny ip source any// 出介面掛起int g0/0/1traffic-fitter outbound acl 3000

    測試

    由於寫這篇文章時是2022年10月30日14點23分(星期日),所以三個網段的pc都能ping通AR5,看不出作用

    不過可以使用 clock datetime 時間 日期 來修改路由器時間,這裏就不做演示了

    給大家看一下各路由器的時間組以及ACL規則

    AR1

    AR2

    AR3