目前我的 iptable 如下,将每个 ip 的并发连接数限制为 10 个来自任何 http 客户端。但是,我尝试了模拟 http 测试,根本没有掉线。出了什么问题?
*筛选 :输入接受 [0:0] :转发接受 [0:0] :输出接受 [21:15123] -A 输入 -m 状态 --状态相关,已建立 -j 接受 -A 输入-p icmp -j 接受 -A 输入-i lo -j 接受 -A 输入 -p tcp -m 状态 --状态新 -m tcp --dport 22 -j 接受 -A 输入 -p tcp -m 状态 --状态新 -m tcp --dport 80 -j 接受 -A 输入 -j 拒绝 --拒绝 icmp 主机禁止 -A 输入 -p tcp -m tcp --dport 80 --tcp-flags FIN、SYN、RST、ACK SYN -m connlimit --connlimit-above 10 --connlimit-mask 32 -j REJECT --reject-with tcp-reset -A 转发 -j 拒绝 --拒绝与 icmp 主机禁止 犯罪
答案1
在我看来,这听起来是个坏主意。你只需要两三个浏览器来自同一个 IP(例如公司或家庭网关),加载普通页面和图像,你就会开始收到错误。错误不会太明显,而且往往会产生你不想处理的支持电话。
您要做的就是对请求进行排队,这样一次只有少量的工作进程或线程处于活动状态,这样您就不会耗尽内存。您的 Web 服务器软件(例如 apache 或 nginx)应该在适当的配置下为您完成此操作;如有必要,请就此问题提出另一个问题。
答案2
规则按顺序处理;在到达你的速率限制规则之前,规则 5 是“接受”。
iptables -nvL
将显示每条规则的计数器并突出显示问题。