DoS防范:路由器CAR限速策略
DoS對于網站而言是最可怕的威脅之一。DoS是目前黑客廣泛使用的一種手段,它通過獨占網絡資源、使其他主機不能進行正常訪問,從而導致網絡癱瘓,我們可以通過在接入路由器上采用CAR限速策略來達到抵御的目的。
DoS是DenialofService的簡稱,即拒絕服務,造成DoS的行為被稱為DoS,其目的是使計算機或網絡無法提供正常的服務。DoS網絡的一個重要特征是網絡中會著大量帶有非法源地址的ICMP包,我們可以通過在路由器上對ICMP包配置CAR來設置速率上限的方法來網絡。
CAR工作機制
CAR是CommittedAccessRate的簡寫,意思是:承諾訪問速率,CAR主要有兩個作用:對一個端口或子端口(Subintece)的進出流量速率按某個標準上限進行;對流量進行分類,劃分出不同的QoS優先級。CAR只能對IP包起作用,對非IP流量不能進行,另外CAR只能在支持CEF交換(CiscoExpressForward)的路由器或交換機上使用。
要對流量進行控制我們首先要做的是對數據包分類識別(PacketClassification),然后再對其進行流量控制(AccessRateLimiting),CAR就是兩者的結合。其工作流程如圖1所示。

首先我們要定義感興趣的流量,所謂感興趣的流量就是對其進行流量控制的數據包類型??梢赃x擇以下幾種不同的方式來進行流量識別:
(1)基于IP前綴,此種方式是通過rate-limitaccesslist來定義的。
(2)QoS分組。
(3)IPaccesslist,可通過standard或extendedaccesslist來定義。
采用上述方義了感興趣的流量后,進行第二步的流量(TrafficLimitation)。CAR采用一種名為tokenbucket的機制來進行流量限制(如圖2所示)。

限流器使用tokenbucket的算法流量flow的帶寬利用率。在每個流入的幀到達的時候,就把它們的長度加到tokenbucket(記號桶)上。每隔0.25毫秒(四千分之一秒),就從tokenbucket減去CIR(CommittedInformationRate,承諾信息速率)或者說是平均限流速率的值。這樣做的思是,保持tokenbucket等于0,從而穩定數據速率。
限流器允許流量速率突發超出平均速率一定的量。tokenbucket增長到突發值(以字節為單位)水平之間的質量是允許的有效突發量,這也叫做in-profiletraffic(限內流量)。當tokenbucket的大小超過了突發值,限流器就認為流量“過大”了。這時我們可以定義一個PIR(PeakInformationRate,峰值信息速率)。
當流量超出最大突發值達到PIR的時候,限流器就認為流量違規,這類流量也叫做out-of-profiletraffic(限外流量)。所以當實際的流量通過限流器(tokenbucket)后,可以看到會有兩種情況發生:
(1)實際流量小于或等于用戶希望速率,幀離開bucket的實際速率將和其來到的速率一樣,bucket內可以看作是空的。流量不會超過用戶的希望值。
(2)實際流量大于用戶希望速率。幀進入bucket的速率比其離開bucket的速率快,這樣在一段時間內,幀將填滿該bucket,繼續到來的幀將溢出(excess)bucket,則CAR采取相應的動作(一般是丟棄或將其IP前綴改變以改變該token的優先級)。這樣就了數據流量速率在用戶定義的希望值內。
CAR的配置
我們通常在網絡的邊緣路由器上配置CAR。配置CAR主要包括以下幾部分:
1.確定“感興趣”的流量類型也就是我們需要監視的流量,主要通過下列方式確定:
(1)基于IP前綴,此種方式是通過rate-limitaccesslist來定義的。
(2)基于QoS分組。
(3)基于MAC地址。
(4)基于standard或extended的IPaccesslist。
2.在相應的端口配置rate-limit:
一般的寫法是:
- interfaceX
- rate-limit{inputoutput}[access-groupnumber]bpsburst-normalburst-maxconform-
- actionactionexceed-actionaction
上述命令的含義是:
interface:用戶希望進行流量控制的端口,可以是Ethernet也可以是serial口,但是不同類型的interface在下面的input、output上選擇有所不同。
Inputoutput:確定需要限制輸入或輸出的流量。如果在以太網端口配置,則該流量為output;如果在serial端口配置,則該流量為input。
access-groupnumber:number是前面用accesslist定義流量的accesslist號碼。
bps:用戶希望該流量的速率上限,單位是bps。
burst-normalburst-max:這個是指tokenbucket的大小,一般采用8000、16000、32000這些值,視bps值的大小而定。
conform-action:在速率限制以下的流量的處理策略。
exceed-action:超過速率限制的流量的處理策略。
action:處理策略,包括以下幾種:
1.transmit:傳輸。
2.drop:丟棄。
3.setprecedenceandtransmit:修改IP前綴然后傳輸。
4.setQoSgroupandtransmit:將該流量劃入一個QoSgroup內傳輸。
5.continue:不動作,看下一條rate-limit命令中有無流量匹配和處理策略,如無,則transmit。
6.setprecedenceandcontinue:修改IP前綴然后continue。
7.setQoSgroupandcontinue:劃入QoSgroup然后continue。
CAR具體應用
CAR限制某種流量的速率之外,還可以用來抵擋DoS型攻擊,諸如Smurf攻擊使得網絡上充斥著大量帶有非法源地址的ICMP,占用網絡的資源。我們可以通過在路由器上對ICMP包通過配置CAR來設置速率上限的方法來保護網絡(如圖3所示)。

客戶端邊界路由器上的配置:
- interfaces0rate-limitinputaccess-group20030000008000080000
- conform-actiontransmitexceed-actiondrop
這里我們把icmp包的流量定義在3Mbps,tokenbucket的大小為8000字節。
access-list200permiticmpanyanyecho-reply
這樣一旦受到Smurf攻擊時,在一定程度上我們可以限制ICMP包的轉發速率和大小,減少對網絡和主機造成的破壞。
CAR限速策略要想有效地被使用,我們需要弄清楚DoS攻擊的原理,這樣才能針對DoS攻擊的不同類型采取相應的防范措施。