2014年2月13日 星期四

[Linux 文章收集] Linux 關於連接狀態 SYN_RECV之學習

來源自 這裡
Preface:
在查看服務器TCP 連接中,無論在PHP 、GW 等Server 中,會發現 SYN_RECV 這個連接信息,整理了相關的資料,學習下。首先可以通過下面這個命令來統計當前連接數:
# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

一個執行範例如下:


TCP 狀態說明:
SYN_RECV 表示正在等待處理的請求數;ESTABLISHED 表示正常數據傳輸狀態;TIME_WAIT 表示處理完畢,等待超時結束的請求數。
狀態:描述
CLOSED :無連接是活動的或正在進行
LISTEN :服務器在等待進入呼叫
SYN_RECV :一個連接請求已經到達,等待確認
SYN_SENT :應用已經開始,打開一個連接
ESTABLISHED :正常數據傳輸狀態
FIN_WAIT1 :應用說它已經完成
FIN_WAIT2 :另一邊已同意釋放
ITMED_WAIT :等待所有分組死掉
CLOSING :兩邊同時嘗試關閉
TIME_WAIT :另一邊已初始化一個釋放
LAST_ACK :等待所有分組死掉

iptables 應用範例:
另外很多人會用到TCP SYN Flood 透過網路底層對服務器Server 進行攻擊的,我可以用 Iptables 防範下:
防止同步包洪水(Sync Flood )
# iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT

# iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT

--limit 1/s 限制syn 並發數每秒1 次,可以根據自己的需要修改.

防止各種端口掃描
# iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT


Ping 洪水攻擊(Ping of Death )
# iptables -A FORWARD -p icmp --icmp-type echo-r​​equest -m limit --limit 1/s -j ACCEPT

同時,在初始化系統過程中,可以對服務器的數據連接做設置,下面簡單的設置下,如果有關於這方面的設置:
# vi m /etc/sysctl.conf
  1. net.ipv4.tcp_tw_reuse = 1  
  2. # 該文件表示是否允許重新應用處於TIME-WAIT 狀態的socket 用於新的TCP 連接。  
  3. net.ipv4.tcp_tw_recycle = 1  
  4. # recyse 是加速TIME-WAIT sockets 回收  
  5. net.ipv4.tcp_syncookies = 1  
  6. # 表示開啟SYN Cookies 。當出現SYN 等待隊列溢出時,啟用cookies 來處理,可防範少量SYN 攻擊,默認為0 ,表示關閉;  
  7. net.ipv4.tcp_synack_retries = 1   
  8. net.ipv4.tcp_keepalive_time = 1200  
  9. # 表示當keepalive 起用的時候,TCP 發送keepalive 消息的頻度。缺省是2 小時  
  10. net.ipv4.tcp_fin_timeout = 30  
  11. # fin_wait1 狀態是在發起端主動要求關閉tcp 連接,並且主動發送fin 以後,等待接收端回复ack 時候的狀態。  
  12. # 對於本端斷開的socket 連接,TCP 保持在FIN-WAIT-2 狀態的時間。對方可能會斷開連接或一直不結束連接或不可預料的進程死亡。  
  13. net.ipv4.ip_local_port_range = 1024 65000   
  14. net.ipv4.tcp_max_syn_backlog = 8192  
  15. # 該文件指定了,在接口接收數據包的速率比內核處理這些包的速率快時,允許送到隊列的數據包的最大數目。  
  16. net.ipv4.tcp_max_tw_buckets = 5000  
# sysctl -p // 使設置生效

Supplement:
Wiki: Transmission Control Protocol


沒有留言:

張貼留言

[Git 常見問題] error: The following untracked working tree files would be overwritten by merge

  Source From  Here 方案1: // x -----删除忽略文件已经对 git 来说不识别的文件 // d -----删除未被添加到 git 的路径中的文件 // f -----强制运行 #   git clean -d -fx 方案2: 今天在服务器上  gi...