[025] Apacheのログを分類して記録する方法
NimdaやCodeRedなど、wormのlogを別logとして保存します。さらに画像のlogやローカルからのアクセスは残さないようにします。肥大化しがちなlogを、コンパクトに整理しましょう。
Apacheのlog(ログ)
Apacheは広く使われているオープンソースのWEBサーバソフトです。
デフォルトではaccess_log(Win32の場合はaccess.log)にlogを残します。
その中に、下記のようなlogが頻繁に見付かります。
“GET /default.ida?XXXXXXXXXXXXXXXXXXXXX(中略)00%u00=a HTTP/1.0" 404 205
“GET /scripts/..%252f../winnt/system32/cmd.exe?/c+dir HTTP/1.0" 404 232
“GET /_vti_bin/(中略)/winnt/system32/cmd.exe?/c+dir HTTP/1.0" 404 249
“GET /MSADC/root.exe?/c+dir HTTP/1.0" 404 208
“GET /c/winnt/system32/cmd.exe?/c+dir HTTP/1.0" 404 218
“GET /d/winnt/system32/cmd.exe?/c+dir HTTP/1.0" 404 218
これらはワームの攻撃にて残されたlogです。
これらのlogは一般的に長く、正当なアクセスによるlogの中に混じってしまうと、
解析時に邪魔になることがあるので、別logとして記録することにします。
(もちろん、記録しないようにすることも可能)
Apacheの設定ファイルである「httpd.conf」に記述することで行います。
ワームを別logに記録する
logの中に"AAA"という文字列が含まれていればworm.logに記録する場合、
SetEnvIf Request_URI “AAA" worm nolog
CustomLog logs/worm.log common env=worm
となります。
ここでの「common」は、ログの記録形式の指定です。
(commonやcombinedなどがある)
ワームが残したであろうlogを見て、特徴的な部分を"AAA"に記します。
例えば
SetEnvIf Request_URI “default.ida" worm nolog
SetEnvIf Request_URI “root.exe" worm nolog
SetEnvIf Request_URI “cmd.exe" worm nolog
SetEnvIf Request_URI “Admin.dll" worm nolog
SetEnvIf Request_URI “mem_bin" worm nolog
SetEnvIf Request_URI “vti_bin" worm nolog
SetEnvIf Request_URI “MSADC" worm nolog
SetEnvIf Request_URI “scripts" worm nolog
のようになります。
新しいワームが登場した際には、上記を追記していくことで対応可能です。
画像ファイル等の除外
デフォルトではlogは画像やcss(スタイルシート)のアクセスも記録します。
つまり、1ページのアクセスであっても、それが画像5枚とcssを1つ含む場合、
合計7行のlogが残ることになり、logは膨れ上がっていきます。
そこで、画像やcssのlogを記録しないように設定します。
画像の拡張子を*.gif,*jpg,*.pngとし、cssの拡張子を*.cssとすれば、
SetEnvIf Request_URI “¥.(gif)|(jpg)|(png)|(css)$" nolog
と指定します。
上の例ならば、1行のlogが記録されるだけで済みます。
ローカルからのアクセスを除外
IPアドレスを指定することで、そこからのアクセスをlogに残さないようにできます。
これを使い、ローカルからの(自分の)アクセスを記録しないようにします。
SetEnvIf Remote_Addr 192.168.0.10 nolog
SetEnvIf Remote_Addr 192.168.0.20 nolog
SetEnvIf Remote_Addr 127.0.0.1 nolog
行儀の悪いUser-Agentを除外する
コンテンツを一気に収集するソフトは、大量のデータを短期間で得ようとしますから、
他の閲覧者の妨害になることがあります。
robots.txtで制限をしても、無視してくる(or robots.txtを読まない)、
行儀の悪いものもあります。
そこで、これらのUser-Agentのアクセスを禁止(403)し、さらにlogを分けましょう。
まずは、除外するUser-Agentを宣言し、403にします。
SetEnvIf User-Agent “blogWatcher_Spider" badrobot
SetEnvIf User-Agent “Pockey-GetHTML" badrobot
<Files *>
Order allow,deny
Allow from all
Deny from env=badrobot
</Files>
次に、これらのlogを別ファイルとして記録します。
(もちろん、記録しないようにすることも可能)
記録する場合は、上で403としていますので、403として記録されます。
まとめ
組み合わせると、以下のようになります。
# 画像、スタイルシートのアクセスはログに記録しない。
SetEnvIf Request_URI “¥.(gif)|(jpg)|(png)|(css)$" nolog
# ワームはworm.logに記録し、access.logには記録しない。
SetEnvIf Request_URI “default.ida" worm nolog
SetEnvIf Request_URI “root.exe" worm nolog
SetEnvIf Request_URI “cmd.exe" worm nolog
SetEnvIf Request_URI “Admin.dll" worm nolog
SetEnvIf Request_URI “mem_bin" worm nolog
SetEnvIf Request_URI “vti_bin" worm nolog
SetEnvIf Request_URI “msadc" worm nolog
SetEnvIf Request_URI “MSADC" worm nolog
SetEnvIf Request_URI “scripts" worm nolog
# ローカルからのアクセスはログに記録しない。
SetEnvIf Remote_Addr 192.168.0.10 nolog
SetEnvIf Remote_Addr 192.168.0.20 nolog
SetEnvIf Remote_Addr 127.0.0.1 nolog
# 指定したUser-Agentからのアクセスはbadrobot.logに記録し、
# access.logには記録しない。
SetEnvIf User-Agent “Pockey-GetHTML" badrobot nolog
# ワームはworm.logに記録する。
CustomLog logs/worm.log common env=worm
(詳細まで取る必要がないので「common」としている)
# 指定したUser-Agentからのアクセスはbadrobot.logに記録する。
CustomLog logs/badrobot.log common env=badrobot
(詳細まで取る必要がないので「common」としている)
# 上記で除外したアクセスはaccess.logに記録する。
CustomLog logs/access.log combined env=!nolog
(必要なlogなので、詳細まで取るために「combined」としている)
先に除外する条件を指定し、それを抜けたものがaccess.logに記録されるわけです。
logは知らぬ間に膨大になりますから、不要なlogは取らないようにしておきましょう。
更新履歴
- 2004/02 作成、公開
- 2004/09 User-Agent追加