1.SYN flood 攻擊
SYN Flood(半開放攻擊)是一種拒絕服務(DDoS)攻擊,其目的是通過消耗所有可用的服務器資源使服務器不可用于合法流量。通過重復發送初始連接請求(SYN)數據包,攻擊者能夠壓倒目標服務器機器上的所有可用端口,導致目標設備根本不響應合法流量。
例如:客戶端偽造了大量的虛假的IP地址,不斷給我們服務器發SYN,而服務器回復ACK+SYN給大量虛假的IP地址,并且使得大量連接處于SYN_RCVD 狀態,就會把我們服務器的半連接隊列擠爆,從而無法響應那些合法的請求。
2. 如何應對 SYN Flood 攻擊
2.1 增加 SYN 連接數:tcp_max_syn_backlog
但是這個只能延緩一下半連接隊列爆滿的情況
2.2 減少SYN+ACK重試次數:tcp_synack_retries
重試次數由 /proc/sys/net/ipv4/tcp_synack_retries控制,默認情況下是 5 次,而我們在被攻擊的時候,調小這個值很有必要,可以減少重傳的次數,加快連接取消的速度
2.3 tcp_syncookies 機制
SYN Cookie是對TCP服務器端的三次握手做一些修改,專門用來防范SYN Flood攻擊的一種手段。它的原理是
- 在TCP服務器接收到TCP SYN包并返回TCP SYN + ACK包時,不分配一個專門的數據區,而是根據這個SYN包計算出一個cookie值。
- 這個cookie作為將要返回的SYN ACK包的初始序列號。
- 當客戶端返回一個ACK包時,根據包頭信息計算cookie,與返回的確認序列號(初始序列號 + 1)進行對比,如果相同,則是一個正常連接,然后,分配資源,建立連接。