11
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Trusted Proxy とは

Last updated at Posted at 2019-10-24

Trusted Proxy とは

Truested Proxyを設定することでProxyを介した際の、正しいURLの生成、リダイレクト、セッションハンドリング、ロギングが可能となる。

プロキシが背後のサーバに伝達するためのHeaderについて

ロードバランサなどのプロキシを介すと、その背後にあるサーバは元のリクエストがどのようなものだったのか具体的にわからなくなる。そのため、プロキシはデファクトスタンダードであるX-Forwarded-*ヘッダを用いて、背後のサーバに元のリクエスト情報を伝達する。

  • X-Forwarded-For - クライアントのIP
  • X-Forwarded-Host - クライアントによってブラウザにアクセスされた際のホスト名
  • X-Forwarded-Proto - クライアントによって指定されたスキーマやプロトコル(http/httpsなど)
  • X-Forwarded-Port - クライアントによって指定されたポート番号(80/443など)

プロキシによってはすべてのヘッダーを設定してくれるわけではない。例えば、AWS ELBの場合X-Forwarded-Hostは取得できない。

それを使わない場合どのような問題が起き得るのか?

サーバの前段にプロキシがある場合、アプリケーションが以下の問題に陥ることがある。

  • リダイレクトやサーバサイド言語が発行したURLが、アドレス、プロトコル、そしてポートなどの点において不正確となる
  • 個別のセッションが各ユーザに作られなくなり、不適切なアカウントへのアクセスや、ログインができないことが起こり得る
  • ロギングや他のデータ収集処理において、プロキシからの情報のみが伝達され、個別のクライアントからのトラフィックやアクションが区別できなくなる

例えば、Laravelにおいて

Laravel 5.5以降においてはデフォルトで同梱されており、外部ライブラリなどは必要としない。設定も簡単である。以下参照。
https://readouble.com/laravel/5.8/ja/requests.html#configuring-trusted-proxies

例えば、AWS ELBの場合は特別な設定がある。

Tip!! AWS Elastic Load Balancingを使用している場合、$headersの値はRequest::HEADER_X_FORWARDED_AWS_ELBに設定する必要があります。$headersで使用する内容の詳細は、Symfonyのtrusting proxiesドキュメントを参照してください。

また、クラウドサービスなどを使っている場合は、ロードバランサのIPアドレスが変化することがあるため、本来プロキシのIPアドレスを設定する場所でアスタリスクを設定する。アスタリスクが二つになると、最も近いプロキシだけでなくすべてのプロキシを信頼する。


<?php

return [
     'proxies' => '*',
];

5.4以前のバージョンは以下を使う。
https://github.com/fideloper/TrustedProxy

11
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?