
プロキシは、あるシステムから別のシステムへリクエストを転送することを前提に動作します。通常、負荷分散(スケーラビリティ)、データ漏えい防止(セキュリティ)、圧縮(パフォーマンス)など、仲介するからこその付加価値を提供します。
つまり、クライアントから送信されたリクエストは、それ以外の変更を加えられることなく、宛先に転送されます。
ここで問題が生じる可能性があります。現在、プロキシ経由で配信されるアプリの半数以上がX-Forwarded-Forを使用しています。実際に稼働しているアプリの56%が使用しているため、非常に重要なデータです。X-Forwarded-Forは、クライアントの元のIPアドレスを転送し、転送先のアプリがそのアドレスを認識できるようにするカスタムHTTPヘッダーです。これがなければ、アプリにはプロキシのIPアドレスしか見えず、一部のアプリで問題が発生します。
これは、多くのアプリケーションが、不正防止やアクセス許可のためにクライアントの実際のIPアドレスを把握する必要があるからです。最近、普段とは別のデバイスから銀行口座、Gmail、Xboxアカウント(ほら、Minecraftがあるところです)にログインした際、セキュリティ警告が表示されたことがあるかもしれません。ログイン元の情報も追跡されており、その目的の1つが不正行為や不正利用の試みを検出することだからです。
一部のシステムでは、実際のIPアドレスがアクセスの許可や拒否に使用されるほか、物理的な位置を推定する手段としても利用されます。そのため、警告メールには「ブルガリアからログインしたのはご本人ですか?」といった文言がよく記載されています。
一部のシステムでは、アクセス制御の適用にもX-Forwarded-Forを使用しています。たとえばWordPressでは、.htaccessファイルを使用し、IPアドレスに基づいてアクセスを許可リストに登録します。最善の解決策とは言えませんが、一般的に使われている方法です。少なくとも、アプリの不正使用を防ぐために一定の保護を提供しようとしている点は評価できます。
それが適切な方法かどうかにかかわらず、認証または認可の仕組みの一部としてX-Forwarded-Forを使用するのであれば、それが実際に本当のクライアントIPアドレスであることを可能な限り確認すべきです。これはセキュリティ全体を構成する要素として比較的よく使用されており、企業の利益だけでなく利用者も保護します。
しかし、そのヘッダーでクライアントが送信する内容を無条件に受け入れていると、第三者による値の偽装を許し、不正アクセスを防止するためのセキュリティメカニズムを回避される可能性があります。結局のところ、数行のコードを書くか、HTTPヘッダーを簡単に操作できる数多くのChromeプラグインのいずれかを利用すれば、ほぼ何でも思いどおりに偽装できます。
取得しているのが実際のIPアドレスであることを確認する方法の1つは、ユーザー入力を信頼しないことです。そう、ここでもセキュリティルール・ゼロが登場します。ユーザー入力を決して信頼してはいけません。HTTPヘッダーは、そう見えるかどうかにかかわらず、ユーザー入力です。
すでにプロキシがあるなら問題ありません。ない場合は、導入を推奨します。プロキシを使用すれば、適切な値を抽出してX-Forwarded-Forに設定し、なりすましを阻止できます。
要するに、プロキシがリクエストのIPパケット内に隠れている実際のIPアドレスを特定できるようにする必要があります。設定やポリシーで対応できるプロキシもあれば、プログラムによる工夫が必要なものもあります。どのような方法で取得するにせよ、その値こそがX-Forwarded-For HTTPヘッダーに設定すべき値です。その後は通常どおり処理を続行します。これにより、アプリやダウンストリームサービスは、アクセスや認可などに関する判断を正確な情報に基づいて行えるようになります。
ほとんどのアーキテクチャや状況では、これにより、偽装されたX-Forwarded-Forが不正アクセスに利用される可能性を軽減できます。クライアントとその正当性を正確に把握するための情報が多いほど、セキュリティは向上します。X-Forwarded-Forに含まれるIPアドレスに、デバイスの種類、ユーザーエージェント、HTTPやネットワークプロトコルで自動的に伝送されるその他の情報を組み合わせることで、十分な情報に基づいて判断するための、より確かなコンテキストを得られます。
安全にお過ごしください!
X-Forwarded-Forの処理に関するリソース:
著者について

Lori MacVittieは、F5のOffice of the CTOに所属するDistinguished Engineer兼Chief Evangelistであり、アプリケーションデリバリ、自動化戦略、インフラストラクチャに関する深い専門知識を有しています。AIエージェントのガードレール策定、脆弱なマルチクラウドアーキテクチャの分析、スケーラブルなシステムの限界の検証など、複雑な事柄を明快にすることで知られています。アプリケーション開発、ITアーキテクチャ、ネットワークおよびシステム運用の分野で、30年以上にわたる業界経験を有しています。F5入社前は、受賞歴のあるテクノロジー編集者として活躍していました。 MacVittieはコンピューターサイエンスの修士号を取得しており、セキュリティ、クラウド、エンタープライズアーキテクチャにわたる分野で多数の著作を発表しています。また、テーブルトークゲームとビデオゲームをこよなく愛し、チーズについては遠慮なく強いこだわりを語ります。
Lori Mac Vittieのその他のブログ記事関連するブログ記事

F5 Application Study Tool:OpenTelemetryによるF5 BIG-IP環境の監視
F5の新しいオープンソースツールは、BIG-IP環境を詳細に可視化し、データを追跡するとともに、強力でカスタマイズ可能なインサイトを得るための基盤を提供します。
F5 BIG-IPでAI防御を実現
F5 BIG-IP Advanced WAF、BIG-IP APM、BIG-IP SSL Orchestratorが、生成AIアプリ向けに包括的なセキュリティソリューションを提供する仕組みをご覧ください。
F5 Advanced WAFによるGraphQL APIの保護
ここ数年、多くの組織がデジタルトランスフォーメーションを進めており、COVID-19のパンデミックによってその動きは加速しています。
アプリケーションサービスの現状 通信業界版:リーダーとしての台頭
通信ネットワークが進化し、さまざまな業界の幅広いユースケースに対応するなか、通信業界の回答者がテクノロジーリーダーとしての存在感を高めていることがわかります。
デジタルトランスフォーメーションは、単なるペーパーレス化ではない
デジタルトランスフォーメーションは、単なるペーパーレス化ではありません。真のモダナイゼーションにアプリケーションアーキテクチャとセキュリティの再構築が必要な理由を、F5ブログでご覧ください。
やめましょう。もう本当にやめましょう。HTTPSはHTTPより高速ではありません。
もうやめましょう。HTTPSはHTTPより高速ではありません。プロトコルのパフォーマンスに関する微妙な違いと、暗号化トラフィックを適切に最適化する方法については、F5ブログをご覧ください。