1、查看连接状态
netstat -nat | awk '/^tcp/{++S[$NF]}END{for (a in S) print a,S[a]}'

SYN_RECV表示正在等待处理的请求数;ESTABLISHED表示正常数据传输状态;TIME_WAIT表示处理完毕,等待超时结束的请求数。

状态:描述

CLOSED:无连接是活动的或正在进行

LISTEN:服务器在等待进入呼叫

SYN_RECV:一个连接请求已经到达,等待确认

SYN_SENT:应用已经开始,打开一个连接

ESTABLISHED:正常数据传输状态

FIN_WAIT1:应用说它已经完成

FIN_WAIT2:另一边已同意释放

ITMED_WAIT:等待所有分组死掉

CLOSING:两边同时尝试关闭

TIME_WAIT:另一边已初始化一个释放

LAST_ACK:等待所有分组死掉


2,解决方法

TCP SYN Flood透过网路底层对服务器Server进行***的,我可以用Iptables防范下:

防止同步包洪水(Sync Flood

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

--limit 1/s 限制syn并发数每秒1次,可以根据自己的需要修改
防止各种端口扫描


linux目录 /proc/sys/net/ipv4下有关于内核的设置

tcp_tw_reuse该文件表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接。


tcp_tw_recyclerecyse是加速TIME-WAITsockets回收

tcp_tw_reusetcp_tw_recycle的修改,可能会出现.warning, got duplicate tcp linewarning, got BOGUS tcp line.上面这二个参数指的是存在这两个完全一样的TCP连接,这会发生在一个连接被迅速的断开并且重新连接的情况,而且使用的端口和地址相同。

但基本 上这样的事情不会发生,无论如何,使能上述设置会增加重现机会。这个提示不会有人和危害,而且也不会降低系统性能,目前正在进行工作


tcp_syncookies表示开启SYNCookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN***,默认为0,表示关闭;


tcp_synack_retries默认值是5
对于远端的连接请求SYN,内核会发送SYN ACK数据报,以确认收到上一个 SYN连接请求包。

这是所谓的三次握手(threeway handshake)机制的第二个步骤。这里决定内核在放弃连接之前所送出的 SYN+ACK 数目。不应该大于255默认值是5,对应于180秒左右时间。

对于syn***可以降低这个次数,减少等待时间。


tcp_max_syn_backlog该文件指定了,在接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。

对于syn***可以加大这个数目,拓宽内核队列,可以接受跟多的syn。