流量策略及令牌桶的工作原理

  TCP/IP協議在設計之初,沒有過多的考慮安全這一方面,因此許多協議存在着被***利用的弱點。隨着互聯網絡急劇的膨脹,這些弱點將對我們的企業網絡構成日益嚴峻的威脅。一個很好的例子就是TCP協議,這個協議要求在傳輸數據之前使用一個“三次握手”過程來建立一個連接。如下圖所示.
                                 source                   destination
                                             syn=x
                                        ------------>
                                            
                                             ack=x+1
                                        <------------
                                             syn=y
 
                                             ack=y+1
                                        ------------>
                                             syn=x+1

source端最初發送一個syn=x的報文,請求建立一個連接。
destination端以一個在報文頭中設置了ack,syn標記的報文作爲響應。
ack標記是對source端請求的響應,syn標記指示自身的連接建立請求。
source端通過向destination端發送一個帶ack標記的報文確認目的端的連接建立請求。
當完成上述“三次握手”之後,source端可以發送數據給destination端。
 
TCP協議中的弱點之一是目的端期望源端發送一個最後的ack給目的端,完成連接的建立。***可以利用這個弱點,通過向一個服務發送大量的tcp syn請求報文,但不緊跟着完成這些連接,這種連接類型被稱爲半開連接(Half-Open Connection)。這樣將導致destination端的資源被大量佔用,從而致使目的端爲新的服務拒絕連接,這就是有名的拒絕服務***(Denial of Service Attack)。
網絡***的分類:
1.偵測***
  從嚴格意義上講,偵測***不能算是真正的***,它主要指***利用各種手段對網絡中的具體的信息(網絡拓樸、網絡內的主機、主機上開啓的服務)進行偵測,但是偵測***往往是真正***的前奏。
2.訪問***
  在這種***中,***企圖獲得對網絡和網絡資源的未經授權的或非法的訪問,尤其是如file、e-mail、web服務器這樣的資源。
3.DOS***
  使用DOS***,***企圖拒絕到特定資源的合法流量和用戶訪問,或者至少降低對資源的服務質量。
  DOS***除了TCP的half-open connection以外,還有象基於TCP syn、UDP echo、ICMP echo的flood***。
  緩解DOS***的方法很多,比如說用ACL,URPF等技術都可以實現,但本專題僅專注於用traffic-police(流量策略)技術實現。
traffic-police可以執行兩個基本功能:
1.速率限制
2.流量分類
traffic-police的命令結構如下:
police <bps> <burst-normal> <burst-max> conform-action <action> exceed-action <action> [violate-action <action>]
<bps>:CIR。(定義了向token buckets中注入token的平均數率)
<burst-normal>:BC。(定義了BC token buckets的大小)
<burst-max>:BE。(定義了BE token buckets的大小)
<action>:定義行爲,可選的行爲如下:
?drop—Drops the packet.
?set-prec-transmit new-prec—Sets the IP precedence and sends the packet.
?set-dscp-transmit new-dscp—Sets the DSCP value and transmits the packet.
?transmit—Sends the packet.
接下來,我們將用兩個具體的實例來說明CAR的工作原理。
實例1:
在這個例子中,traffic policing被配置爲CIR 8000bit/s , BC被配置爲1000byte,
初始到達一個450字節的數據包,0.25秒之後,到達一個900字節的數據包。
police被關聯在fa0/0的output方向。
Router(config)# class-map access-match
Router(config-cmap)# match access-group 1
Router(config-cmap)# exit
Router(config)# policy-map police-setting
Router(config-pmap)# class access-match
Router(config-pmap-c)# police 8000 1000 conform-action transmit exceed-action drop
Router(config-pmap-c)# exit
Router(config-pmap)# exit
Router(config)# interface fastethernet 0/0
Router(config-if)# service-policy output police-setting

   在這個例子中,初始的token buckets中裝滿1000byte的tokens,如果在初始階段到達450字節的數據包,那麼需要從token bucket中流出450字節的tokens, 此時,token buckets中剩餘(1000-450)byte=550字節的tokens,token bucket中的token數量有富裕,將觸發comform-action行爲,450字節的數據包將被transmit。0.25秒之後,一個900字節的數據包到達,在0.25秒的時間間隔之內,token buckets中將注入(8000bps/8)*0.25s=250字節的tokens,此時,token buckets中共剩餘(550+250)byte=800字節的tokens, 由於到達的數據包的大小爲900字節,需要從token buckets中流出相應字節的token數,而此時,token buckets中的token數量不夠,將會觸發exceed-action行爲,此900字節大小的數據包將被drop。
