夏くらいから、このブログに大量のスパムコメントが届くようになった。その数、1日に800件以上。MovableTypeのSpamLookupプラグインによるフィルターをすり抜けるコメントが200件を越え、日々大量のコメントを手作業で削除するのが阿呆らしくなってきた。
まず、MovableType 3.xのサポートが終了したので、SpamLookupのブラックリストもメンテナンスされなくなったのではないかと思った。(その真偽の程は未確認である。)
そこで、先日、MovableTypeをバージョンアップしようと思った。
しかし、最新のMovableType 5.xや6.0は多機能で、システム要件が3.xと変わっており、インストールに時間を割く羽目になる予感がした。
このサーバーは玄箱HG + Debianである。ふと、aptitudeでmovabletypeを検索してみると、あった。MovableTypeのバージョンは4.xとなっていた。
暫くaptのデータベースを更新していなかったので、更新すればバージョン5.xもaptitudeでインストールできるのではないかと思ったが、何故か、更新の操作をしても全く更新されなかった。しばらくして今頃気付いたのだが、Lennyの更新は昨年3月頃に終了していたようだ。
最新のDebianのバージョンは7(wheezy)だそうだ。/etc/apt/sources.listを書き換えてwheezyのパッケージリストを取得してみると、movabletypeのバージョンは5.xだった。何故か、まだ更新されているDebian 6(squeeze)だと、最新のmovabletypeは4.xである。これはwheezyにアップグレードするしか無い、と思った。
Lennyをインストールした(というかされてしまった)時は起動に苦労する羽目になったが、それで玄箱HGが起動する2.4系のカーネルのLinuxから2.6系のカーネルを起動する2段ブート環境になったし、Linuxのカーネルは2.6系になったし、もうDebianをアップグレードしても大きなトラブルになることはなかろう、と思って、/etc/apt/sources.listのlennyをsqueezeに書き換えて、aptitudeでデータベース更新→自動的にマークされたパッケージをインストール、とすると、途中でいくつか理解できなかった警告があったものの、何とか更新が完了し、再起動もできた。
その勢いで、/etc/apt/sources.listのsqueezeをwheezyに書き換えて、同じようにaptitudeで更新インストールすると、途中で"FATAL: kernel too old"というエラーが出て、回復困難な状態になってしまった。
アンインストールしようがないlibc6のインストールが途中で失敗しており、その後はaptitudeやapt-getで何をやろうとしても、
Setting up libgcc1 (1:4.6.1-1) ...
FATAL: kernel too old
Segmentation fault
The following packages have unmet dependencies:となった。中断したインストールを強制実行する
libc-dev-bin : Depends: libc6 (> 2.13) but 2.11.x is installed
libc6 : Depends: libc-bin (= 2.11.x) but 2.13.x is installed
libc6-dev : Depends: libc6 (= 2.13-x) but 2.11.x is installed
apt-get -f installでも結果は同じで、libc-dev-binやlibc6-devを個別にインストールしようとしても先にこのエラーに阻まれ、apt-getにlibgcc1やlibc6のインストールを保留させる方法も分からなかった。
既に再起動もできない状態だと思った(バックアップの準備をして、すぐ玄箱をEMモードに切り替えて電源を落とした)ので、仕方なく、Debianを再インストールすることにした。
試しに、不要なHDDを玄箱に繋いで、同じようにlenny->squeezeとアップグレードして、
/etc/apt/sources.listにてwheezyのディレクトリーを指定して、
apt-get update(最小アップグレード手順)としても、同じ状態になった。玄箱へのDebianのインストールに使用しているLinux kernelのバージョンが2.6.25なのに対し、wheezyのインストールには2.6.26以降のkernelが必要であることが原因のようだ。
apt-get upgrade
そう思って、squeezeの状態でaptitudeでlinux-image-2.6.32-5-powerpc等をインストールしてみても、2段ブートの1段目から起動されるカーネルが置き換わる訳ではないので、無効であった。
玄箱や玄箱HGにwheezyをインストールした人も居るので、1段目から起動するカーネルかU-Bootのカーネルを更新さえすればできそうではあるが、そこまでするよりは手作業でMovableTypeをインストールする方が楽だと思ったのと、squeezeのサポートが終了する頃にはそろそろ玄箱HGよりも省電力な小型Webサーバーに買い換えたくなるような気がするので、wheezyのインストールは諦めた。
そこで、とりあえずsqueezeをきちんとインストールしておくことにした。
■手順
1. 玄箱HGにLennyをインストールする
2. /etc/init.d/kuroevtd の2行目辺りに以下のコメント行を追加
(squeezeのdependency based boot sequencingに対応する為、/etc/init.d/*や/etc/rc?.d/*はLSBInitScripts形式にする必要がある)
### BEGIN INIT INFO3. /etc/init.d/kuro_boot の2行目に以下のコメント行を追加
# Provides: kuroevtd
# Required-Start: $network $remote_fs $syslog
# Required-Stop: $network $remote_fs $syslog
# Default-Start: 2 4 5
# Default-Stop: 0 1 3 6
# Short-Description: Start/stop the KURO-BOX Event daemon
### END INIT INFO
### BEGIN INIT INFO4. /etc/apt/sources.list の"lenny"を"squeeze"に変更
# Provides: kuro_boot
# Required-Start: $remote_fs $all
# Required-Stop:
# Default-Start: 2 4 5
# Default-Stop: 0 1 3 6
# Short-Description: Initialize the KUROBOX AVAR
### END INIT INFO
なお、日本国内なら http://ftp.jp.debian.org/debian の行だけにしてもOK
5.
apt-get updateを実行、しばらくするとGPGのエラーになるので、続いて
apt-get install debian-keyring debian-archive-keyringを実行(エラーになればもう1度実行)
6.
apt-get dist-upgradeを実行
Wheezyにupgradeしようとする前、同じHDDの別のパーティションにバックアップを取ったのだが、他のHDDにバックアップをコピーするのを後回しにして、squeeze化とwheezy化を始めてしまい、"kernel too old!"のエラーが出てどうしようもなくなってからも、バックアップを他のHDDに移すのを後回しにして、色々なことを試してしまい、その流れで、なぜか、つい、ちょっと玄箱をEMモードにしてみようと思って、IPアドレスを知る為に玄箱のセットアッププログラム(KuroBoxSetup.exe)を実行して、それでIPアドレスを知ることができたのだが、つい、「セットアップ開始」というボタンを押してしまったら、ハードディスクのフォーマットが始まってしまった。
その瞬間、何か起こってもまだ取り返せるだろうと甘く見ていたことを激しく後悔すると同時に、もしこのように取り返しがつかない結果になればこれほどまでに後悔することに思い至らなかった自分を悔やみ始め、そのまましばらく固まってしまった。
この時、もう少し冷静であれば、途中でバックアップを他のPCに移す動作を始めたのだが、トラブルに見舞われて焦っていたことと、集中できずに苛立っていたことによって、あまりにも愚かな判断をしてしまった。こういう作業をする時には自分がどれくらい冷静でなければならないかを正しく判断する能力が、筆者に足りなかったということであろう。
幸いにして、バックアップや元データをかき集めて、最近1ヶ月くらいに考えた技術的なメモ書きと、4ページくらいの写真アルバムのHTMLファイルを失うくらいで済んだ。このブログのデータは、予備のブログにコピーしていたので、全て取り戻すことができた。
ところで、プロバイダーのサーバーにて独自にblosxomで稼働している、上記の予備のブログも、大量のコメントを食らってダウンしていた。日本語を含まないと無効などのフィルタリングをしていたが、それをすり抜けたコメントが7月以降に急増し、数MB分溜まって、そのせいで、このサーバーでblosxomが動作できなくなっていた。全世界でスパムが急増したのだろうか。
元々はスパム対策の為に作業を始めたのに、未だに適当な解決方法が見つからない。
CGIにアクセスされる時のRefererが別サイトならアクセス拒否するのは、全く効果が無かった。スパマーはHTMLを解析してCGIのURLを見つけ、そのURLとリファラーをセットにして保管しているのだろう。
スパムは中国や韓国からが大半だというWebの情報により、中国からのhttpdへのアクセスを遮断してみたが、2割くらいしか減らなかった。残ったコメントのIPアドレスから国名を検索するサイトで検索してみると、半分以上がアメリカからだった。世界におけるけ犯罪者の分布が急激に変わることは考えにくいので、アメリカのproxyサイトを経由しているのだろう。
日本国内からのアクセスのみ可能、とすれば効果はありそうだが、それは最後の手段とする。
Proxyからのアクセスを遮断する為に、ポート80が開いているサーバーからの投稿を禁止している掲示板があるが、結構有効なのかも知れない。しかし、ApacheやMovableTypeのコメントCGIにてそれを実現する方法がわからない。
CAPTCHA等による認証は、善良な投稿者の負担になるので、いまいちである。
他には、CGIのURLをJavascriptで取得させるようにすることで、HTMLからCGIのURLを隠すという方法があるらしい。Javascriptを無効にしているとコメントできないとはいまいちな気がするが、CAPTCHAよりはましであろう。
今頃になって、上記の"kernel too old"トラブルから脱出できるかも知れない方法を、
http://tim-pizey.blogspot.co.uk/2013/05/reverting-to-squeeze-from-wheezy.html
に見つけた。Debianを再インストールする決意をする前に100ページはGoogle検索して探したのに、このページを見つけられなかったのが残念だ。
(追記)
コメントスパム対策については、MT-Keystrokesプラグインをインストールすると、ほぼ完璧にシャットアウトされるようになった。これもJavascriptが有効でないとコメントできないとか、コメント欄を置くテンプレートやページにこれ用のタグを入れ忘れるとコメントできないという問題はあるが、他に適当な方法が無いし、突き詰めて考えるとこういう考え方の仕組みを入れるしかないと納得したので、しばらくこれに頼ることにする。
コメント