13,000 以上のクローラーが検知され、データベースのトラフィックが急増しているシナリオがあります。誰かが明らかに当社のフォーラムをスクレイピングしていますが、CloudFlare DNS を経由しているため、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 アドレスも確認できますが、ログについて具体的に何を指しているのかよくわかりません。ふむ。
ご記憶の通り、私はこの時点で帯域幅の消費を抑えるために、すべての設定を内部プライベート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からのトラフィックがどこから発生しているのか、どうしてもわかりません。