sysctl -w  net.core.netdev_max_backlog=8000
sysctl -w  net.core.rmem_max=16777216
sysctl -w  net.core.wmem_max=16777216
sysctl -w  net.ipv4.conf.all.accept_redirects=0      
sysctl -w  net.ipv4.conf.all.send_redirects=0
sysctl -w  net.ipv4.icmp_echo_ignore_all=1
sysctl -w  net.ipv4.icmp_echo_ignore_broadcasts=1
#sysctl -w  net.ipv4.ip_conntrack_max=300000
sysctl -w  net.ipv4.ip_local_port_range="1024 65000"
#sysctl -w  net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=3800
sysctl -w  net.ipv4.tcp_fin_timeout=30              
sysctl -w  net.ipv4.tcp_keepalive_time=60              
sysctl -w  net.ipv4.tcp_max_syn_backlog=8192
sysctl -w  net.ipv4.tcp_max_tw_buckets=5000
sysctl -w  net.ipv4.tcp_rmem="4096 87380 16777216"
sysctl -w  net.ipv4.tcp_synack_retries=1     
sysctl -w  net.ipv4.tcp_syncookies=1       
sysctl -w  net.ipv4.tcp_syn_retries=1     
sysctl -w  net.ipv4.tcp_tw_recycle=1
sysctl -w  net.ipv4.tcp_tw_reuse=1
sysctl -w  net.ipv4.tcp_window_scaling=1


iptables -A INPUT -p tcp --syn -m limit --limit 30/s -j ACCEPT
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST SYN -m limit --limit 30/m --limit-burst 2 -j ACCEPT

iptables -A INPUT  -p tcp --syn -m connlimit --connlimit-above 15 -j DROP

iptables -N syn-flood
iptables -A INPUT -p tcp --syn -j syn-flood
iptables -I syn-flood -p tcp -m limit --limit 3/s --limit-burst 6 -j RETURN
iptables -A syn-flood -j REJECT

netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | more
netstat -an | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
netstat -an | grep ^tcp | awk '{print  $NF}' | sort | uniq -c | sort

netstat -atp | grep http | grep ESTABLISHED -c

SYN Flood利用TCP协议缺陷,发送了大量伪造的TCP连接请求,使得被***方资源耗尽,无法及时回应或处理正常的服务请求。一个正常的TCP连接需要三次握手,首先客户端发送一个包含SYN标志的数据包,其后服务器返回一个SYN/ACK的应答包,表示客户端的请求被接受,最后客户端再返回一个确认包ACK,这样才完成TCP连接。在服务器端发送应答包后,如果客户端不发出确认,服务器会等待到超时,期间这些半连接状态都保存在一个空间有限的缓存队列中;如果大量的SYN包发到服务器端后没有应答,就会使服务器端的TCP资源迅速耗尽,导致正常的连接不能进入,甚至会导致服务器的系统崩溃。
防火墙通常用于保护内部网络不受外部网络的非授权访问,它位于客户端和服务器之间,因此利用防火墙来阻止DoS***能有效地保护内部的服务器。针对SYN Flood,防火墙通常有三种防护方式:SYN网关、被动式SYN网关和SYN中继。
SYN网关 防火墙收到客户端的SYN包时,直接转发给服务器;防火墙收到服务器的SYN/ACK包后,一方面将SYN/ACK包转发给客户端,另一方面以客户端的名义给服务器回送一个ACK包,完成TCP的三次握手,让服务器端由半连接状态进入连接状态。当客户端真正的ACK包到达时,有数据则转发给服务器,否则丢弃该包。由于服务器能承受连接状态要比半连接状态高得多,所以这种方法能有效地减轻对服务器的***。
被动式SYN网关 设置防火墙的SYN请求超时参数,让它远小于服务器的超时期限。防火墙负责转发客户端发往服务器的SYN包,服务器发往客户端的SYN/ACK包、以及客户端发往服务器的ACK包。这样,如果客户端在防火墙计时器到期时还没发送ACK包,防火墙则往服务器发送RST包,以使服务器从队列中删去该半连接。由于防火墙的超时参数远小于服务器的超时期限,因此这样能有效防止SYN Flood***。
SYN中继防火墙在收到客户端的SYN包后,并不向服务器转发而是记录该状态信息然后主动给客户端回送SYN/ACK包,如果收到客户端的ACK包,表明是正常访问,由防火墙向服务器发送SYN包并完成三次握手。这样由防火墙做为代理来实现客户端和服务器端的连接,可以完全过滤不可用连接发往服务器。


CLOSED:无连接是活动的或正在进行
LISTEN:服务器在等待进入呼叫
SYN_RECV:一个连接请求已经到达,等待确认
SYN_SENT:应用已经开始,打开一个连接
ESTABLISHED:正常数据传输状态
FIN_WAIT1:应用说它已经完成
FIN_WAIT2:另一边已同意释放
ITMED_WAIT:等待所有分组死掉
CLOSING:两边同时尝试关闭
TIME_WAIT:另一边已初始化一个释放
LAST_ACK:等待所有分组死掉