iptablesのconnlimitはどのように機能するのですか?

iptablesのconnlimitはどのように機能するのですか?

私の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)

重要なのはテストすることです。しかし、これをバグとして分類するかどうかはわかりません。

おすすめ記事