【轉】Linux下從TCP狀態機,三次握手判斷DDOS攻擊
從TCP狀態機判斷DDOS攻擊
一、TCP協議
TCP 協議是傳送層的核心協議,提供了可靠面向連接的協議,分為三次握手和四次斷開,在這個過程中TCP有個狀態機,記錄不同階段的狀態。
二、 TCP握手和斷開
這裏不著重介紹三次握手和四次斷開,只是附加一個圖解,這部分詳細內容大家自行腦補:參考鏈接:https://blog.csdn.net/qzcsu/article/details/72861891
2.1 握手協議:
2.2 斷開過程
三、TCP的狀態機
在協議建立和斷開過程,tcp協議一直要維護一個狀態,我們稱為tcp的狀態機。具體情況見下圖:
3.1 握手過程狀態
- CLOSED: 表示初始狀態。
- LISTEN: 偵聽端口狀態
- SYN_RCVD: 表示接受到了SYN報文,時間短暫
- SYN_SENT: 表示發送一個SYN的報文
- ESTABLISHED:表示連接已經建立了,是一個穩定狀態。
為了方便理解,簡單舉個例子,某飯店8點之前是未開業,關門狀態(closed 狀態),八點之後開門營業,等待客人關顧(listen狀態),客戶進店點菜(SYS_SEND),老板收到並確認(SYS_RCVD), 客戶說沒錯可以上菜,然後雙方進入(Established)狀態。
3.2 斷開過程狀態
- 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)
四、半打開和半關閉
DDOS網絡攻擊的方式很多,有應用層ddos也有網絡層的,本文只討論網絡層形成的ddos攻擊類型,上文我們講述狀態機,就非常好理解了,大量的半打開的鏈接,占用了大量的網絡帶寬,從而達到了DOS的目的。
4.1 半打開
發生在TCP3次握手中。
如果A向B發起TCP請求,B也按照正常情況進行響應了,但是A不進行第3次握手,這就是半連接
4.2半關閉
當一方關閉發送通道後,仍可接受另一方發送過來的數據,這樣的情況叫“半關閉”。(拆除TCP連接是:你關閉你的發送通道,我關閉我的發送通道)。
五、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
【轉】Linux下從TCP狀態機,三次握手判斷DDOS攻擊