PostfixでVirtual Domain

Pocket

 来月結婚する妹夫婦へのプレゼントとして、二人が経営する店の名前でドメイン名を取ってみました。汎用JPドメインを年額3,690円でDNSまでやってくれるレジストラを発見し、そこで申し込み。Webサーバーとメールサーバーはウチでバーチャル・ホスト。
 Webの方はApacheで何度もやってるので問題無し。今回、Postfixでメールのバーチャル・ホストに初挑戦。
 やってみると結構簡単でした。大規模な管理だとDBと連携して、とかあるみたいですが、当面二人+営業用アドレスだけなので、UNIXユーザに紐付けする方法を採りました。
まずmain.cfに

virtual_maps = hash:/etc/postfix/virtual

の1行を追加。
 続いて、virtualというファイルを作成して、

rolls.jp anything
user1@rolls.jp user1
user2@rolls.jp user2
shop@rolls.jp user1, user2
webmaster@rolls.jp furuta

などと記述。1行目はお約束。2行目以降はヴァーチャルなメールアドレスとUNIXユーザ名を対で書きます。
 できあがったらpostmap virtualすれば、ハッシュファイルvirtual.dbが作成されます。
 あとはuser1、user2といったUNIXユーザアカウントを作成し、postfixを再起動すればOK。mydestinationなどのリレー設定は自動でやってくれるみたいです。
 妹は色々アレなHotmail使いで今時どうよってカンジだから、これを機にウチでPOPなりIMAPな環境に移行させたいところ。THUNDERBIRDかリスメールでも覚えてもらおうか。Hotmailって外部アドレスへの転送機能ってないんだろうか?ないだろうなぁ…
 義弟の方はそもそもメールをあんまりしないみたいだけど使うだろうか?まぁ、今時、飲食業といえど仕事のやりとりにも必要ではないだろうか。最悪、ケータイに転送してでも。
 後はWebサイトだなぁ。

んが、IPAからXSS脆弱性の警告が

Pocket

 うを、ツカケン宛にIPAのセキュリティ・センターから「おたくのサイトのとあるページに脆弱性があるので担当者のアドレスを教えれ」というメールが。そのメールに具体的な脆弱性の内容は書いてないけど、対象URIを見た感じクロス・サイト・スクリプティング(XSS)に関する脆弱性だろう。あのサイトは時期によってPerlとPHPのコードが混在していて、指摘は随分昔に書いたPerl部分。もうPerlは引退して久しいし、手元にリファレンスも無かったので、Webで情報を探しながら、とりあえずタグの除去処理を追加。
 更に調べてみるとPHP部分でもフォームの内容をそのまま表示している部分があることを発見し修正。
 これでいいのかな?IPAからの詳細連絡待ち。
 やれやれ。こういう被害を防ぐために行われている人的、計算機的資源って世界的に見たらスゴいんだろうな。世界中のマシンで稼働しているNortonとかスパムフィルタの処理パワーを振り替えるだけでサクっと宇宙人が見つかったり、癌の特効薬が見つかったりするんじゃないだろうか…

MovableType 3.15アップグレード

Pocket

シックス・アパート、脆弱性を修正した「Movable Type 3.15」を公開
 MovableTypeがアップグレードされた。旧バージョンのスパムの踏み台にされる可能性のある脆弱性はプラグインにて対処済みだったが、他にも色々直ってるみたいだし、今日はオフ気分だったので着手してみる。
 アップグレードは普通に完了。手順書の「mt-upgrade31.cgiを実行」ってApache経由って意味ね。コマンドラインから実行してエラーが出て悩んでしまった。
 問題は個別に修正している部分が全てやり直しになること。以下、過去のエントリから拾い集めた備忘録。

・カレンダーを月曜始まりに

 lib/MT/Template/Context.pmを修正する。

my $days_in_month = days_in($m, $y);
my $pad_start = wday_from_ts($y, $m, 1);
my $pad_end = 6 – wday_from_ts($y, $m, $days_in_month);

require MT::Entry;

my $days_in_month = days_in($m, $y);
my ($sdow);
$sdow = 0 unless ($sdow = $args->{sdow});
my $pad_start = (wday_from_ts($y, $m, 1) + 7 – $sdow) % 7;
my $pad_end = 6 – (wday_from_ts($y, $m, $days_in_month) + 7 – $sdow) % 7;

require MT::Entry;

・検索対象を自ブログのみに限定

過去のエントリを参照。

・コメントスパム対策

 kawagutiの指摘による改変作業。
 mt-comment.cgi冒頭に赤字部分を追加。

