2017-12-12 20 views
0

コンテキストを設定するには、多数のクライアントからの接続を処理するレガシーサーバがあります。接続はtcpであり、バイナリプロトコルを使用します。最近、クライアントの数が増えるにつれて、サーバーは特にサーバーが再起動するようになった場合に発生するすべての接続を処理できません。このような場合、サーバーはCLOSE_WAITで接続が失われた状態で不整合な状態になります。iptablesレート制限接続要求

クライアントの接続要求がずれている場合、サーバーは最終的に負荷を受け取ります。ドッカーでクライアントをシミュレートすることでこれを検証しました。

サーバに速度制限が組み込まれていないため、iptablesで速度制限機能を使用して着信接続要求をずらすことができるかどうかを確認することにしました。接続は同じipまたは異なるipから始まることができます。

レート制限は、確立された接続に影響を与えるべきではなく、より新しいもの(3方向ハンドシェイク)にのみ影響します。クライアントはリトライロジックを持っているので、最終的に来て再接続します。したがって、同じソースIPからのすべての接続が最終的に確立された接続を妨げることなく接続する必要があるため、ipによるレート制限をしたくありません。

これは私が使用しているiptablesのルールです。これは正しい方法ですか?

iptables -A INPUT -i eth0 -p tcp --dport 9000 -m state --state NEW,ESTABLISHED -m recent --set -j ACCEPT 

    iptables -A INPUT -i eth0 -p tcp --dport 9000 -m state --state NEW -m recent --update --seconds 600 --hitcount 11 -j REJECT --reject-with tcp-reset 

私はiptablesに精通しておらず、現在Ubuntu 14.04でufwラッパーを使用しています。上記の考えは、このリンクhttps://www.cyberciti.biz/tips/howto-limit-linux-syn-attacks.htmlから供給されました。

SYNフラッドを防ぎますが、最終的には遅くなり、すべてのクライアントが接続を確立できるようになります。

答えて

0

長年の試行錯誤の末、このことが分かりました。解決策は、iptables制限モジュールを使用して、新しい着信接続の接続を制限することです。 TCP -p /etc/ufw/before.rulesに

-A UFW-前に入力を次のチェーンを追加終わっ

9000 --dport -m状態 をACCEPT -j ESTABLISHED、RELATEDを--state -A ufw-before-input -p tcp --dport 9000 -m state --state NEW -m limit --limit 4/min --limit-burst 4 -j ACCEPT -A ufw-before-input -p tcp --dport 9000

参照