天天看點

TCP 半連接配接隊列和 SYN FLood 攻擊

半連接配接隊列

伺服器第一次收到用戶端的SYN之後,就會處于SYN_RCVD(同步已接收)狀态,此時雙方還沒有完全建立連接配接,伺服器會把此種狀态下請求連接配接放在一隊列裡,我們把這種隊列稱為半連接配接隊列。

SYN FLood 攻擊

客戶大量僞造 IP 發送 SYN 包,服務端回複的 ACK+SYN 去到了一個 【未知】的位址,勢必造成服務端大量的連結處于 SYN_RCVD 狀态,而服務端的半連結隊列大小也是有限的,如果半連結隊列滿了,就會導緻出現無法處理正常請求的情況。

這種利用TCP建立連接配接時3次握手的“漏洞”,通過原始套接字發送源位址虛假的SYN封包,使目标主機永遠無法完成3次握手,占滿了系統的協定棧隊列,資源得不到釋放,進而拒絕服務,是網際網路中最主要的DDOS攻擊形式之一。

如下圖所示:

TCP 半連接配接隊列和 SYN FLood 攻擊

抵禦 SYN Flood 攻擊

  1. 增大半連接配接隊列

不能隻增大tcp_max_syn_backlog,還需要一同增大somaconn和backlog,也就是增大全連接配接隊列

  1. 開啟tcp_syncookies功能

開啟tcp_syncookies就可以在不使用syn半連接配接隊列的情況下建立連接配接

syncookies在接收到用戶端的syn封包時,計算出一個值,放到syn+ack封包中發出。當用戶端傳回ack封包時,取出該值驗證,成功則建立連接配接,如下圖:

  1. 減少ack+syn封包的重傳次數

繼續閱讀