share facebook facebook twitter menu hatena pocket slack

2011.06.06 MON

すでにX-Forwarded-ForヘッダのついたHTTPリクエストがELBを経由すると

鈴木 宏康

WRITTEN BY 鈴木 宏康

すでにX-Forwarded-ForヘッダのついたHTTPリクエストがELBを経由するとどうなるかを、
下記のX-Forwarded-Forヘッダを出力するPHPスクリプトを用いて実験してみました。

$headers = getallheaders();
print("X-Forwarded-For: " . $headers["X-Forwarded-For"] . "n");

はじめに、X-Forwarded-Forヘッダがない状態でアクセスすると、
下記のように、アクセスしたクライアントのIPアドレスが、
ELB上でX-Forwarded-Forヘッダとして追加されます。

# telnet suzlab-xxxxxxxxx.ap-northeast-1.elb.amazonaws.com 80
Trying xxx.xxx.xxx.xxx...
Connected to suzlab-xxxxxxxxx.ap-northeast-1.elb.amazonaws.com.
Escape character is '^]'.
GET /elb.php HTTP/1.0

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Date: Wed, 01 Jun 2011 05:49:48 GMT
Server: Apache/2.2.3 (CentOS)
X-Powered-By: PHP/5.3.6
Content-Length: 32
Connection: Close

X-Forwarded-For: yyy.yyy.yyy.yyy
Connection closed by foreign host.

そして、下記のように、すでにX-Forwarded-Forヘッダが付いている状態でアクセスすると、
既存のX-Forwarded-ForヘッダにアクセスしたクライアントのIPアドレスがカンマ区切りで
追加されることがわかります。

# telnet suzlab-xxxxxxxxx.ap-northeast-1.elb.amazonaws.com 80
Trying xxx.xxx.xxx.xxx...
Connected to suzlab-xxxxxxxxx.ap-northeast-1.elb.amazonaws.com.
Escape character is '^]'.
GET /elb.php HTTP/1.0
X-Forwarded-For: zzz.zzz.zzz.zzz

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Date: Wed, 01 Jun 2011 05:49:48 GMT
Server: Apache/2.2.3 (CentOS)
X-Powered-By: PHP/5.3.6
Content-Length: 32
Connection: Close

X-Forwarded-For: zzz.zzz.zzz.zzz, yyy.yyy.yyy.yyy
Connection closed by foreign host.

上記の結果となりましたので、次はX-Forwarded-Forの上記性質を把握して、アクセス制限について紹介します。

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら

鈴木 宏康

鈴木 宏康

愛知県生まれ。東京工業大学大学院修士課程修了。在学時より、ベンチャー企業でインターネットに関する業務に携わり、現在はクラウド(主にAmazon Web Services)上での開発・運用を軸とした事業の、業務の中心として活躍。