大家先回顧一下我之前發(fā)的“ACL中的established選項(xiàng)”中關(guān)于TCP的內(nèi)容。
之前說過,TCP建立連接的三次握手過程中,一方向另一方發(fā)送的第一個(gè)報(bào)文設(shè)置了SYN位,當(dāng)某臺(tái)設(shè)備接收到一個(gè)請求服務(wù)的初始報(bào)文時(shí),該設(shè)備響應(yīng)這個(gè)報(bào)文,發(fā)回一個(gè)設(shè)置了SYN和ACK位的報(bào)文,并等待源端來的ACK應(yīng)答。那么,如果發(fā)送方并不回復(fù)ACK,主機(jī)就會(huì)因?yàn)槌瑫r(shí)而結(jié)束連接。當(dāng)主機(jī)在等待這個(gè)連接超時(shí)的過程中,連接處于半開(Half-open)狀態(tài),半開連接消耗了主機(jī)的資源。在等待三次握手過程中耗盡主機(jī)資源就形成了SYN攻擊,尤其是將成千上萬的SYN發(fā)往某臺(tái)主機(jī),則該主機(jī)將很快崩潰掉。
這時(shí)我就需要在路由器上配置TCP攔截(TCP intercept)來防止這種攻擊了。
在TCP連接請求到達(dá)目標(biāo)主機(jī)之前,TCP攔截通過對其進(jìn)行攔截和驗(yàn)證來阻止這種攻擊,也就是說,路由器會(huì)代替主機(jī)進(jìn)行連接。
TCP攔截(TCP intercept)可以在兩種模式上工作:攔截和監(jiān)視。在攔截模式下(intercept mode),路由器攔截所有到達(dá)的T C P同步請求,并代表服務(wù)器建立與客戶機(jī)的連接,并代表客戶機(jī)建立與服務(wù)器的連接。如果兩個(gè)連接都成功地實(shí)現(xiàn),路由器就會(huì)將兩個(gè)連接進(jìn)行透明的合并。路由器有更為嚴(yán)格的超時(shí)限制,以防止其自身的資源被S Y N攻擊耗盡。在監(jiān)視模式下(watch mode),路由器被動(dòng)地觀察half-open連接的數(shù)目。如果超過了所配置的時(shí)間,路由器也會(huì)關(guān)閉連接。ACL則用來定義要進(jìn)行TCP攔截的源和目的地址。
基本配置命令:
ip tcp intercept mode {intercept/watch} '設(shè)置TCP攔截的工作模式,默認(rèn)是intercept。
ip tcp intercept list ACL編號 '調(diào)用ACL(擴(kuò)展的)用來定義要進(jìn)行TCP攔截的源和目的地址。
其他命令:
當(dāng)一個(gè)路由器因?yàn)槠渌x的門限值被超出而確認(rèn)服務(wù)器正遭受攻擊時(shí),路由器就主動(dòng)刪除連接,直到half-open的連接值降到小于門限值。默認(rèn)關(guān)閉的是最早的連接,除非使用了“ip tcp intercept drop-mode random”命令(隨機(jī)關(guān)閉半開連接)。當(dāng)所設(shè)置的門限值被超時(shí)時(shí),路由器進(jìn)行下面的動(dòng)作:
1) 每一個(gè)新的連接導(dǎo)致一個(gè)最早的(或隨機(jī)的)連接被刪除。
2) 初始的重傳超時(shí)時(shí)間被減少一半,直到0.5秒。
3) 如果處于監(jiān)視模式,則超時(shí)時(shí)間減半,直到15秒。
有兩個(gè)因素用來判斷路由器是否正在遭受攻擊。如果超過了兩個(gè)高門限值中的一個(gè),則表明路由器正遭受攻擊,直到門限值已經(jīng)降至兩個(gè)低門限值以下。下面顯示了有關(guān)的參數(shù)及其默認(rèn)值,并對其加以簡單描述。
1) ip tcp intercept max-incomplete high number 1100
在路由器開始刪除連接之前,能夠存在的half-open連接的最大數(shù)目。
2) ip tcp inercept max-incomplete low number 900
在路由器停止刪除half-open連接之前,能夠存在的最大half-open連接數(shù)目。
3) ip tcp intercept one-minute high number 1100
在路由器開始刪除連接之前,每分鐘內(nèi)能存在的最大half-open連接數(shù)目。
4) ip tcp intercept one-minute low number 900
在路由器停止刪除連接之前,每分鐘內(nèi)能存在的最小half-open連接數(shù)目。
half-open連接總數(shù)與每分鐘half-open連接的數(shù)量比率是相聯(lián)系的。任何一個(gè)最大值到達(dá),T C P攔截就被激活并且開始刪除half-open連接。一旦TCP攔截被激活,這兩個(gè)值都必須下降到TCP攔截的低設(shè)置值,以便停止刪除連接。
注意:
攔截模式下,路由器響應(yīng)到達(dá)的SYN請求,并代替服務(wù)器發(fā)送一個(gè)響應(yīng)初始源IP地址的SYN、ACK報(bào)文,然后等待客戶機(jī)的ACK。如果收到 ACK,再將原來的SYN報(bào)文發(fā)往服務(wù)器,路由器代替原來的客戶機(jī)與服務(wù)器一起完成三次握手過程。這種模式會(huì)增加路由器的內(nèi)存和CPU的額外開銷,并且增加了一些初始會(huì)話的延時(shí)。
在監(jiān)視模式下,路由器允許SYN請求直接到達(dá)服務(wù)器。
如果這個(gè)會(huì)話在30秒鐘內(nèi)(默認(rèn)值)沒有建立起來,路由器就給服務(wù)器發(fā)送一個(gè)RST,以清除這個(gè)連接。