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

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

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

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