web-dev-qa-db-ja.com

スクレイパーとボットを制限するために、IPごとの最大ページビューを制限するのに役立つツールはどれですか?

Google、Bing、その他の検索エンジンを除くすべてのコンテンツをスクレイパーが取得するのを防ぎたい。 Fail2banを使用して、IPからのヒットを1日あたり約1000に制限することを考えています。これはいいアイデアですか?もっと良い方法はありますか?

5
giorgio79

モジュールを使用してApache内でこれを行う方法は多数ありますが、IPテーブルを設定してジョブを実行することもできますが、個人的にはモジュールのみを使用します。

mod_security

私は個人的にこれを使用しましたが、うまく機能しています。リクエストを制限することについての良い記事を見つけることができます here

mod_evasive

IPアドレスとURIの内部動的ハッシュテーブルを作成し、次のいずれかから単一のIPアドレスを拒否することにより、検出が実行されます。

同じページを毎秒数回以上リクエストする毎秒同じ子で50を超える同時リクエストを作成する一時的にブラックリストに載っている間にリクエストを行う(ブロッキングリスト上)

ここにもう一つ:

mod_qos

Mod_qosモジュールの現在のリリースは、以下を管理する制御メカニズムを実装しています。

ロケーション/リソース(URL)または仮想ホストへの同時リクエストの最大数。 URLに対する1秒あたりの最大許容リクエスト数や1秒あたりのダウンロードされたキロバイトの最大/最小などの帯域幅の制限。 1秒あたりのリクエストイベントの数を制限します(特別なリクエスト条件)。また、制限なしまたは制限なしでWebサーバーにアクセスする可能性のある非常に重要な人物(VIP)を「検出」できます。不正な操作を拒否するための一般的な要求行とヘッダーフィルター。ボディデータの制限とフィルタリングを要求します(mod_parpが必要です)。 TCP接続レベルの制限、たとえば、単一のIPソースアドレスまたは動的なキープアライブ制御から許可される接続の最大数。サーバーがフリーTCP接続を使い果たした場合、既知のIPアドレスを優先します。

mod_dosevasive

クライアントのIPアドレスは、ハッシュテーブルの一時的なブラックリストで確認されます。 IPアドレスがリストされている場合、クライアントは403 Forbiddenでアクセスを拒否されます。

クライアントが現在ブラックリストに載っていない場合、クライアントのIPアドレスと要求されているUniversal Resource Identifier(URI)がキーにハッシュされます。 Mod_Dosevasiveは、リスナーのハッシュテーブルをチェックして、同じハッシュが存在するかどうかを確認します。一致する場合、一致したハッシュの総数とそれらが要求された時間枠を、Mod_Dosevasiveディレクティブによってhttpd.confファイルで指定されたしきい値と比較して評価します。

前のチェックで要求が拒否されない場合、クライアントのIPアドレスだけがキーにハッシュされます。次に、モジュールは上記と同じ方法でハッシュテーブルをチェックします。このチェックとの唯一の違いは、クライアントがチェックしているURIを考慮しないことです。クライアント要求番号が、指定された時間間隔ごとにサイト全体に設定されたしきい値を超えたかどうかを確認します。

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 127.0.0.1/32 -o eth1 -p tcp -m tcp --dport 80 -m recent --set --name ATACK --rsource -j ACCEPT
5
Simon Hayter

CDNサービスはサイトの前に配置され、既知のクローラーを除外できます。また、スパマーを除外し、世界中の場所で画像をキャッシュするため、サイトが高速になります。

クライアントのサイトで約1か月間CloudFlareを使用していますが、帯域幅の使用が減少し、トラフィックが増加しました。 CloudFlareは、scrapeshield https://www.cloudflare.com/apps/scrapeshield と呼ばれる無料アプリも提供していますが、スクレイピングはそのサイトにとって大きな問題ではないため、誰にも捕まりませんまだ

1
CodeMonkey

不要なホストとIPを制限する最も効率的な方法は次のとおりです。

  1. サーバーの外部でそれらをブロックして、負荷を減らします。
  2. 内部IPフィルタリング/ファイアウォールルールを使用して、Webサーバーアプリケーションの負荷を軽減します。
  3. Webサーバーを使用してそれらをブロックします。

1つ目は、専用のハードウェアまたはプロキシサーバーが必要です。

2つ目は、コントロールパネル(cPanel、Pleskなど)を介して、またはIPフィルタリング/ファイアウォールルールを作成して手動で行うことができます(他の回答で説明されています)。

3番目は、GUIを使用してIISで、モジュールを使用するApache(他の回答で説明)、またはApacheの構成で次のように実行できます。

# Block unwanted Host domains
RewriteEngine on
RewriteCond %{HTTP_REFERER} baddomain01\.com [NC,OR]
RewriteCond %{HTTP_REFERER} baddomain02\.com [NC]
RewriteRule .* - [F]

NAT(単一の発信IPアドレス)を使用する学校、大企業、または図書館を排除する可能性のある特定のIPアドレスまたはクラスを禁止しないため、後者は適切なオプションです。

頻繁にスクレイパーとボットのホストをWebサーバーのアクセスログとエラーログで見つけることができます。これは、統計アプリケーションを使用して簡単に実行できます。

0
dan

この特定の目的のために設計された「robotcop」と呼ばれるApacheモジュールがあります。

残念ながら、そのApacheモジュールのウェブサイト(www.robotcop.org)はサービスを停止しています。 robotcopモジュールの起動を発表するスラッシュドットの記事 です。

モジュールの(オープンソース-Apacheライセンス)ソースコードは、引き続きさまざまな場所から入手できます。

0

スクレーパーとボットを制限する別のアプローチは、ハニーポットを実装することです。ボットのみがロボットを見つけて、robots.txtを介してアクセスすることを制限できるページを作成します。このURLにヒットするボットはブラックリストに登録されます。

WPoison は、まさにそれを行うためのソースコードを提供するプロジェクトです。

0