實例2:
在這個例子中,traffic policing被配置爲CIR 8000bit/s , BC被配置爲1000bytes,BE被配置爲1000bytes。
初始到達一個450字節的數據包,0.25秒之後,到達一個900字節的數據包。
0.4秒之後,到達一個1000字節的數據包,0.2秒之後,到達一個400字節的數據包。
police被關聯在fa0/0的output方向。
Router(config)# class-map access-match
Router(config-cmap)# match access-group 1
Router(config-cmap)# exit
Router(config)# policy-map police-setting
Router(config-pmap)# class access-match
Router(config-pmap-c)# police 8000 1000 1000 conform-action transmit exceed-action set-prec-transmit 1  violate-action drop
Router(config-pmap-c)# exit
Router(config-pmap)# exit
Router(config)# interface fastethernet 0/0
Router(config-if)# service-policy output police-setting
   在這個例子中,初始的token buckets中裝滿1000byte的token,如果在初始階段到達450字節的數據包,那麼需要從token bucket中流出450字節的tokens, 此時,token buckets中剩餘(1000-450)byte=550字節的token,token bucket中的token數量有富裕,將觸發comform-action行爲,450字節的數據包將被transmit。0.25秒之後,一個800字節的數據包到達,在0.25秒的時間間隔之內,token buckets中將注入(8000bps/8)*0.25s=250字節的token,此時,token buckets中共剩餘(550+250)byte=800字節的token , 由於到達的數據包的大小爲900字節,需要從token buckets中流出相應字節的token數,而此時,BC桶中的token只有800字節,數量不夠,但是BE桶中有1000字節,路由器會直接向BE桶借900字節的token,此時,BC桶中token數量不夠,但是BE桶中token數量足夠,將觸發exceed-action行爲,900字節的數據包將會被set-prec-transmit 1。900字節的數據包被處理完成之後,BC桶中剩餘800字節的tokens,BE桶中剩餘100字節的tokens。0.4秒之後又到達一個1000字節大小的數據包,在這0.4秒之內,BC桶中將被新注入(8000bps/8*0.4)=400bytes的token,BC桶現在800字節的token,BC桶最多隻能容納1000字節的token,故路由器先將BC桶注滿(增加200bytes的tokens,BC桶此時共1000字節的tokens),多餘的200字節的tokens將被注入進BE桶(增加200bytes的tokens,BE桶共300字節的tokens)。當把1000字節的數據包傳遞之後,BC桶中的剩餘的tokens數量剛好爲0,BE桶中的token數量保持不變(300字節),將會觸發conform-action行爲,此數據包將被transmit。0.2秒之後又到達一個400字節的數據包,在這0.2秒之內,BC桶中將新注入(8000bps/8*0.2)=200bytes的tokens,此時BC桶中總的tokens數量爲200bytes的tokens,BE桶中共有300bytes的tokens,需要傳遞的數據包爲400字節,BC桶、BE桶中的tokens數量都不夠,此時,將會觸發violate-action行爲,此數據包將被drop。
在深入理解了Traffic-Police的工作原理之後,接下來我們講述一個利用此技術緩解smurf***的實例。
smurf***的工作原理:

                         R1 (H11: 1.1.1.1)          |----H1(192.168.20.1)
                         |                                    |----H2(192.168.20.2)
               --------------------R2-----------|----H3(192.168.20.3)
                   |                                          |----H4(192.168.20.4)
                   |s0/0                                   |----H5(192.168.20.5)
                   R3(H33: 3.3.3.3)
                                         
路由器R1後方有一真實主機H11的IP地址爲1.1.1.1,路由器R3後方有一真實主機H33的IP地址爲3.3.3.3,R2後方的ethernet網絡內有多臺主機:H1,H2,H3,H4,H5...假設主機H11是一個***者,它發起一個到子網192.168.20.0的ICMP echo廣播報文,報文的源IP地址被僞造成3.3.3.3,目的地址爲192.168.20.255(子網廣播地址),當R2後方網段內的每臺主機收到此廣播報文後,都將作出相同的響應:返回單播報文,此報文的目的地址爲3.3.3.3(此時,R2後方的ethernet網絡被***者利用,成爲一個***的放大器)。這樣真實主機H33將收到許多ICMP echo-reply的洪泛,最終主機H33的系統資源將被耗盡。
理解了smurf***的工作原理之後,我們可以用traffic-police減緩smurf***。
下面的示例給出了路由器R3上的配置:
Router3(config)# access-list 101 permit icmp any any echo-reply
Router3(config)# class-map DOS
Router3(config-cmap)# match access-group 101
Router3(config-cmap)# exit
Router3(config)# policy-map DENY_DOS
Router3(config-pmap)# class DOS
Router3(config-pmap-c)# police 25600 8000 conform-action transmit exceed-action drop
Router3(config-pmap-c)# exit
Router3(config-pmap)# exit
Router3(config)# interface serial 0/0
Router3(config-if)# service-policy input DENY_DOS
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章