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