俺の報告

RoomClipを運営するエンジニアの日報(多分)です。

日報 #58 - 不思議なレコード

俺歴うるう年調整的な事由によって、 昨日は日付自体がなかったことになっているので、ブログをポストしませんでした。
ポストし忘れたわけじゃありません。
誤解なきように。
ただヒントとしては、
からくりサーカスすげぇおもしれー」ってことですね。
今日だって調子よく働いております。
元気だしていきましょう。

さて、今日は朝からお日柄もよく、 珍しく体調もよく、
非常に快調にチケットをサツガイしまわっておりました。
ところが、です。
最近テストで取得しはじめたアクセスログに怪しいものがいくつかあるようです。
レコードが、10で始まるIPだらけなんです。
はい、AWSユーザならピンときますね。 ELBです。
PHPでのIP取得を普通にやっちゃうと、
ELBのPrivateなIPで全てのアクセスが記述されちゃいます。
なので、ちゃんと

$_SERVER['HTTP_X_FORWARDED_FOR’];

これでIPを取得しましょう。
ついでにapacheのLogFormatも、

%{X-Forwarded-For}i %{X-Forwarded-Proto}i

これを追加しておきましょう。evassiveとかでの対象IPもこれに修正しておきましょう。
さて、これにて一件落着かとおもいきや、
まだ変なレコードが目立ちます。
うちはEC2を3台ぶら下げているのですが、自分以外の2台からちょいちょい外部IP経由でアクセスがあるみたいです。

なんだよ!これ!

っつってこんな時間までかかっちゃいました。
結論から言うと鼻血が出るほどマヌケな話だったんですが、、、
とある処理の途中で、こんなことしてました。

$headers = @get_headers( $url );

僕の中でこれは「ヘッダだけ飛ばして処理はしねぇ」くらいに思ってたんですが、
するっつぅの、という当たり前の結論をつきつけられ、
そりゃそうだよねと相成りました。
ですが、この処理自体を削除するわけにも行きません。
ということで、実際の具体的なやり方は隠匿しますが、 例えばですが、

stream_context_set_default(
array(
  'http' => array(
    'method' => 'HEAD'
  )
);
$header = @get_headers($url);

こんな感じにしてストリームコンテキストにmethod=>HEADを記述子ておきます。
HEADメソッドでアクセスしてきたリクエストに関してはロギングを別途で行う、のようにしておけば、
大きな混乱は避けられそうですね。

いやしかし、
これを見つけるためにnetstatをやたら勉強したんですが、
まぁ結局今回は役に立たなかったんですが、
人が何かを学習する機会というのは本当に予測のつかないことだなぁと思いました。

さて、残りの仕事は、 からくりサーカスを読むということなので、今日はこのへんで。