天天看點

ACL常用的比對項

作者:阿豪的筆記

生效時間段

ACL的生效時間段可以規定ACL規則在何時生效,進而實作在不同的時間段設定不同的政策。

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

  1. 周期時間段:以星期為參數來定義時間範圍,表示規則以一周為周期(如每周一的8至12點)循環生效。
  2. 絕對時間段:從某年某月某日的某一時間開始,到某年某月某日的某一時間結束,表示規則在這段時間範圍内生效。

同一名稱(time-name)配置多條時間段時,通過以下規則選出最終生效的時間範圍:

  1. 多個周期時間段之間是或的關系,多個絕對時間段之間也是或的關系。
  2. 周期時間段和絕對時間段之間是與的關系。
  3. 如果周期時間段和絕對時間段之間沖突,配置的時間段不生效。

例如,在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比對,封包被拒絕通過。