•隨著網絡的飛速發展,網絡安全和網絡服務質量QoS (Quality of Service)問題日益突出。訪問控制列表 (ACL, Access Control List)是與其緊密相關的一個技術。
•ACL可以通過對網絡中報文流的精確識別,與其他技術結合,達到控制網絡訪問行為、防止網絡攻擊和提高網絡帶寬利用率的目的,從而切實保障網絡環境的安全性和網絡服務質量的可靠性。
•在本章節中,將介紹ACL的基本原理和基本作用,ACL的不同種類及特點,ACL的基本組成和匹配順序,通配符的使用方法和ACL的相關配置。
技術背景:需要一個工具,實現流量過濾
•隨著網絡的飛速發展,網絡安全和網絡服務質量QoS(Quality of Service)問題日益突出。
?園區重要服務器資源被隨意訪問,園區機密信息容易泄露,造成安全隱患。
?Internet病毒肆意侵略園區內網,內網環境的安全性堪憂。
?網絡帶寬被各類業務隨意擠占,服務質量要求最高的語音、視頻業務的帶寬得不到保障,造成用戶體驗差。
•以上種種問題,都對正常的網絡通信造成了很大的影響。因此,提高網絡安全性和服務質量迫在眉睫,我們需要對網絡進行控制。比如,需要借助一個工具幫助實現一些流量的過濾。
•某公司為保證財務數據安全,禁止研發部門訪問財務服務器,但總裁辦公室不受限制。
ACL概述
•通過ACL可以實現對網絡中報文流的精確識別和控制,達到控制網絡訪問行為、防止網絡攻擊和提高網絡帶寬利用率的目的,從而切實保障網絡環境的安全性和網絡服務質量的可靠性。
?ACL是由permit或deny語句組成的一系列有順序的規則的集合;它通過匹配報文的相關字段實現對報文的分類。
?ACL是能夠匹配一個IP數據包中的源IP地址、目的IP地址、協議類型、源目的端口等元素的基礎性工具;ACL還能夠用于匹配路由條目。
•在本章課程中主要通過流量過濾來介紹ACL。
•ACL是由一系列permit或deny語句組成的、有序規則的列表。
•ACL是一個匹配工具,能夠對報文進行匹配和區分。
ACL應用
•匹配IP流量
•在Traffic-filter中被調用
•在NAT(Network Address Translation)中被調用
•在路由策略中被調用
•在防火墻的策略部署中被調用
•在QoS中被調用
•其他……
ACL的組成
•ACL的組成:
?ACL編號:在網絡設備上配置ACL時,每個ACL都需要分配一個編號,稱為ACL編號,用來標識ACL。不同分類的ACL編號范圍不同,這個后面具體講。
?規則:前面提到了,一個ACL通常由若干條“permit/deny”語句組成,每條語句就是該ACL的一條規則。
?規則編號:每條規則都有一個相應的編號,稱為規則編號,用來標識ACL規則。可以自定義,也可以系統自動分配。ACL規則的編號范圍是0~4294967294,所有規則均按照規則編號從小到大進行排序。
?動作:每條規則中的permit或deny,就是與這條規則相對應的處理動作。permit指“允許”,deny指“拒絕”,但是ACL一般是結合其他技術使用,不同的場景,處理動作的含義也有所不同。
?比如:ACL如果與流量過濾技術結合使用(即流量過濾中調用ACL),permit就是“允許通行”的意思,deny就是“拒絕通行”的意思。
?匹配項:ACL定義了極其豐富的匹配項。例子中體現的源地址,ACL還支持很多其他規則匹配項。例如,二層以太網幀頭信息(如源mac、目的MAC、以太幀協議類型)、三層報文信息(如目的地址、協議類型)以及四層報文信息(如TCP/UDP端口號)等。
•提問:rule 5 permit source 1.1.1.0 0.0.0.255 是什么意思?這個在后續課程中會介紹。
•ACL由若干條permit或deny語句組成。每條語句就是該ACL的一條規則,每條語句中的permit或deny就是與這條規則相對應的處理動作。
規則編號
•規則編號和步長的概念:
?規則編號:每條規則都有一個相應的編號,稱為規則編號,用來標識ACL規則。可以自定義,也可以系統自動分配。
?步長:系統自動為ACL規則分配編號時,每個相鄰規則編號之間會有一個差值,這個差值稱為“步長”。缺省步長為5,所以規則編號就是5/10/15…以此類推。
?如果手工指定了一條規則,但未指定規則編號,系統就會使用大于當前ACL內最大規則編號且是步長整數倍的最小整數作為規則編號。
?步長可以調整,如果將步長改為2,系統則會自動從當前步長值開始重新排列規則編號,規則編號就變成2、4、6…。
•那步長的作用是什么?直接rule 1/2/3/4…為什么不可以?
?先來看一個小題目:如果希望增加一條規則,該如何處理?
?可以在rule 10和rule 15之間,手工加入一條rule 11。
?因此,設置一定長度的步長的作用,是方便后續在舊規則之間插入新的規則。
規則編號與步長
•規則編號(Rule ID):
一個ACL中的每一條規則都有一個相應的編號。
•步長(Step):
步長是系統自動為ACL規則分配編號時,每個相鄰規則編號之間的差值,缺省值為5。步長的作用是為了方便后續在舊規則之間,插入新的規則。
•Rule ID分配規則:
系統為ACL中首條未手工指定編號的規則分配編號時,使用步長值(例如步長=5,首條規則編號為5)作為該規則的起始編號;為后續規則分配編號時,則使用大于當前ACL內最大規則編號且是步長整數倍的最小整數作為規則編號。
通配符 (1)
•當進行IP地址匹配的時候,后面會跟著32位掩碼位,這32位稱為通配符。
•通配符,也是點分十進制格式,換算成二進制后,“0”表示“匹配”,“1”表示“不關心”。
•具體看下這2條規則:
?rule 5: 拒絕源IP地址為10.1.1.1報文通過——因為通配符為全0,所以每一位都要嚴格匹配,因此匹配的是主機IP地址10.1.1.1;
?rule 15:允許源IP地址為10.1.1.0/24網段地址的報文通過——因為通配符:0.0.0.11111111,后8位為1,表示不關心,因此10.1.1.xxxxxxxx 的后8位可以為任意值,所以匹配的是10.1.1.0/24網段。
•例子:如果要精確匹配192.168.1.1/24這個IP地址對應的網段地址,通配符是多少?
?可以得出:網絡位需要嚴格匹配,主機位無所謂,因此通配符為“0.0.0.255”。
匹配規則:
“0”表示“匹配”;“1”表示“隨機分配”
通配符 (Wildcard)
•通配符是一個32比特長度的數值,用于指示IP地址中,哪些比特位需要嚴格匹配,哪些比特位無需匹配。
•通配符通常采用類似網絡掩碼的點分十進制形式表示,但是含義卻與網絡掩碼完全不同。
通配符 (2)
•如果想匹配192.168.1.0/24網段中的奇數IP地址,通配符該怎么寫呢?
?我們先來看一看,奇數IP地址都有哪些:192.168.1.1、192.168.1.5、192.168.1.11……
?后八位寫成二進制:192.168.1.00000001、192.168.1.00000101、192.168.1.00001011……
?可以看出共同點:最后8位的高7位是任意值,最低位固定為1,因此答案是:192.168.1.1 0.0.0.254(0.0.0.11111110)
•這就得出了通配符的一個特點:通配符中的1或者0是可以不連續的。
•還有兩個特殊的通配符:
?當通配符全為0來匹配IP地址時,表示精確匹配某個IP地址;
?當通配符全為1來匹配0.0.0.0地址時,表示匹配了所有IP地址。
•匹配192.168.1.0/24這個子網中的奇數IP地址,例如192.168.1.1、192.168.1.3、192.168.1.5等。
ACL的分類與標識
•基于ACL規則定義方式的劃分,可分為:
?基本ACL、高級ACL、二層ACL、用戶自定義ACL和用戶ACL。
•基于ACL標識方法的劃分,則可分為:
?數字型ACL和命名型ACL。
•注意:用戶在創建ACL時可以為其指定編號,不同的編號對應不同類型的ACL。同時,為了便于記憶和識別,用戶還可以創建命名型ACL,即在創建ACL時為其設置名稱。命名型ACL,也可以是“名稱 數字”的形式,即在定義命名型ACL時,同時指定ACL編號。如果不指定編號,系統則會自動為其分配一個數字型ACL的編號。
•基于ACL規則定義方式的分類
分類 |
編號范圍 |
規則定義描述 |
基本ACL |
2000~2999 |
僅使用報文的源IP地址、分片信息和生效時間段信息來定義規則。 |
高級ACL |
3000~3999 |
可使用IPv4報文的源IP地址、目的IP地址、IP協議類型、ICMP類型、TCP源/目的端口號、UDP源/目的端口號、生效時間段等來定義規則。 |
二層ACL |
4000~4999 |
使用報文的以太網幀頭信息來定義規則,如根據源MAC地址、目的MAC地址、二層協議類型等。 |
用戶自定義ACL |
5000~5999 |
使用報文頭、偏移位置、字符串掩碼和用戶自定義字符串來定義規則。 |
用戶ACL |
6000~6999 |
既可使用IPv4報文的源IP地址或源UCL(User Control List)組,也可使用目的IP地址或目的UCL組、IP協議類型、ICMP類型、TCP源端口/目的端口、UDP源端口/目的端口號等來定義規則。 |
基于ACL標識方法的分類
分類 |
規則定義描述 |
數字型ACL |
傳統的ACL標識方法。創建ACL時,指定一個唯一的數字標識該ACL。 |
命名型ACL |
通過名稱代替編號來標識ACL。 |
基本ACL&高級ACL
•基本ACL:
?主要針對IP報文的源IP地址進行匹配,基本ACL的編號范圍是2000-2999。
?比如這個例子,創建的是acl 2000,就意味著創建的是基本ACL。
•高級ACL:
?可以根據IP報文中的源IP地址、目的IP地址、協議類型,TCP或UDP的源目端口號等元素進行匹配,可以理解為:基本ACL是高級ACL的一個子集,高級ACL可以比基本ACL定義出更精確、更復雜、更靈活的規則。
ACL的匹配機制
•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的匹配順序及匹配結果
•配置順序(config模式)
?系統按照ACL規則編號從小到大的順序進行報文匹配,規則編號越小越容易被匹配。
•一條ACL可以由多條“deny或permit”語句組成,每一條語句描述一條規則,這些規則可能存在包含關系,也可能有重復或矛盾的地方,因此ACL的匹配順序是十分重要的。
•華為設備支持兩種匹配順序:自動排序(auto模式)和配置順序(config模式)。缺省的ACL匹配順序是config模式。
?自動排序,是指系統使用“深度優先”的原則,將規則按照精確度從高到低進行排序,并按照精確度從高到低的順序進行報文匹配。——這個比較復雜,這里就不具體展開了,感興趣的同學可以課后查看資料。
?配置順序,系統按照ACL規則編號從小到大的順序進行報文匹配,規則編號越小越容易被匹配。——這個就是我們前面提到的匹配順序。
?如果后面又添加了一條規則,則這條規則會被加入到相應的位置,報文仍然會按照從小到大的順序進行匹配。
•匹配結果:(如圖所示,以192.168.1.3/24為例)
?首先理解ACL 2000的含義:
?rule 1:允許源IP地址為192.168.1.1的報文
?rule 2:允許源IP地址為192.168.1.2的報文
?rule 3:拒絕源IP地址為192.168.1.2的報文
?rule 4:允許其他所有IP地址的報文
ACL的匹配位置
入站 (Inbound)及出站 (Outbound)方向
基本ACL的基礎配置命令
•創建基本ACL
•[Huawei] acl [ number ] acl-number [ match-order config ]
?acl-number:指定訪問控制列表的編號。
?match-order config:指定ACL規則的匹配順序,config表示配置順序。
•[Huawei] acl name acl-name { basic | acl-number } [ match-order config ]
?acl-name:指定創建的ACL的名稱。
?basic:指定ACL的類型為基本ACL。
•配置基本ACL規則
•[Huawei-acl-basic-2000] rule [ rule-id ] { deny | permit } [ source { source-address source-wildcard | any } | time-range time-name ]
?rule-id:指定ACL的規則ID。
?deny:指定拒絕符合條件的報文。
?permit:指定允許符合條件的報文。
?source { source-address source-wildcard | any }:指定ACL規則匹配報文的源地址信息。如果不配置,表示報文的任何源地址都匹配。其中:
?source-address:指定報文的源地址。
?source-wildcard:指定源地址通配符。
?any:表示報文的任意源地址。相當于source-address為0.0.0.0或者source-wildcard為255.255.255.255。
?time-range time-name:指定ACL規則生效的時間段。其中,time-name表示ACL規則生效時間段名稱。如果不指定時間段,表示任何時間都生效。