netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
這條語句返回結果如下
TIME_WAIT 346 FIN_WAIT1 85 FIN_WAIT2 6 ESTABLISHED 1620 SYN_RECV 169 LAST_ACK 8
SYN_RECV表示正在等待處理的請求數;ESTABLISHED表示正常數據傳輸狀態;TIME_WAIT表示處理完畢,等待超時結束的請求數。
狀態:描述
CLOSED:無連接是活動的或正在進行
LISTEN:服務器在等待進入呼叫
SYN_RECV:一個連接請求已經到達,等待確認
SYN_SENT:應用已經開始,打開一個連接
ESTABLISHED:正常數據傳輸狀態
FIN_WAIT1:應用說它已經完成
FIN_WAIT2:另一邊已同意釋放
ITMED_WAIT:等待所有分組死掉
CLOSING:兩邊同時嘗試關閉
TIME_WAIT:另一邊已初始化一個釋放
LAST_ACK:等待所有分組死掉
另外很多人會用到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-request -m limit --limit 1/s -j ACCEPT
# add by geminis for syn crack net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_max_syn_backlog=2048 net.ipv4.tcp_synack_retries=1
sysctl -p
http://www.sphinxsearch.org/archives/10
Linux防止syn flood攻擊,屏蔽 SYN_RECV 的連接
2009年02月9日 — admin
今web服務器一直都有syn flood攻擊。查閱了Google后方得到一些有效資料
#####################################
抵御SYN SYN攻擊是利用TCP/IP協議3次握手的原理,發送大量的建立連接的網絡包,但不實際建立連接,最終導致被攻擊服務器的網絡隊列被占滿,無法被正常用戶訪問。
Linux內核提供了若干SYN相關的配置,用命令: sysctl -a | grep syn 看到:
net.ipv4.tcp_max_syn_backlog = 1024 net.ipv4.tcp_syncookies = 0
net.ipv4.tcp_synack_retries = 5 net.ipv4.tcp_syn_retries = 5
tcp_max_syn_backlog是SYN隊列的長度,tcp_syncookies是一個開關,是否打開SYN Cookie 功能,該功能可以防止部分SYN攻擊。tcp_synack_retries和tcp_syn_retries定義SYN 的重試次數。 加大SYN隊列長度可以容納更多等待連接的網絡連接數,打開SYN Cookie功能可以阻止部分 SYN攻擊,降低重試次數也有一定效果。
調整上述設置的方法是:
增加SYN隊列長度到2048:
sysctl -w net.ipv4.tcp_max_syn_backlog=2048
打開SYN COOKIE功能:
sysctl -w net.ipv4.tcp_syncookies=1
降低重試次數:
sysctl -w net.ipv4.tcp_synack_retries=3 sysctl -w net.ipv4.tcp_syn_retries=3
為了系統重啟動時保持上述配置,可將上述命令加入到/etc/rc.d/rc.local文件中。
防止同步包洪水(Sync Flood)
# iptables -A FORWARD -p tcp –syn -m limit –limit 1/s -j ACCEPT
也有人寫作
#/sbin/iptables -A INPUT -p tcp –syn -m limit –limit 1/s -j ACCEPT
–limit 1/s 限制syn並發數每秒1次,可以根據自己的需要修改
防止各種端口掃描
# /sbin/iptables -A FORWARD -p tcp –tcp-flags SYN,ACK,FIN,RST RST -m limit –limit 1/s -j ACCEPT
Ping洪水攻擊(Ping of Death)
#/sbin/ iptables -A FORWARD -p icmp –icmp-type echo-request -m limit –limit 1/s -j ACCEPT
屏蔽 SYN_RECV 的連接
#/sbin/iptables -A INPUT -p tcp -m tcp –tcp-flags SYN,RST,ACK SYN -m limit –limit 1/sec -j ACCEPT
禁止某IP訪問
iptables -I INPUT -s xxx.xxx.xxx.xx -j DROP
保存配置
#/etc/rc.d/init.d/iptables save
查看 iptables配置
/etc/init.d/iptables status
重啟iptables
/etc/init.d/iptables restart