wakatonoの戯れメモ

はてなダイアリーから引っ越してきました。

音極道茶室さんの検証を受けて、さらに再検証

音極道茶室さんの検証結果を受けて、ちょっとした疑問が浮かんだのでさらに検証をかけてみました。
音極道茶室さんが検証した時点では、127.0.0.1は記録されず、実IPが記録されたとのことなので、「そりゃそうあるべきだよなぁ…」と思いながら、1つの仮説が(今日になって)浮かんできたので、取り急ぎ検証。

ええと、まず結論から言うと…Typepadが表示するアドレスがいったい何なのか、わけわかりませんかなーり脱力する結果にorz

もしかして、Internet ExplorerのProxy設定の値がそのまま送信されてるんじゃないかと思いながら、Proxyの設定を以下の4通りで実施してみました(結果として、この考えは間違っていたわけですが)。なお、ProxyにはすべてSquidを使っています。以下の例で、ProxyAはSquid 2.4 stable7が、ProxyBではSquid 2.5 stable9 が使われています。

結果は惨憺たるもので、以下のような結果になりました。

  • ケースProxyA1:クライアントのIPアドレス(NAPT前のプライベートアドレス)が表示された
  • ケースProxyA2:クライアントのIPアドレス(NAPT前のプライベートアドレス)が表示された
  • ケースProxyB:127.0.0.1が記録される
  • ケースProxy無し:NAPT後の(NAPTマシンの)グローバルIPアドレスが記録される

なお、ProxyBは、forwarded_forパラメータをoffにしていました。
これを有効にしたProxyB(ケースProxyB2)で試してみます。

ProxyAは、forwarded_forパラメータがonになっていたため、これをoffにしてみて試して見ます(ケースProxyA3)。

  • ケースProxyA3:127.0.0.1が記録される

これらの事象から推測されることは以下のとおりです。

  • Proxyなしの場合:実IPアドレスが表示される
  • Proxyありの場合:以下の2通りのパターンに分かれる
    • X-Forwarded-Forヘッダに有効なアドレスが入っている場合は、その中のアドレスが表示される
    • X-Forwarded-Forヘッダにunknownというパラメータが入っているような場合は127.0.0.1が表示される

Proxyありとなしの差はどこにあるかというと、X-Forwarded-Forヘッダの有無であり、X-Forwarded-Forの中に有意なアドレスが入ってるか入ってないか(今回の場合はunknownという値が入っていた)で、表示するアドレスが異なるという仮説が成立します。

誰がどんなProxyを使っているか?というのはわかりませんが、匿名ProxyでX-Forwarded-Forを付加しないくらいのことはありえるでしょう。

自作自演をやった結果として同じIPアドレスが取得されたというのであれば話は別ですが、X-Forwarded-Forにunknownというのを入れてリクエストを投げるようなProxyを使うのはありうる話であり(Proxyの管理者が、イントラネットのアドレス体系を知られたくないような場合には、こういう設定にするような気はします)、結果として「Proxyは使ってる」くらいの意味にしか使えない、ということになります。

ついでにいうならば、このような実装が正しいかどうか?といわれると、かなり疑問…。