linux – 模拟TCP SYN泛洪的问题

我正在尝试模拟TCP SYN泛洪来调整Web服务器(计划在AWS上部署).

我设置了一个’目标’虚拟机,禁用了iptables并从几个本地’源’机器运行hping(hping -p 80 -i u1000 -c 1000 -S destaddr)(过滤那些OUTPUT链中的RST).

我期待在目标服务器的netstat输出中看到1000条SYN_RECV记录,但我只看到256条最大值(每台“源”机器256条).我似乎在“目标”机器上达到了一些限制,无法找到它的位置. tcp_max_syn_backlog增加到8096.

知道这个限制的设定吗?

解决方法

好的,所以我在webhostingtalk上问了同样的问题,虽然没有得到直接答案,但它有助于扩大视野:)

基本上,我忽略了应用程序级别(webserver)限制.但这位来自荷兰的优秀绅士们深入挖掘并在此发布了他非常相关的调查结果:

http://blog.dubbelboer.com/2012/04/09/syn-cookies.html

基本上Web服务器(我使用的是nginx)是将一个常量(listen backlog limit)传递给listen函数,它在这里定义:

https://github.com/git-mirror/nginx/…x_config.h#L97

定义NGX_LISTEN_BACKLOG 511

所以内核限制甚至还没有发挥作用.

编译了Nginx常量,所以我快速检查了apache – 幸运的是它是可配置的:

http://httpd.apache.org/docs/2.0/mod…#listenbacklog

所以我把它设置为8k并得到我需要的东西(好吧,2包丢失:

资源:
hping -S -c 20000 -i u20 -p 80目标

目标:
netstat -nta | grep SYN_RECV |厕所
8192 49152 729088

最后,我原来的256个连接限制实际上是因为我最初向端口22发送了请求(而sshd显然将tcp连接backlog设置为256).

相关文章

linux常用进程通信方式包括管道(pipe)、有名管道(FIFO)、...
Linux性能观测工具按类别可分为系统级别和进程级别,系统级别...
本文详细介绍了curl命令基础和高级用法,包括跳过https的证书...
本文包含作者工作中常用到的一些命令,用于诊断网络、磁盘占满...
linux的平均负载表示运行态和就绪态及不可中断状态(正在io)的...
CPU上下文频繁切换会导致系统性能下降,切换分为进程切换、线...