私のウェブサイトはGoogleスパイダーのDoS攻撃を受けています。 Googleは私のサイトを索引付けすることを歓迎しますが、時々私のウェブサーバーが結果を生成できるよりも速く私のサイトのタグクラウドを照会し、私のウェブサーバーがリソースを使い果たします。
一般訪問者が影響を受けないようにWebサーバーへのアクセスをどのように制限しますか?
robots.txt はサイト全体のインデックスが作成されないため、オプションではありません。
iptables -m recent
一部のページには多くの画像やその他のデータファイルがあり、そのページに「最近の」トリガー(通常は画像とフィードをロードするRSSコレクタ)もあるため、これは面倒です。
iptables -m limit
同じ欠点があり、最も重要なことは、各IPソースアドレスを選択できないことです。
過度のサーバー負荷を引き起こす訪問者を制限する方法は?
VirtualBox VMのUbuntuサーバーでapache2を実行しています。
ベストアンサー1
試してみてくださいmod_qosApacheモジュール。現在のバージョンには、次の制御メカニズムがあります。
- 場所/リソース(URL)または仮想ホストへの同時要求の最大数。
- 1秒あたりの許可されるURLリクエストの最大数、または1秒あたりにダウンロードされる最大/最小キロバイトなどの帯域幅制限。
- 1秒あたりの要求イベント数を制限します(特別な要求条件)。また、Webサーバーへのアクセスが制限されていないか、制限が少ないVIP(Very重要な人)を「検出」することもできます。
- 許可されていない操作を拒否する一般的な要求行とヘッダーフィルター。
- 本文データの制限とフィルタリングを要求します(mod_parpが必要です)。
- 単一の IP ソース アドレスで許可される最大接続数や動的接続維持制御などの TCP 接続レベルの制限。
- サーバーに使用可能なTCP接続がない場合は、よく知られているIPアドレスが優先されます。
ドキュメントのこの例の条件付きルールを使用すると、正しい方向に進むことができます。
# set the conditional variable to spider if detecting a
# "slurp" or "googlebot" search engine:
BrowserMatch "slurp" QS_Cond=spider
BrowserMatch "googlebot" QS_Cond=spider
# limits the number of concurrent requests to two applications
# (/app/b and /app/c) to 300 but does not allow access by a "spider"
# if the number of concurrent requests exceeds the limit of 10:
QS_LocRequestLimitMatch "^(/app/b/|/app/c/).*$" 300
QS_CondLocRequestLimitMatch "^(/app/b/|/app/c/).*$" 10 spider