web-dev-qa-db-ja.com

Apache2でIPごとの同時接続を制限する

私は重いCPUパブリックWebサービスをホストしています。Apache2を構成して、IPアドレスごとに手元の場所への同時接続を1つだけ許可し、単一のクライアントがリソースを使いすぎないようにします。

これを行うためのきちんとしたApache2ソリューションはありますか?私はmod_bwを調べましたが、これはうまくいっていないようです(MaxConnectionsは、IPごとではなく、すべてのユーザーにのみ適用されます)。 Apache2-mod-limitipconnと呼ばれるモジュールもありますが、これにはプリコンパイルされたパッケージがなく、ウェブサイトが死んでいるため、より長く維持されていると思います。私はUbuntuに正式な依存関係として含めることができるものを好みます。

2
Jeroen

私の経験から言うと、 "IPごとに1つの接続"を制限するよりも少し複雑です(恐らく、常にそうではありませんね:-))。

ただし、「MinSpareServers、MaxSpareServers、StartServers」などの他の構成可能なパラメーターがありました(これらがまだ存在するかどうかはわかりませんが、Apache 2.0に含まれていたことは確かです)。

また、出力を圧縮すると、必要に応じて帯域幅のニーズを改善し、「mod_deflate」を使用して応答時間を最大75%高速化できる場合があります。

「mod_bandwidth」は、単一の接続を制限しようとするのではなく、いくつかの支援を提供する可能性があり、おそらく、圧縮を調べた後に下がるルートでしょう。

または、Cを記述できる場合は、IPごとの接続をカウントするモジュールを自分で作成できます。

IPに単一の接続が提供されたときに何が起こるかは、注意する必要があります。通常、それはかなりの光景ではないと言ってみましょう! 「サーバービジー」ページなどにドロップすることもできますが、サーバーを最適化する道をたどるので、面倒な訪問者よりも良いでしょう。

0
Jonathan Ross

Apacheモジュールについてはわかりませんが、iptablesを使用できます。これがconnlimitモジュールの使い方です: http://www.cyberciti.biz/faq/iptables-connection-limits-howto/

あなたの状況では、次のようなものがうまくいきます:

/sbin/iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 -j REJECT --reject-with tcp-reset

ただし、他の質問で述べたように、注意してください。このルールは、NATを使用し、多数のユーザーに対して単一のIPアドレスを共有するISPや組織などの正当なロボット(Googleクローラーなど)をブロックする可能性があります。

7
rvs

Mod_qos httpdモジュールを使用できます。

QS_SrvMaxConnPerIP<number>[<connections>]

このサーバー(仮想ホスト)のソースIPアドレスごとの最大接続数を定義します。 「connections」引数は、この制限を有効にするサーバー(すべての仮想ホスト)のビジー接続の数を定義します。デフォルトは0です(つまり、サーバーがアイドル状態であっても、制限は常に有効です)。

詳細は http://mod-qos.sourceforge.net にあります。

例:

LoadModule qos_module path_to_module/mod_qos.so
<IfModule mod_qos.c>
        # max connection per IP is
        QS_SrvMaxConnPerIP 15 
</IfModule>

<VirtualHost *:80>
...
</VirtualHost>
3

私はちょうど反対の必要性を持っていました-Apache2はIPごとに一度に1つのページのみを提供していました。時間がかかる場合、別のタブでの別のページの読み込みは、リクエストしてからそのサーバーへのothersが完了するまで読み込まれません。

私はそれがセッションに関連していることを知っていて、完全な答え here および here を見つけました。

2
Louy

IPアドレスごとに1つの接続は機能しません。 Webブラウザーは、1つの接続を使用してWebページをダウンロードし、次に10以上の同時接続を使用してすべての画像、CSS、javacriptsなどを取得します。そのため、IPで制限すると、ユーザーはメインページを取得します。画像とそれがすべてです。

IPによる制限が機能する唯一の使用例は、ダウンロードアクセラレータを使用したくない専用のダウンロードサーバーがある場合です。別名、RapidShare。

ウェブサイトの悪用者があなたのサービスをどのように悪用しているかを調査し、それらを標的にする必要があります。全員を制限すると、誰もが傷つきます。

トラフィックが多すぎる場合は、サイトを最適化するか、より多くの/より高速なハードウェアでCPUサイクルを追加する必要があります。

1
Porch