Apache:IPごとのリクエスト/トラフィックの数を制限しますか?


12

1つのIPで1日あたり最大1GBのトラフィックを使用できるようにしたいと思います。その制限を超えると、そのIPからのすべてのリクエストは翌日までドロップされます。ただし、一定量の要求の後に接続が切断される、より単純なソリューションで十分です。

これを実行できるモジュールの種類は既にありますか?または、おそらくiptablesのようなものでこれを達成できますか?

ありがとう


Apacheバージョン?
ペール

2.2 limit--文字を--Filling

回答:


5

Apache 2.0の場合はbw_mod、Apache 1.3の場合はmod_bandwidthの純粋なApacheソリューションが必要な場合。サーバーの帯域幅を調整して、帯域幅の使用を制限できます。

mod_limitipconnもあります。これは、1人のユーザーがサーバーに大量に接続するのを防ぎます。mod_cbandは別のオプションですが、使用したことがありません。

Apacheのインストールを台無しにしたくない場合は、Apacheの前にsquidプロキシを配置できます。また、スロットルをより詳細に制御できます。

ただし、ほとんどの場合、問題はIPごとの帯域幅を制限したい場合のいくつかの大きなオブジェクトであり、ユーザーが大量のデータをプルしてブロックした場合に正気のエラーメッセージを表示します。その場合、PHPスクリプトを記述し、データベースの一時テーブルにアクセス情報を保存する方が簡単かもしれません。


2
提案をありがとう。私はすでにbw_modとmod_limitipconnを調べましたが、どちらも(私が知る限り)私が望むことをしません。mod_limitipconnは一度に1つの接続に制限するだけで、bw_modではIPごとのダウンロードレートのみを制限できます。一定量のデータ転送/リクエストの後にそれらをブロックしたい。私は実際に、サイト全体をクロールしてすべてをダウンロードする必要性を感じている特定のユーザーに対して防御しようとしています。squidプロキシを見てみましょう、面白いですね。それでも解決しない場合は、bw_modソースを変更することに頼ると思います。

robots.txtを設定して、クモを許可していませんか?
ペール

1
robots.txtの問題は、(RFC 3514と同様に)優れたロボットだけがそれを尊重することです。
スコットパック

確かに、あなたのサイトをスパイダーしている人の大半は標準ツールを使用していることがわかります。そして、wgetのように、それらの多くはrobots.txtを尊重しています。Robots.txtは、ユーザーにスパイダーを望まないことをユーザーに知らせる正しい方法でもあります。
ペール

1
私はそれを試しました。最初はrobots.txtで十分だったので、Wgetにrobots.txtを無視するように指示したため、「認識されていない」ユーザーエージェントをブロックすることに頼りましたが、ユーザーエージェントを偽装しました。彼らは多くのヘッドリクエストを行う傾向がありますが、正当なブラウザはそうではないので、ヘッドリクエストを制限するか、それを完全に無効にすることを検討するかもしれません(あまり望ましくありません)。

5

これは、この種の問題に対する私のiptablesソリューションです。--seconds --hitcount必要に応じて調整し、iptablesテーブルも調整します。

iptables -A FORWARD -m state --state NEW -m recent --rcheck --seconds 600 --hitcount 5 --name ATACK --rsource -j REJECT --reject-with icmp-port-unreachable
iptables -A FORWARD -d 192.168.0.113/32 -o eth1 -p tcp -m tcp --dport 80 -m recent --set --name ATACK --rsource -j ACCEPT

説明:

  1. iptablesソースIPが/ proc / net / ipt_recent / ATACKファイルに600秒間隔で5回以上リストされているかどうか、およびそれが新しい要求であるかどうかを確認します。そうである場合、拒否します。そうしないと

  2. iptables 要求の宛先がポート80であるかどうかを確認します。その場合、IPとタイムスタンプを/ proc / net / ipt_recent / ATACKに出力してパケットを転送します。

私のニーズに合わせてうまく機能しています。


3

fail2banのようなツールを見ましたか?少し手間がかかるかもしれませんが、特定のIPが許可されるリクエストの数を制限できます。ログを確認することで機能し、時間ごとに許可される違反の数に関するルールを設定します。一度それが終わると、ipchainsを使用してブロックするようなことができます。

これを使用して、メールサーバーに対するDDoS攻撃を非常にうまくブロックしました。ただし、かなりの量のプロセッサパワーを消費する可能性があります。


現在、これを自分で実装しようとしています。それが動作ホープ
ダークStar1

1

試すmod_dosevasivemod_security

mod_dosevasive 指定された時間枠で指定された数またはページがサイトにリクエストした後にIPを禁止するように構成できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.