2011年6月1日水曜日

すでに"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アドレスの後ろにカンマ区切りで、
アクセスしたクライアントの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"の上記性質を把握して、アクセス制限です。
--------
http://www.suz-lab.com

0 コメント: