ラベル IIS の投稿を表示しています。 すべての投稿を表示
ラベル IIS の投稿を表示しています。 すべての投稿を表示

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

 

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

2008年11月7日金曜日

IISのアプリケーションプールを開始するVBScript(WMI)

IISのアプリケーションプールが勝手に止まったりする事あります?
滅多に無いけどたまにある。そうか、わかるよ多分わかる。
 

止まっているアプリケーションプールを検出して自動で開始してくれるスクリプトを書いたのでエントリ。スケジュールタスクに登録して適度な間隔で実行すれば、簡易IIS監視体制の完成。
拡張子"vbs"で保存して実行してください、コマンドラインから実行もできるのでわりと便利。
[sourcecode language='vb']
strComputer = "."

set locatorObj = CreateObject("WbemScripting.SWbemLocator")
set providerObj = locatorObj.ConnectServer(strComputer, "root/MicrosoftIISv2")

Set colItems = providerObj.ExecQuery _
("Select * From IIsApplicationPoolSetting")

For Each objItem in colItems
if objItem.AppPoolState="4" Then
set nodeObj = providerObj.Get("IIsApplicationPool='" & objItem.name & "'")
nodeObj.start
end if
Next
[/sourcecode]

 

止まった原因はちゃんと調べたほうがいいけど、取りあえず動いておいて欲しいのも人情。
応用として、WQLにWhere句を使えば狙ったアプリケーションプールのみを監視できる。
(※Where name = 'hogehoge' とか name like ''%hoge% とか)
 

解説は参考情報を見てもらえると詳しく書いてあります、というかほぼMSDNからコピペ組み立てですけど。

2008年9月19日金曜日

XML WEBサービスはKeepAlive不要なのでOFFに

XML-RPC、XML WEBサービス、何やら色々と呼び方があってどう呼べばよいのかよく分からないけど、とにかくHTTPサーバ上のWEBサービスで、クエリ一丁レス一丁のやり取りについて。
HTTPベースのSOAPとかも含まれますね。
 

IISだと HTTP1.1の Keep-Alive がデフォルトで有効なのですけど、大概のXML-WEBサービスは一期一会、一撃離脱のやり取りをするので不要なのではないかと思う。
サイト単位で切替ができるので無効にしてしまいましょう。
 
 

まずはIIS6で。
[caption id="attachment_817" align="alignnone" width="500" caption="画像:IIS6での設定"]画像:IIS6での設定[/caption]
 

IIS7 だと、HTTP 応答ヘッダーの設定から。結構分かりにくい所にある。
[caption id="attachment_815" align="alignnone" width="401" caption="画像:IIS7での設定"]画像:IIS7での設定[/caption]
 
 

場合によっては普通のサイトでもOFFで丁度よいくらいという話もどこかで見た、最近Apacheはデフォルトで無効ですよね。

2008年9月17日水曜日

IIS7用のWEBDAV拡張はDownloadCenterから追加する_その他も

機能追加の一覧にWEBDAVがないと思ったら、あとから追加リリースしてるのね。
 
追記:FTP7もかよ!
 

MSブログの記事:WebDAV Extension for Windows Server 2008 RTM is released!
http://blogs.msdn.com/robert_mcmurray/archive/2008/03/12/webdav-extension-for-windows-server-2008-rtm-is-released.aspx
 
ダウンロード先:Microsoft WebDAV Extension for IIS 7.0 (x86)@IIS Download Center
http://www.iis.net/downloads/default.aspx?tabid=34&g=6&i=1621


 

何気に IISのポータルサイト は重要なんですよね。
 
 

追記:FTPの新バージョン (FTPSとかに対応)も追加で入れないといけないのカー。しかも古いFTP自分で消さないといけない。
WindowsServer2008 の IIS7 って... 未完成部分多すぎ? クライアント証明書のマッピングも、IIS6では GUI あったのに IIS7では WMIかコンフィグ直接編集しろってなってる。
…評価版だからかな。

Microsoft FTP Publishing Service for IIS 7.0 (x86)
http://www.iis.net/downloads/default.aspx?tabid=34&g=6&i=1619

