2008年12月3日水曜日

IIS7でクライアントポート(リクエスト元ポート)をログにとりたいが…(追 記:apacheも)

セキュリティホール memo のキャリアグレード NATに関する記事 を見た。


Internet Week 2008 のキャリアグレード NAT の話で、 「キャリアグレード NAT が導入されると、クライアントのポート番号のログを取っておかないと、アクセス元をたどれなくなるよ (NAT されますから)」という話があったのを思い出した。



なるほどクライアントのポート番号のログを取っておくという事も推奨されるようになりそうです。
個人的にはいまいち必要性の実感に乏しいけど、残さないよりは残したほうがよいでしょう。
 

記事中ではApache2.2でのやり方が紹介されていたので、ほなIISはどうだろうと思って WindowsServer2008 で IIS7 を立ち上げ、ログフォーマットの設定画面を開く。
 

[caption id="attachment_1093" align="alignnone" width="386" caption="画像:IIS7ログフォーマット"]画像:IIS7ログフォーマット[/caption]
あぁ、クライアントポートの項目無いねぇ。IIS6 も内容は一緒。
 

仕方が無いのでメタベースとかに直接書けばいけるかな、と思って情報をあさってみたが、
IInetLogInformation - MSDN
この辺見るに、標準では明らかに無理っぽい(※ログモジュールごと完全自作なら取得可?)
マイクロソフト 何とかしてくれー どこに要望出したら良いんだろう。IIS.NETか?
 
 

では折角なので セキュリティホール memo の Apache 用設定を試してみようとやってみた。

「もしや……」と思って、 英語版のドキュメントを見たら、ありました。



%{format}p
The canonical port of the server serving the request or the server's actual port or the client's actual port. Valid formats are canonical, local, or remote.

引用:セキュリティホール memo のキャリアグレード NATに関する記事

 

それではapacheのコンフィグファイルを編集、デフォルト combined の Logformat にクライアントポートを出力しそうなフォーマット文字列を加えて試してみる。
%p %{remote}p %{local}p %{canonical}p↓で、出力されたログ↓
*.*.*.* - - [02/Dec/2008:**:**:** +0900] "GET / HTTP/1.1" 304
- "-" "Mozilla/5.0(略)Firefox/3.0.4" 80 80 80 80


…全部 80 がログに記録される、、いやいやリクエスト元3000番台だったぞ、{remote}じゃないのか?何か間違ってるんかな。
 

apacheのバージョンはコレ。
# apachectl -v
Server version: Apache/2.2.3
Server built: Jan 15 2008 20:33:30

 

うーむ、本当に取れるんだろうか…