use strict;
# Check spam comment
# die when value “spammer” is null.
use CGI qw(:standard);
if ($ENV{‘REQUEST_METHOD’} eq “POST”) {
my $data = param(‘check’);
die unless($data);
}

 lib/MT/Template/Context.pmに、赤字部分を追加(二カ所)。

<input type=”hidden” name=”entry_id” value=”$entry_id” />
<input type=”hidden” name=”check” value=”hoge” />

 後はユーザ毎のテンプレートなので今日の作業では上書きされていないはず。とりあえず、各利用者(ブログ開設者)の方は再構築やコメント周りの動作確認をお願いします。

バックアップスクリプト改良

Pocket

 朝起きてみるとayanから道具眼のサーバーがおかしいのでは?とMessengerでメッセージが入っていた。ウチでaliasしているメールアドレスがエラーになるとのこと。naokAもブログが書けないらしい。そのアドレスにはとある経緯があって「どうせアドレスを間違えているんじゃねぇの?」と疑いつつAliceにログイン。あれ、弾かれるぞ?どうもDisk Fullになっているらしい。
 AliceがDisk Fullになるのは相場が決まっている。NFSでマウントしてrsyncでバックアップをとってるLinkStationのHazukiが問題を起こしてるからだ。調べると電源が落ちてる。あー、昨日ブレーカーが落ちた時に復帰してなかったんだ。
 現在は毎朝4時にシェルスクリプトでHazukiを/mnt/hazuki/下にマウントして、そこにバックアップを書き出す。ところがスクリプトが手抜きなので、マウント成功かどうかをチェックしてなかった。UNIXをご存じな方は知ってると思うが、マウントに失敗してもローカルのHDDに普通に読み書きできてしまうので、スクリプトは自分自身のHDDにバックアップを始めてしまう。おかげであっという間に空き容量が食われてしまう訳だ(rsyncで同期していても、バックアップ先が空なのでフルコピーされる)。
 いつもはこの状態でもログインだけはできてたのに。ログインできないとファイルを消す作業もできないので焦ったが、hkondo氏のアドバイスに従い、物置からアナログCRTを引っ張り出してきてつなぎ、キーボードはUSBのものをMacから引っこ抜いてきて無事コンソールでログイン。ファイルを削除。
 再発防止のためにスクリプトを改良してみた。-dコマンドを使って、マウント後なら見えるはずのディレクトリが存在しているかどうかチェック。そのままスクリプトを終了してしまうとバックアップが行われないままになってしまうので、else節に警告メール(hazuki_down.txt)を送信するように設定してみた。

#! /bin/sh
mount /mnt/hazuki/
if [ -d /mnt/hazuki/etc/ ]; then
 /usr/bin/rsync -av –delete /home/ /mnt/hazuki/home/
 以下、rsync群がズラっと…
else
 mail furuta@aika.do-gugan.com < hazuki_down.txt fi

umount /mnt/hazuki/

 それにしてもこういう時にモニタがないのは不便だなぁ。というかCRTを担いでくるのが大変。かといって普段からつなげておく場所もないし。いっそこういうの→を買ってみようか。CD-ROMドライブなどを入れる5インチベイにスッポリ収まる4インチ液晶モニタ。ちょうどベイ空いてるし。でもこれで5万は高いよなぁ。うーむ。


 さて、容量を空けたら無事に動作復旧したようで、ayanにメールの再送を依頼。え?まだダメ??って、やっぱりアドレス間違ってんじゃんっ!

LinkStationの時計ずれ

Pocket

 どうもLinkStation(HG)の時計ずれる。LAN内のNTPサーバーと同期させてるのに…。ファイルサーバーとしては秒単位のズレはあまり気にならないけど、LinkDe録で録る番組が頭数秒~十秒程度欠けてしまうのはいただけない。
 telnet化してあるので、ログインしてコマンドラインでntpdateしてみると、その瞬間はNTPサーバーや117とバッチリ同期してるっぽい。cronで定期実行させる辺りの問題か?
 /etc/crontabをみると、

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
02 4 * * * root /etc/cron.d/chk_proc.sh
05 4 * * * root /etc/cron.d/logrotate
08 4 * * * root /etc/cron.d/calib_time.sh
00 */12 * * * root /etc/cron.d/scheduler
30 */3 * * * root /etc/cron.d/ntpdate

となっていた。calib_time.shとntpdateの2つも時刻合わせ関係のスクリプトがある。試しに手動で実行してみると、前者はむしろ2秒ほど狂いが発生する。中身を読み込むのも面倒なのでw、とりあえずntpdateだけにして様子を見てみよう。