天天看點

怎麼使用ACL的established?

1,首先回顧一下TCP協定:

TCP資料包中有六個标志位(Code Bits):6 位标志域。表示為:緊急标志、有意義的應答标志、推、重置連接配接标志、同步序列号标志、完成發送資料标志。按照順序排列是:URG、ACK、PSH、RST、SYN、FIN。在整個TCP資料傳輸過程中ACK位除了在第一次握手的時候置位為0外,其他任何時候都置位為1。

三次握手過程:

在TCP/IP協定中,TCP協定提供可靠的連接配接服務,采用三次握手建立一個連接配接。  

第一次握手:建立連接配接時,用戶端發送syn包(syn=j)到伺服器,并進入SYN_SEND狀态,等待伺服器确認;  

第二次握手:伺服器收到syn包,必須确認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時伺服器進入SYN_RECV狀态;  

第三次握手:用戶端收到伺服器的SYN+ACK包,向伺服器發送确認包ACK(ack=k+1),此包發送完畢,用戶端和伺服器進入ESTABLISHED狀态,完成三次握手。

2,再次拿一個ACL來舉例說明(摘自TCP/IP路由技術 第一卷 第556頁):

假設你實作了一個通路清單可以阻止外部發起的TCP會話進入到你的網絡中,但是你又想讓内部發起的TCP會話的響應通過,那應該怎麼辦?通過檢查TCP段頭内的ACK和RST标記,關鍵字established可以實作這一點。如果這兩個标記都沒有被設定,表明源點正在向目标建立TCP連接配接,那麼比對不會發生。最終封包将會在通路清單中的後繼行中被拒絕。示例如下:

access-list 110 permit tcp any 172.22.0.0 0.0.255.255 established

access-list 110 permit tcp any host 172.22.15.83 eq 25

access-list 110 permit tcp 10.0.0.0 0.255.255.255 172.22.114.0 0.0.255 eq 23

第1行:如果連結是從網絡172.22.0.0發起的,那麼允許從熱和原電到該網絡的TCP封包通過;

第2行:允許來自任意源點,且目标端口号是主機172.22.16.83的端口25的TCP封包通過;

第3行:允許來自網絡10.0.0.0,去向網絡172.22.114.0/24且目标端口為23的TCP封包通過。

通過上面的ACL,大家有沒有注意過,一個從any到172.22.15.83的25端口的連接配接,TCP的三次握手,第一次握手肯定是需要比對第2行ACL,因為此封包的标志位ACK置位為0,不能比對第1行ACL。但是此會話的後面的所有資料封包都會比對第1行了,因為此封包的标志ACK已經置位為1了。這裡是否有問題,請相關牛人鑒定!

3,ACL對分片包的處理(摘自一英文技術寶典,經我翻譯如下):

當一IP包被分片時,僅在第一個分片中包含所有三層與四層資訊,而後續分片則隻包含三層資訊,四層資訊丢失。

ACL的處理機制:

對于permit ACEs:當第一分片被比對上後,後續分片也會比對上(不檢查四層資訊);

對于deny ACEs:所有分片都要檢查三、四層資訊。實際上,對于deny ACEs,當第一分片被比對上後被丢棄,而後續分片由于無四層資訊則不能比對該deny ACEs,可能在後面檢查時允許通過,則傳到目标地後,由于不能進行重組而被丢棄。但這樣占用了帶寬及目标主機的CPU。

綜合以上,根據3,是否可以判定ACL的處理機制有點smart,它可以根據每條ACE條目記錄某一個時段的比對内容,比對内容主要包括源和目标IP位址,甚至端口号(tcp條目),進而不會将流量封包比對錯。也就是說根據2說的同一會話的後續封包不會去比對第1行ACL,而根據ACL的記錄内容去比對第2行ACL。

以上純粹是我個人針對ACL的分析,有任何不對或者有争議之處,還請牛人指正,不勝感激!!!

本文轉自 chris_lee 51CTO部落格,原文連結:http://blog.51cto.com/ipneter/74361,如需轉載請自行聯系原作者

繼續閱讀