1

Heroku + CloudFlare でホストされている Rails アプリがあります。問題は、パブリック IP が同じままであっても、request.remote_ip によって報告される IP が時々変更されることです。

Heroku、CloudFlare、またはその両方でしょうか?

4

2 に答える 2

2

ヘッダーを使用する必要がありますx-forwarded-for。Heroku と CloudFlare の両方がこれを設定する必要があります。ドキュメント:

于 2013-07-10T05:07:44.793 に答える
2

Cloudflare がリバース プロキシとして動作している場合、この HTTP ヘッダーを設定します: CF-Connecting-IP と、クライアントの IP を X-Forwarded-For ヘッダーに追加します。

From: https://support.cloudflare.com/hc/en-us/articles/200170986-How-does-CloudFlare-handle-HTTP-Request-headers-

x-forwarded-for を使用/依存することは、非常に簡単にスプーフィングされる可能性があるため、良い考えではないことに注意してください。ただし、x-forwarded-for の最後の値は、clpoudflare がそこに貼り付ける IP である必要があります。ここでリバース プロキシとして cloudflare を使用していて、cloudflare がそのサーバーからオリジン サーバーに直接 http 要求を送信すると仮定しています。

Cloudflareと会話しました。彼らは、(オリジンサーバーへの)リクエストがプロキシサーバーの1つ(Cloudflareの目的)から来るときに、CF-Connecting-IPヘッダーが設定されることを保証します。彼らがこのヘッダーに入れる実際の値は、元のリクエスターからの TCP パケットから来ていると思います。したがって、これは、cloudflare を使用する場合にリクエスタの IP を取得する最も正確な方法です (Heroku をオリジン サーバーとして使用するかどうかに関係なく)。

Cloudflares プロキシ サーバーの IP 値は、 https ://www.cloudflare.com/ips で確認できます。

より明確にするために(Cloudflareから):値は、ユーザーが接続するアドレスから取得されます。これは、フロントエンドのスプーフィングが困難になるTCPハンドシェイクであるためです. とはいえ、誰かがオリジンに直接接続し、自分でヘッダーを挿入した (ハッシュ化も暗号化もされていない) 場合は、なりすましが可能です。

于 2014-03-26T01:17:06.580 に答える