私のWebサーバーで許可されている同時接続の数に制限を設定したいと思います。filter
テーブルの下のINPUTチェーンに設定されているデフォルトのDROPポリシーを使用して、iptables(v1.4.19.1)カーネル3.14.4-200.fc20.x86_64で次の規則を試しました。
-A INPUT -p tcp --dport 80 -m connlimit --connlimit-upto 10 -j WEB
-A WEB -j ACCEPT
その後、Apacheベンチマークを使用して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)
重要なのはテストすることです。しかし、これをバグとして分類するかどうかはわかりません。