DiscourseでCloudFlare経由でスクレイパー/ボットのIPアドレスを特定(およびブロック)する方法は?

13,000 以上のクローラーが検知され、データベースのトラフィックが急増しているシナリオがあります。誰かが明らかに当社のフォーラムをスクレイピングしていますが、CloudFlare DNS を経由しているため、IP を特定して対策を講じる方法がわかりません。

この問題に対処する方法について、ご意見をお聞かせください。

攻撃的なネットワーク行動を検知し、自動的にそのトラフィックを制限するか、一定期間無効化する自動レート制限ソリューションを構築したいと考えています。

yml 設定ファイルに Cloudflare のテンプレートは含まれていますか?

はい、これは /var/discourse/containers/app.yml にあります:

  - "templates/cloudflare.template.yml"

追記しますが、私は現在深刻な問題に直面しています。同じサイト内で別のデータベースサーバーを使用しているのですが、データベースへのアクセスが常に13〜20 Mbpsで推移しており、クローラー数が急増した際にさらに急上昇し、それからほぼ2週間も落ち着きません。サーバーコントロールパネルによると、この時期にトラフィックが異常なレベルまで急増し、その高いアクセスレベルから一向に低下していません。この状況が続けば、サーバーの帯域幅が枯渇する事態にまで至りかねません。

レート制限のテンプレートは含まれていますか?ログに正しいIPアドレス(CloudflareのIPアドレスではないもの)が表示されていますか?

app.yml にも以下が含まれています:

  - "templates/web.ratelimited.template.yml"

ユーザーの正しい IP アドレスも確認できますが、ログについて具体的に何を指しているのかよくわかりません。ふむ。

「いいね!」 1

ご記憶の通り、私はこの時点で帯域幅の消費を抑えるために、すべての設定を内部プライベートIPアドレスに変更しようと考えていました。少なくとも、高額な請求書が届くのを防ぐことができるからです。

ここで他にも奇妙なことに気づきました。データベースへの接続をパブリックIPからプライベートIPに変更し、月間の転送割り当てを迅速に消費しないようにしました。しかし、データベースサーバー側では、DiscourseのDockerサーバーからの接続がプライベートIPアドレス経由でのみ行われると予想していました。確かに、ローカルのプライベートIPからのトラフィックは確認できますが、依然としてパブリックIPからの異常な量のトラフィックが見られ、月間割り当てを急速に消費し続けています。

Discourse Dockerサーバー上で、データベースサーバーのパブリックIPアドレスとホスト名の両方を徹底的に探しましたが、どこにも見つかりません。アプリ内(./launcher enter app)に入り、env | grep DBを実行しても、ここで使用されているLANの正しいプライベートIPアドレスが表示されるだけです。ファイルシステム全体をgrepしても、期待されるような出現箇所は見当たりません。

DiscourseまたはDockerイメージが、なぜまだ間違ったIPアドレスにアクセスしているのか、何か心当たりはありますか?Discourseサーバー上で、このパブリックIPからのトラフィックがどこから発生しているのか、どうしてもわかりません。

「いいね!」 1