SYN Flood應如何應對

1 什麼是SYN Flood攻擊

  在TCP三次握手時,服務器接收客戶端的SYN請求,操作系統將爲該請求分配一個TCP(Transmission Control Block),服務器返回一個SYN/ACK請求,並將處於SYN_RCVD狀態(半開連接狀態)。

  從以上過程可以看到,如果惡意的向某個服務器端口發送大量的SYN包,則可以使服務器打開大量的半開連接,分配TCB,從而消耗大量的服務器資源,同時也使得正常的連接請求無法被相應。而攻擊發起方的資源消耗相比較可忽略不計。

  SYN Flood是當前最流行的DoS(拒絕服務攻擊)與DDoS(分佈式拒絕服務攻擊)的方式之一。

2 怎樣發現自己處於被攻擊狀態

  (1)服務端無法提供正常的TCP服務。連接請求被拒絕或超時;

  (2)通過 netstat -an 命令檢查系統,發現有大量的SYN_RECV連接狀態。  

3 防禦措施

  (1)使用TCP Wrapper,服務端只處理有限來源IP的TCP連接請求,其它未指定來源的連接請求一概拒絕。

  (2)縮短SYN Timeout時間,由於SYN Flood攻擊的效果取決於服務器上保持的SYN半連接數,這個值=SYN攻擊的頻度 x  SYN Timeout,所以通過縮短從接收到SYN報文到確定這個報文無效並丟棄改連接的時間,例如設置爲20秒以下(過低的SYN Timeout設置可能會影響客戶的正常訪問),可以成倍的降低服務器的負荷。

  (3)設置SYN Cookie,就是給每一個請求連接的IP地址分配一個Cookie,如果短時間內連續受到某個IP的重複SYN報文,就認定是受到了攻擊,以後從這個IP地址來的包會被一概丟棄。

  (4)使用SYN Proxy防火牆

      Syn Cache技術和Syn Cookie技術總的來說是一種主機保護技術,需要系統的TCP/IP協議棧的支持,而目前並非所有的操作系統支持這些技術。因此很多防火牆中都提供一種 SYN代理的功能,其主要原理是對試圖穿越的SYN請求進行驗證後才放行,下圖描述了這種過程:

 

      從上圖(左圖)中可以看出,防火牆在確認了連接的有效性後,才向內部的服務器(Listener)發起SYN請求,在右圖中,所有的無效連接均無法到達內 部的服務器。而防火牆採用的驗證連接有效性的方法則可以是Syn Cookie或Syn Flood等其他技術。
採用這種方式進行防範需要注意的一點就是防火牆需要對整個有效連接的過程發生的數據包進行代理,如下圖所示:

 

      因爲防火牆代替發出的SYN ACK包中使用的序列號爲c,而服務器真正的迴應包中序列號爲c’,這其中有一個差值|c-c’|,在每個相關數據報文經過防火牆的時候進行序列號的修改。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章