我试图模拟一个TCP SYN洪水来调整一个Web服务器(计划在AWS上部署)。
我设置了一个'目标'虚拟机,禁用iptables,并从本地“源”计算机(在OUTPUT链中过滤RST)运行hping(hping -p 80 -i u1000 -c 1000 -S destaddr)。
我期望在目标服务器的netstat输出中看到1000个SYN_RECVlogging,但是我只能看到最多256个(每个“源”计算机256个)。 我似乎在“目标”机器上遇到了一些限制,无法find它在哪里。 tcp_max_syn_backlog增加到8096。
任何想法设置这个限制?
好的,所以我问了webhostingtalk的同样的问题,虽然没有得到直接的答案,它有助于拓宽视野:)
基本上,我忽略了应用程序级别(networking服务器)的限制。 但是这位来自荷兰的这位绅士深入挖掘并在这里发表了他非常相关的发现:
http://blog.dubbelboer.com/2012/04/09/syn-cookies.html
基本上,networking服务器(我正在使用nginx)正在传递一个常数(listen backlog limit)来监听函数,它在这里被定义为:
https://github.com/git-mirror/nginx/…x_config.h#L97
所以内核的限制甚至还没有起作用。
Nginx的常量编译,所以我很快检查Apache – 幸运的是它是可configuration的:
http://httpd.apache.org/docs/2.0/mod…#listenbacklog
所以我把它设置为8K,并得到我所需要的(好,2包丢失:
资源:
hping -S -c 20000 -i u20 -p 80目标
目标:
netstat -nta | grep SYN_RECV | wc 8192 49152 729088
最后,我原来的256个连接限制实际上是由于我最初发送请求到端口22(和sshd明显有TCP连接积压设置为256)。