CodeRedと文字コード

前々日のこのPageにも書いたようにName BaseのVirtualHostを設定して www.shioji.jpとwww.touya.jpをこのホストで運営しているが問題が2つ。

一つはInternetに公開してすぐにWANからアクセスがあったが、 ほとんどがエラーでdefault.idaやcmd.exeをアクセスしようとしている。
いろいろ調べるとこれらはMicrosoftのIISに感染したCodeRedやNimdaから によるものらしい。

もう一つはなぜか日本語のページ(このページとか)が文字化けしてしまう。
IEで文字コードを日本語自動やシフトJISにすればちゃんと表示される。
で、一旦ちゃんと表示されたところで別のページに飛ぶとまた同じように 文字化けしてしまう。
他のsiteのページは普通に見えているのでブラウザの問題というよりは HTML file自体やapacheに問題があるらしい。
こっちはかなり面倒だったが、何とか解決できた。


まずはウイルスによるアタックの方だが、こっちに関してはServerのOSが Linuxなので特に感染などの問題はない。
でも、あっという間にLog fileが大きくなるし、いずれやろうと思っている Logの解析とかをするのにもじゃまになるので、取りあえずウイルスによる アクセスは別fileにするように設定した。
同様の需要はやはり結構あるみたいでCodeRed、access.logとかで検索する と方法が見つかった。
具体的にはhttpd.conf(Debianでは/etc/apache/httpd.conf)に以下の 項目を追加して、前々日設定したVirtualHostの欄を修正すればより。
LogFormatをなどを定義しているところあたり(場所はどこでもいい?)に 以下の項目を追加。
SetEnvIf REQUEST_URI "default\.ida" virus
SetEnvIf REQUEST_URI "cmd\.exe" virus
SetEnvIf REQUEST_URI "root\.exe" virus
SetEnvIf REQUEST_URI "Admin\.dll" virus
次にVirtualHostの設定をしたところのログの設定のところを修正。
TransferLog /var/log/apache/shioji.jp-access.log
を
CustomLog /var/log/apache/shioji.jp-access.log common ENV=!virus
CustomLog /var/log/apache/shioji.jp-virus.log common ENV=virus
に変更。
これで、accsess.logから上で定義したdefault.idaやcmd.exeが含まれる ものが削除され、virus.logの方に記録される。
あとはvirus.logに関しては適当な間隔で削除するように設定すれば終了。
ここでちょっと気になったのがTransferLogとCustomLogの違い。
結局よくわからなかったが、CustomLogはアクセスを指定したfileにその次に 書いてある(今回の場合common)形式で記録するもの。
TransferLogはアクセスLogを標準出力に書き出すものでfileが指定してあれば そのfileに書き込むし、パイプ(|)などを使ってコマンドに渡すことが できるらしい。
間違っているかも知れないが、取りあえず上のような設定で動いているのでよし としよう。


次に日本語が化けて表示される問題だがこっちは解決にちょっと苦労した。
まず、どの時点で化けているのかわからない。
可能性としてはHTML fileがおかしい(間違っている)、ブラウザの設定が おかしい、apacheの設定がおかしいなどが考えられるが、同じブラウザで他の日本語 のページを見ても特に文字化けは起こらない。
そこでまずはHTML fileからチェックしてみることに。
このページもそうだが、HTMLファイルはWindowsMe上でWZ editorで書いている。
一応HTML mode(?)になっているようだが、タグに色が付くくらいで、 ほとんどタグも自分で書いている。
書き終わったらFFFTPでServerにputしている。このときの転送モードはFFFTPまかせ なので改行コードがどうなっているかはよく分からない。 文字コードはシフトJISのはず
HTMLファイルにはすべて
<META http-equiv="Content-Type" content="text/html; charset=Shift_Jis">
とcharsetをShift_Jisに設定してある。
そこで、ServerにLoginしてnkfなどを使って漢字コードをシフトJISにきちんと convertし直したり、他のページを見てcharsetをShift_JISやx-sjisなどに してみても変化なし。
Googleとかで探してみてもServerにputするときはバイナリーモードに するだとか、charsetをきちんと設定しろとかいう感じでなかなか解決できない。
きちんとcharsetを設定してあって、ブラウザもおかしくないとすると残るは Apacheの問題ということになるのでさらに検索のワードをいろいろ変えてGoogle で調べると、どうやらApacheのAddDefaultCharsetがonになっていること が原因らしい。
これがDebian固有なのかどうか分からないが、そういえばinstallしたときに このあたりをいじったような気もする。
該当のところを見てみるとAddDefaultCharsetがonで、デフォルトで ISO-2022-JP、つまりJISにするようになっている。
これをoffにして/usr/sbin/apachectl restartするときちんと日本語も表示 できるようになった。