可以通過下面這個命令來統計當前連接數
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
這條語句返回結果如下
1.TIME_WAIT 346
2.FIN_WAIT1 85
3.FIN_WAIT2 6
4.ESTABLISHED 1620
5.SYN_RECV 169
6.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)
1.iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
也有人寫作
1.iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
--limit 1/s 限制syn並發數每秒1次,可以根據自己的需要修改
防止各種端口掃描
1.iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
Ping洪水攻擊(Ping of Death)
1.iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
同時,在初始化系統過程中,可以對服務器的數據連接做設置,下面簡單的設置下,如果有關於這方面的設置,歡迎大家分享下,先謝過了...
vim /etc/sysctl.conf
net.ipv4.tcp_tw_reuse = 1
該文件表示是否允許重新應用處於TIME-WAIT狀態的socket用於新的TCP連接。
net.ipv4.tcp_tw_recycle = 1
recyse是加速TIME-WAIT sockets回收
對tcp_tw_reuse和tcp_tw_recycle的修改,可能會出現.warning, got duplicate tcp line warning, got BOGUS tcp line.上面這二個參數指的是存在這兩個完全一樣的TCP連接,這會發生在一個連接被迅速的斷開並且重新連接的情況,而且使用的端口和地址相同。但基本 上這樣的事情不會發生,無論如何,使能上述設置會增加重現機會。這個提示不會有人和危害,而且也不會降低系統性能,目前正在進行工作
net.ipv4.tcp_syncookies = 1
表示開啟SYN Cookies。當出現SYN等待隊列溢出時,啟用cookies來處理,可防范少量SYN攻擊,默認為0,表示關閉;
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_keepalive_time = 1200
表示當keepalive起用的時候,TCP發送keepalive消息的頻度。缺省是2小時
net.ipv4.tcp_fin_timeout = 30
fin_wait1狀態是在發起端主動要求關閉tcp連接,並且主動發送fin以後,等待接收端回復ack時候的狀態。對於本端斷開的socket連接,TCP保持在FIN-WAIT-2狀態的時間。對方可能會斷開連接或一直不結束連接或不可預料的進程死亡。
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_max_syn_backlog = 8192
該文件指定了,在接口接收數據包的速率比內核處理這些包的速率快時,允許送到隊列的數據包的最大數目。
net.ipv4.tcp_max_tw_buckets = 5000
使設置生效
sysctl -p