# SYN\_RECV的奇怪連線

SYN攻擊是最常見又最容易被利用的一種攻擊手法。還記得2000年YAHOO網站遭受的攻擊事例，當時黑客利用的就是簡單而有效的SYN攻擊，有些網絡蠕蟲病毒配合SYN攻擊DDOS的破壞。

TCP握手協議在TCP/IP協議中，TCP協議提供可靠的連接服務，採用三次握手建立一個連接。 第一次握手：建立連接時，客戶端發送syn包(syn=j)到服務器，並進入SYN\_SEND狀態，等待服務器確認； 第二次握手：服務器收到syn包，必須確認客戶的SYN（ack= j+1），同時自己也發送一個SYN包（syn=k），即SYN+ACK包，此時服務器進入SYN\_RECV狀態； 第三次握手：客戶端收到服務器的SYN＋ACK包，向服務器發送確認包ACK(ack=k+1)，此包發送完畢，客戶端和服務器進入ESTABLISHED狀態，完成三次握手。

SYN\_RECV 表示正在等待處理的請求數；ESTABLISHED 表示正常數據傳輸狀態；TIME\_WAIT 表示處理完畢，等待超時結束的請求數。

SYN\_RECV是指,服務端被動開啟後,接收到了客戶端的SYN並且傳送了ACK時的狀態。再進一步接收到客戶端的ACK就進入ESTABLISHED狀態。

TCP SYN Flood是一種常見，而且有效的遠端(遠程)拒絕服務(Denial of Service)攻擊方式，它透過一定的操作破壞TCP三次握手建立正常連線，佔用並耗費系統資源，使得提供TCP服務的主機系統無法正常工作。

tcp\_synack\_retries默認為5，表示重發5次，每次等待30\~40秒，即“半連接”默認hold住大約180秒。

```
tcp6       0      0 120.115.2.158:80        45.56.69.15:35842       SYN_RECV    -                   
tcp6       0      0 120.115.2.158:80        45.56.69.15:49813       SYN_RECV    -                   
tcp6       0      0 120.115.2.158:80        149.255.109.168:44657   SYN_RECV    -                   
tcp6       0      0 120.115.2.158:80        149.248.55.130:14794    SYN_RECV    -                   
tcp6       0      0 120.115.2.158:80        149.248.55.130:18994    SYN_RECV    -  
```

被攻擊了半連接=>hold住180秒，服務器遭受到大量的大量SYN\_RECV，80port佔死，網站打不開

### 最簡易處理方式

echo 1 > /proc/sys/net/ipv4/tcp\_synack\_retries

```
cat /proc/sys/net/ipv4/tcp_max_syn_backlog
256

```

### firewall處理並log：

```
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

iptables -A INPUT -f -j DROP

iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -N LOGGING
iptables -A INPUT -j LOGGING
iptables -A LOGGING -p tcp --syn -m limit --limit 1/s -j LOG --log-prefix "SYN_RECV: " --log-level 4
iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
echo 2048 > /proc/sys/net/ipv4/tcp_max_syn_backlog
echo 1 > /proc/sys/net/ipv4/tcp_synack_retries
echo 1 > /proc/sys/net/ipv4/tcp_syn_retries
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

```

根據log可以找到有問題的ip

```
cat /var/log/syslog | sed 's/ /\n/g' | grep "SRC=" | sort | uniq -c | sort -g | tail -100
      1 SRC=193.169.253.86
      1 SRC=45.143.221.27
      1 SRC=68.183.216.220
      1 SRC=92.63.194.148
      4 SRC=120.115.2.240
      5 SRC=163.26.120.93
     10 SRC=140.164.9.4
     15 SRC=120.115.3.107
     99 SRC=208.79.240.3
    151 SRC=120.115.2.251
    162 SRC=37.97.242.72

```

&#x20;

```
當一個IP受到SYN_FLOOD攻擊時，因為SYN_RECV的上限是256，所以過長的隊列讓Virtual Host變得不穩定。
所以/proc/sys/net/ipv4/tcp_max_syn_backlog設定為2048
```

<div align="left"><img src="/files/-M0RXvaCZ3mjTAgJIaIY" alt=""></div>

經由log紀錄，此段C class的網段（美國ip）須封鎖

TCP洪水攻擊還沒完美解決方案


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://kawsing.gitbook.io/opensystem/andoid-shou-ji/untitled-4/synrecv-de-qi-guai-lian-xian.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
