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)

重要的是要測試。但不確定您是否會將其歸類為錯誤。

相關內容