Apacheログのカスタマイズ (CodeRed Nimda 対策 他)

Apache のアクセスログに

"GET /default.ida?XXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX%u9090%u6858%ucbd3%u7801%u9090%u68
58%ucbd3%u7801%u9090%u6858%ucbd3%u7801%u9090%u9090%u8190%u00c3%u0003%u8b00%u531b
%u53ff%u0078%u0000%u00=a HTTP/1.0" 404 268

こんなのが記されていたらCode Redのアタックを受けています。
こんなので、アクセスログを大量に埋められたら困るので、アクセスログに残らないよう設定します。

apache2 をサンプルとして書いていますが、1でも動くと思います。

/usr/local/apache2/conf/httpd.conf


SetEnvIf Request_URI "default\.ida" virus
SetEnvIf Request_URI "root\.exe" virus
SetEnvIf Request_URI "cmd\.exe" virus
 
CustomLog /var/log/apache/virus_log common env=virus
CustomLog /var/log/apache/access_log combined env=!virus
 
SetEnvIf Request_URI "default\.ida" virus
CodeRed の設定です。

SetEnvIf Request_URI "root\.exe" virus
SetEnvIf Request_URI "cmd\.exe" virus

Nimdaの設定です。
 
CustomLog /var/log/apache/virus_log common env=virus
CodeRed と Nimda をウィルスログに記載するようにします。

CustomLog /var/log/apache/access_log combined env=!virus

アクセスログに CodeRed と Nimda を記載しないようにします。
 

これで、アクセスログに CodeRed と Nimda は記載されないようになります。

ここで、もう少しログをカスタマイズしてみます。
アクセスログには、どの画像にアクセスしたのかも記載します。スペーサーとか、大量に画像を使っているサイトではこれでログを埋め尽くされてしまうので、画像はログに載せないようにしましょう。

上で設定した、項目も変更する必要があります。

/usr/local/apache2/conf/httpd.conf


SetEnvIf Request_URI "default\.ida" virus_log=virus no_log=virus
SetEnvIf Request_URI "root\.exe" virus_log=virus no_log=virus
SetEnvIf Request_URI "cmd\.exe" virus_log=virus no_log=virus
SetEnvIf Request_URI "\.(gif|jpg|jpeg|png|GIF|JPG|JPEG|PNG)$" no_log=images
 
CustomLog /var/log/apache/virus_log common env=virus_log
CustomLog /var/log/apache/access_log combined env=!no_log
 
SetEnvIf Request_URI "default\.ida" virus_log=virus no_log=virus
SetEnvIf Request_URI "root\.exe" virus_log=virus no_log=virus
SetEnvIf Request_URI "cmd\.exe" virus_log=virus no_log=virus

さっきまでは名称をひとつしか設定していませんでしたが、ここでは virus というのを virus_log と no_log という変数に代入しています。
 
SetEnvIf Request_URI "\.(gif|jpg|jpeg|png|GIF|JPG|JPEG|PNG)$" no_log=images
画像ログを no_log に設定しています。
 
CustomLog /var/log/apache/virus_log common env=virus_log
CustomLog /var/log/apache/access_log combined env=!no_log

ウィルスログにウィルス情報を保存し、アクセスログにはウィルス、画像共に載せないようにします。
 

なぜ、こんなことをするのかというと、ウィルスのログは virus_log に保存したいが、画像のログはいらないといったときに、
CustomLog /var/log/apache/access_log combined env=!virus env=!images
といった、CustomLog 内に env を2つ定義ですることができないためです。