我想对我的网络服务器上允许的并发连接数设置限制。我在 iptables (v1.4.19.1) 内核 3.14.4-200.fc20.x86_64 上尝试了以下规则,并为filter
表下的 INPUT 链设置了默认的 DROP 策略:
-A INPUT -p tcp --dport 80 -m connlimit --connlimit-upto 10 -j WEB
-A WEB -j ACCEPT
然后,我使用 apache benchmark 访问了具有 50 个并发连接的服务器:
$ ab -kc 50 -t 10 http://mysite.com/
但是,当我查看服务器访问日志时,我仍然可以看到几百行成功的请求。我期待该connlimit
规则生效并断开所有连接。我的规则或我对并发连接的解释有问题吗?
答案1
经过多次测试,我发现仅有默认的丢弃策略是不够的,
*filter
-F
-X
:INPUT DROP [0:0]
非常重要的是不要假设它会被遵循。只有connlimit
当你明确地在链的末尾添加删除规则:
-A INPUT -j DROP
现在,即使并发数低于指定限制,它也能正常工作:
$ ab -kc 7 -t 6 http://mysite.com/
This is ApacheBench, Version 2.3 <$Revision: 1554214 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking mysite.com (be patient)
apr_pollset_poll: The timeout specified has expired (70007)
重要的是要测试。但不确定您是否会将其归类为错误。