原理:當TCP三次握手進行第一次握手時,客戶端向服務端發送SYN請求報文,第二次握手服務端會返回一個SYN+ACK的一個確認報文,syn-flood攻擊就發生在第三次握手,當客戶端不去回應服務端的SYN+ACK報文時,此時TCP是處於半開放狀態的,如果此時客戶端一直給服務端發送SYN請求報文,卻不去回應服務端發來的SYN+ACK報文,這將會占用服務端所有系統資源,使其不能接收其他任何請求。如下圖:
檢測攻擊:查看TCP連接狀態是否有異常連接狀態,
防御:
1)使用SYNCookie防火牆
syn cookie:當客戶端給服務端發送SYN報文時,服務端會返回一個SYN+ACK ,但是這個ACK是由源地址,端口源次序,目標地址,目標端口以及一個加密種子計算而得出的一個ACK,服務端發送完SYN+ACK確認報文時,就會釋放所有狀態,這樣就不用占用系統資源了,當客戶端發送ACK報文給服務端時,服務端會重新計算這個ACK,判斷它是不是上個SYN+ACK的返回包。
syn cookie防火牆:syncookie防火牆充當了一個中間人的角色,當客戶端發送syn請求時,syncookie防火牆就是服務端,給客戶端發送syn+ack確認報文,如果防火牆收到了syn+ack的返回包,它就會再次充當客戶端的角色,給服務端發送syn請求報文,建立三次握手。如果兩邊都成功了,防火牆就會轉發兩邊的數據,讓客戶端和服務端建立三次握手。
2)加固TCP/IP協議棧防范