【轉】Linux下從TCP狀態機,三次握手判斷DDOS攻擊

從TCP狀態機判斷DDOS攻擊html

1、TCP協議

TCP 協議是傳送層的核心協議,提供了可靠面向鏈接的協議,分爲三次握手和四次斷開,在這個過程當中TCP有個狀態機,記錄不一樣階段的狀態。java

2、 TCP握手和斷開

這裏不着重介紹三次握手和四次斷開,只是附加一個圖解,這部分詳細內容你們自行腦補:參考連接:https://blog.csdn.net/qzcsu/article/details/72861891 web

2.1 握手協議: 服務器

從TCP狀態機判斷DDOS攻擊

2.2 斷開過程 網絡

從TCP狀態機判斷DDOS攻擊

3、TCP的狀態機

在協議創建和斷開過程,tcp協議一直要維護一個狀態,咱們稱爲tcp的狀態機。具體狀況見下圖: tcp

從TCP狀態機判斷DDOS攻擊

3.1 握手過程狀態 .net

  • CLOSED: 表示初始狀態。
  • LISTEN: 偵聽端口狀態
  • SYN_RCVD: 表示接受到了SYN報文,時間短暫
  • SYN_SENT: 表示發送一個SYN的報文
  • ESTABLISHED:表示鏈接已經創建了,是一個穩定狀態。

爲了方便理解,簡單舉個例子,某飯店8點以前是未開業,關門狀態(closed 狀態),八點以後開門營業,等待客人關顧(listen狀態),客戶進店點菜(SYS_SEND),老闆收到並確認(SYS_RCVD), 客戶說沒錯能夠上菜,而後雙方進入(Established)狀態。 htm

3.2 斷開過程狀態 blog

  • FIN WAIT 1:本地的 TCP 實體發送一個 FIN 報文段並等待響應的確認
  • CLOSE WAIT:服務器收到一個 FIN 報文段,它確認客戶端的請求發回一個 ACK 報文段
  • FIN WAIT 2 :客戶端收到確認 ACK 報文段,就轉移到 FIN WAIT 2 狀態
  • CLOSED:服務器收到最後一個確認 ACK 報文段,其 TCP 實體便釋放該鏈接,並刪除鏈接記錄

形象理解爲:客人吃飯要離開,喊老闆結帳(fin wait1), 老闆說你等一下我找你錢(closeing),客戶收到檢查是否正確(fin wait2),確認無誤而後彼此斷開(closed)排序

4、半打開和半關閉

DDOS網絡攻擊的方式不少,有應用層ddos也有網絡層的,本文只討論網絡層造成的ddos攻擊類型,上文咱們講述狀態機,就很是好理解了,大量的半打開的連接,佔用了大量的網絡帶寬,從而達到了DOS的目的。

4.1 半打開

發生在TCP3次握手中。

若是A向B發起TCP請求,B也按照正常狀況進行響應了,可是A不進行第3次握手,這就是半鏈接

4.2半關閉

當一方關閉發送通道後,仍可接受另外一方發送過來的數據,這樣的狀況叫「半關閉」。(拆除TCP鏈接是:你關閉你的發送通道,我關閉個人發送通道)。

5、Netstat DOS檢測

netstat -na

顯示全部鏈接到服務器的活躍的網絡鏈接

netstat -an | grep :80 | sort

只顯示鏈接到80段口的活躍的網絡鏈接,80是http端口,這對於web服務器很是有用,而且對結果排序.對於你從許多的鏈接中找出單個發動洪水攻擊IP很是有用

netstat -n -p|grep SYN_REC | wc -l

這個命令對於在服務器上找出活躍的SYNC_REC很是有用,數量應該很低,最好少於5.

在dos攻擊和郵件炸彈,這個數字可能很是高.然而值一般依賴於系統,因此高的值可能平分給另外的服務器.

netstat -n -p | grep SYN_REC | sort -u

列出全部包含的IP地址而不單單是計數.

netstat -n -p | grep SYN_REC | awk '{print $5}' | awk -F: '{print $1}'

列出全部不一樣的IP地址節點發送SYN_REC的鏈接狀態

netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

使用netstat命令來計算每一個IP地址對服務器的鏈接數量

netstat -anp |grep 'tcp|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

列出使用tcp和udp鏈接到服務器的數目

netstat -ntu | grep ESTAB | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr

檢查ESTABLISHED鏈接而不是全部鏈接,這能夠每一個ip的鏈接數

netstat -plan|grep :80|awk {'print $5'}|cut -d: -f 1|sort|uniq -c|sort -nk 1

顯示而且列出鏈接到80端口IP地址和鏈接數.80被用來做爲HTTP

相關文章
相關標籤/搜索