iptables 中的 connlimit 应该如何工作?

iptables 中的 connlimit 应该如何工作?

我想对我的网络服务器上允许的并发连接数设置限制。我在 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)

重要的是要测试。但不确定您是否会将其归类为错误。

相关内容