18
16

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.

X-Forwarded-Forヘッダーから接続元クライアントのIPアドレスを特定し、アクセス制御する方法

Last updated at Posted at 2020-09-26

X-Forwarded-For(XFF)ヘッダーとは

  • HTTP プロキシ又はロードバランサーを通過してウェブサーバーへ接続したクライアントの、送信元 IP アドレスを特定するための(事実上の)標準ヘッダー。

形式

X-Forwarded-For: <client>, <proxy1>, <proxy2>
  • <client>
    クライアントの IP アドレス

  • <proxy1>, <proxy2>

    • リクエストが複数のプロキシを経由して行われる場合、それぞれのプロキシの IP アドレスが追加される。
    • 右端の IP アドレスが最も後段のプロキシであり、左端の IP アドレスが元のクライアントの IP アドレスを指す。

接続元クライアントのIPアドレス特定方法

通常の場合

XFF_Architecture.png

  • 上図のような構成で、EC2インスタンス(Apacheなど)で接続元クライアントのIPアドレスを特定したい場合は、X-Forwarded-Forヘッダーの右から2つ目の値を確認する。
    ※ELBへの直接アクセスなどを許容しないことが前提

XFFヘッダーを偽装された場合

XFF_Architecture_cheat.png

  • クライアントが意図的にヘッダーに値を設定(偽装)した場合も、X-Forwarded-Forヘッダーの右から2つ目の値を確認する。

Apacheでの接続元IPアドレスに基づくアクセス制御

  • 接続元クライアント(上記の例で右から2番目)のIPアドレスがXXX.XXX.XXX.XXXの場合に/testへのアクセスを許可したい場合、httpd.confに以下を記述する。
SetEnvIf X-Forwarded-For "(:?^| )XXX\.XXX\.XXX\.XXX, [\d.]+$" allowed

<Location /test>
Order deny,allow 		# 拒否してから許可
Deny from all			# 全アクセスを拒否
Allow from env=allowed	# envからのアクセスを許可
</Location>

参考情報

18
16
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
18
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?