生效時間段
ACL的生效時間段可以規定ACL規則在何時生效,進而實作在不同的時間段設定不同的政策。
在ACL規則中引用的生效時間段存在兩種模式:
- 周期時間段:以星期為參數來定義時間範圍,表示規則以一周為周期(如每周一的8至12點)循環生效。
- 絕對時間段:從某年某月某日的某一時間開始,到某年某月某日的某一時間結束,表示規則在這段時間範圍内生效。
同一名稱(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
時間段“test”最終描述的時間範圍為:2014年的周一到周五每天8:00到18:00以及周六和周日下午14:00到18:00。
如果第三個時間配置為2014年1月1日19:00起到2014年12月31日21:00,則時間段“test”無效。
源/目的IP位址及其通配符掩碼
源IP位址及其通配符掩碼格式:source { source-address source-wildcard| any }
目的IP位址及其通配符掩碼格式:destination { destination-address destination-wildcard | any }
将源/目的IP位址定義為規則比對項時,需要在源/目的IP位址字段後面同時指定通配符掩碼,用來與源/目的IP位址字段共同确定一個位址範圍。
IP位址通配符掩碼是一個32比特位的數字字元串,用于訓示IP位址中的哪些位将被檢查。各比特位中,“0”表示“檢查相應的位”,“1”表示“不檢查相應的位”。
例如:
rule 5 permit ip source 192.168.1.0 0.0.0.255
規則中的通配符掩碼為0.0.0.255,表示隻需檢查IP位址的前三組二進制八位數對應的比特位,即允許該封包封包的源IP位址是192.168.1.0/24網段的位址通過。
源/目的MAC位址及其通配符掩碼
源MAC位址及其通配符掩碼格式:source-mac source-mac-address [ source-mac-mask ]
目的位址及其通配符掩碼格式:destination-mac dest-mac-address [ dest-mac-mask ]
可以在源/目的MAC位址字段後面同時指定通配符掩碼,用來與源/目的MAC位址字段共同确定一個位址範圍。如果不配置通配符掩碼,範圍為配置MAC本身。
MAC位址通配符掩碼的格式與MAC位址相同,采用十六進制數表示,共六個位元組(48位),各比特位中,1表示“檢查相應的位”,0表示“不檢查相應的位”。
表1 MAC位址與通配符掩碼共同确定的位址範圍
MAC位址 | MAC位址通配符掩碼 | 确定的位址範圍 |
00e0-fc01-0101 | 0000-0000-0000 | 任意MAC位址 |
00e0-fc01-0101 | ffff-ffff-ffff | 僅00e0-fc01-0101這一個MAC位址 |
00e0-fc01-0101 | ffff-ffff-0000 | 00e0-fc01-0000~00e0-fc01-ffff |
VLAN編号及其掩碼
外層VLAN及其掩碼格式:vlan-id vlan-id [ vlan-id-mask ]
内層VLAN及其掩碼格式:cvlan-id cvlan-id [ cvlan-id-mask ]
可以在VLAN編号字段後面同時指定VLAN掩碼,用來與VLAN編号字段共同确定一個VLAN範圍。如果不指定VLAN掩碼,則為配置VLAN編号本身。
VLAN掩碼的格式是十六進制形式,取值範圍是0x0~0xFFF。各比特位中,1表示“檢查相應的位”,0表示“不檢查相應的位”。
表2 VLAN編号及其掩碼共同确定的VLAN範圍
VLAN編号 | VLAN掩碼 | 确定的VLAN範圍 |
10 | 0x000 | 任意VLAN |
10 | 0xFFF | 僅VLAN 10 |
10 | 0xFF0 | VLAN 1~VLAN 15 |
IP承載的協定類型
格式:protocol-number | icmp | tcp | udp | gre | igmp | ip | ipinip | ospf
進階ACL支援基于協定類型過濾封包,常用的協定類型如下表所示。
協定類型 | 協定編号 |
ICMP | 1 |
TCP | 6 |
UDP | 17 |
GRE | 47 |
IGMP | 2 |
IPinIP | 4 |
OSPF | 89 |
TCP/UDP端口号
源端口号格式:source-port { eq port | gt port | ltport | range port-start port-end }
目的端口号格式:destination-port { eq port | gt port | ltport | range port-start port-end }
其中,TCP/UDP端口号的比較符含義如下:
- eq port:指定等于源/目的端口。
- gt port:指定大于源/目的端口。
- lt port:指定小于源/目的端口。
- range port-start port-end:指定源/目的端口的範圍。port-start是端口範圍的起始,port-end是端口範圍的結束。
TCP/UDP端口号可以使用數字表示,也可以用字元串(助記符)表示。例如,rule deny tcp destination-port eq 80,可以用rule deny tcp destination-port eq www替代。
TCP标志資訊
格式:tcp-flag { ack | established | fin | psh | rst | syn | urg }*
在進階ACL中,當協定類型指定為TCP時,裝置支援基于TCP标志資訊過濾封包。指定tcp-flag的ACL規則可以用來實作單向通路控制。
假設,要求192.168.1.0/24網段使用者可以主動通路192.168.2.0/24網段使用者,但反過來192.168.2.0/24網段使用者不能主動通路192.168.1.0/24。可通過在裝置上連接配接192.168.2.0/24網段的接口入方向上,應用ACL規則來實作該需求。
由TCP建立連接配接和關閉連接配接的過程可知,隻有在TCP中間連接配接過程的封包才會ACK=1或者RST=1。根據這個特點,配置如下兩種ACL規則,允許TCP中間連接配接過程的封包通過,拒絕其他TCP封包通過,就可以限制192.168.2.0/24網段主動發起的TCP連接配接。
- 方法一:
- 配置指定ack和rst參數的ACL規則
rule 5 permit tcp source 192.168.2.0 0.0.0.255 tcp-flag ack
rule 10 permit tcp source 192.168.2.0 0.0.0.255 tcp-flag rst
rule 15 deny tcp source 192.168.2.0 0.0.0.255
- 方法二:
- 配置指定established參數的ACL規則
rule permit tcp source 192.168.2.0 0.0.0.255 tcp-flag established
rule deny tcp source 192.168.2.0 0.0.0.255
說明:
ACK(acknowledge):表示前面的确認号字段是否有效。ACK=1 時表示有效。隻有當 ACK=1 時,前面的确認号字段才有效。TCP 規定,連接配接建立後,ACK 必須為1。
FIN(finish):标記資料是否發送完畢。如果 FIN=1,表示資料已經發送完成,可以釋放連接配接。
PSH(Push):告訴對方收到該封包段後是否立即把資料推送給上層。如果值為 1,表示應當立即把資料送出給上層,而不是緩存起來。
RST(reset):表示是否重置連接配接。如果RST=1,說明 TCP 連接配接出現了嚴重錯誤(如主機崩潰),必須釋放連接配接,然後再重建立立連接配接。
SYN(synchronize):在建立連接配接時使用,用來同步序号。當 SYN=1,ACK=0 時,表示這是一個請求建立連接配接的封包段;當 SYN=1,ACK=1 時,表示對方同意建立連接配接。SYN=1 時,說明這是一個請求建立連接配接或同意建立連接配接的封包。隻有在前兩次握手中 SYN才為 1。
URG(Urgent):表示本封包段中發送的資料是否包含緊急資料。URG=1 時表示有緊急資料。當 URG=1 時,後面的緊急指針字段才有效。
TCP标志資訊中的established,表示标志位為ACK(010000)或RST(000100)。
IP分片資訊
格式:fragment
IP分片除了首片封包外,還有後續分片封包,即非首片分片封包。僅首片分片封包攜帶四層資訊(如TCP/UDP端口号等),後續分片封包均不攜帶。網絡裝置收到分片封包後,會判斷其是否是最後一個分片封包。如果不是,則為其配置設定記憶體空間,以便于最後一個分片封包到達後完成重組。黑客可以利用這一點,向接收方裝置發起分片封包攻擊,始終不向接收方發送最後一個分片封包。
為了解決這個問題,可以配置指定fragment比對項的ACL規則來阻塞非首片分片封包,進而達到防範分片封包攻擊的目的。
針對非分片封包、首片分片封包、非首片分片封包這三類封包,ACL的處理方式如表4所示。
表4 ACL對IP分片封包的處理方式
規則包含的比對項 | 非分片封包 | 首片分片封包 | 非首片分片封包 |
三層資訊(如源/目的IP位址) | 三層資訊比對上,則傳回比對結果; 未比對上,則轉下一條規則進行比對 | 三層資訊比對上,則傳回比對結果; 未比對上,則轉下一條規則進行比對 | 三層資訊比對上,則傳回比對結果; 未比對上,則轉下一條規則進行比對 |
三層資訊 + 四層資訊(如TCP/UDP端口号) | 三層和四層資訊都比對上,則傳回比對結果; 未比對上,則轉下一條規則進行比對 | 三層和四層資訊都比對上,則傳回比對結果; 未比對上,則轉下一條規則進行比對 | 不比對,轉下一條規則進行比對 |
三層資訊 + fragment | 不比對,轉下一條規則進行比對 | 不比對,轉下一條規則進行比對 | 三層資訊比對上,則傳回比對結果; 未比對上,則轉下一條規則進行比對 |
例如,ACL 3012中存在以下規則:
acl number 3012
rule 5 deny tcp destination 192.168.2.2 0 fragment
rule 10 permit tcp destination 192.168.2.2 0 destination-port eq www
rule 15 deny ip
對于目的IP位址是192.168.2.2的TCP封包:
-
該封包是非分片封包或首片分片封包時:
如果該封包的目的端口号是80,則封包與rule 10比對,封包被允許通過;
如果該封包的目的端口号不是80,則封包與rule 15比對,封包被拒絕通過。
-
該封包是非首片分片封包時:
該封包與rule 5比對,封包被拒絕通過。