2008年8月31日日曜日

IISのログファイルをタスクで月ごとに圧縮する

WindowsServer2003 に付属のHTTP他もろもろサーバ、IIS6を長いこと動かすとログがたまってくる。logrotateみたく圧縮ローテーション&自動削除ならいいのに。
 
サイトが少しならいいけど、サーバに何十とWEBサイトを作るとログファイルは結構な量になるので、容量はかさむしNTBackupにかかる時間は延びるし運用上よろしくない。
 
ということから作成して使っていたVBScriptを公開する。目的の大半は自分があとで使いまわすためですが、興味がある人は使ってみたらよいと思います。
WindowsServer2008+IIS7の環境でも動作することを確認。これでまだしばらく使い物になる。
cabarc.exeは取りあえずMicrosoft Cabinet SDKのものを使った。2008のサポートツールにも入ってるのかな?

 
 

一応、スクリプトの使い方と処理内容を記述しておく。
 
使い方は叩くだけ、丸々一カ月分/約30のログファイルが1つの cab ファイルにまとまる。
ログファイルの場所は特に指定しないでよい。
 
処理は下記の流れでやっている。

  1. WMIでIISのWEBサイト設定から、ログファイルの保存フォルダを取得

  2. 先月分のログファイルがあるか確認する
    例) 現在時刻が2008年8月に実行した場合、"ex200807*.log" に該当するファイルを探す

  3. 全部cabに圧縮して、成功したら元のログファイルを消去

  4. 1から3の処理をIIS上のWEBサイトすべてに対して繰り返す


 

なお、このスクリプトを使うにはサポートツールがいるので事前に導入しておく必要がある。
 
ほか、FTPのログも対象にしているのでFTPのサイトがないとエラーになる。IISのFTPを使っていない場合はFTPのところは消すべし、"objFTPsvc" の定義と、2つ目の大きなループを消せばOK.
 
 

以下スクリプト、拡張子VBSで保存して実行する。

2008年8月5日火曜日

IISのログファイルをUTF-8で記録する

IISのログを解析するのにLogParserはとても便利。
IISログのフィールドをカラムに見立ててSQL(っぽい)クエリで解析したり統計を取ることができます。
 
しかしIIS6ではログファイルのエンコードがデフォルトではANSIのため、リファラなどにUTF-8の日本語が突っ込まれて一部が文字化けしたログをLogParserに食わせると該当の行でカラムの区切りがうまくいかずに(※)行単位で無視されてしまいます。
 
(※「ログのロウが予期せず終了しています。」というエラー)
 
 
そういうことで困ったら、IIS6が出力するログのエンコードをUTF-8にしてしまうのがよいです。
 

英語以外の言語とセキュリティのために UTF-8 形式を有効にする
http://technet2.microsoft.com/WindowsServer/ja/library/b5060e4e-8573-4992-830b-98dd368714f11041.mspx?mfr=true


 
上記は文字だけなので変更箇所のスクリーンショットを。
[caption id="attachment_524" align="alignnone" width="469" caption="図:IIS6のログをUTF-8で保存するオプション"]図:IIS6のログをUTF-8で保存するオプション[/caption]
 
ちなみにこのオプションでログのファイル名が変わります。
今まで"exyymmdd.log"だったのが、"u_exyymmdd.log" になる、バッチでの自動化をしている場合は要注意。
 
 
ところでWindowsServer2008で使われるIIS7ではどうなんでしょう。
[caption id="attachment_525" align="alignnone" width="450" caption="図:IIS7ではデフォルトでUTF-8、ほかで選べるのはANSI"]図:IIS7ではデフォルトでUTF-8、ほかで選べるのはANSI[/caption]
 
こちらはデフォルトでUTF-8、ログファイルも"u_exyymmdd.log" ですね。
 
 
 
LogPaeserはその他、イベントログ・パフォーマンスログをはじめ各種ログ形式に対応しており、組み合わせと工夫でいきなりグラフ画像を出力する事もできるなど有用なツールです。
Windows運用管理では必須といってよいかも。(費用かければまた違うかも知れませんが。)