sendmail, Movable Type のリカバリ

サーバが故障してリカバリに四苦八苦。しばらく触らないとすぐ設定方法を忘れる。また同じことが起こるはずなので,私自身のために書き残しておく。つまり,記述は私自身の運用環境に依存するので,不特定の方の参考にはならない可能性が高い。

sendmail

私のメール環境は,送信はプロバイダの SMTP サーバを用い,受信を自宅サーバで行い各ユーザのメールボックスに配信する運用になっている。SPAM メール対策に SpamAssassin を使い,少しでも機械的メール送信プログラム対策に資するよう Milter-Greylist を使っている。家族の PC で動くメールソフトから取りに来る受け口となる POP3 サーバ Qpopper, 着信メールの自動振分のための Procmail, Web アーカイブとして閲覧できるようにするための MHonArc, プロバイダ・アカウント宛に来たメールを取得する Fetchmail 等々,関連プログラムは少なくない。まずこれらのソフトウェアを ports でインストールする。ここでは Qpopper と SpamAssassin についてだけ少し。

Qpopper とのコネクションは inetd が受け付けるようにしているので,/etc/inetd.conf 中の POP3 のエントリを以下の通りの内容で記述しておく。

pop3  stream  tcp  nowait  root  /usr/local/libexec/qpopper  qpopper -s

SpamAssassin については,FreeBSD 8.2-RELEASE の現時点での最新 ports /usr/ports/mail/p5-Mail-SpamAssassin/ から導入を試みると,ライブラリのバージョンで齟齬を起こしてうまく make できなかった。調べるのも面倒なので,日本語版 ports /usr/ports/japanese/p5-Mail-SpamAssassin/ を試してみるとうまくインストールできた。ただし,この日本語版 ports は日本語処理に MeCab を活用するパッケージになっていて,これを自動的にインストールしてくれるのだけど,UTF-8 で MeCab を調整するよう要求してくる。そこで以下のように MeCab を UTF-8 で導入したあとで SpamAssassin を組込むとよいと思う。

# cd /usr/ports/japanese/mecab && make WITH_CHARSET=utf8 install clean
# cd /usr/ports/japanese/mecab-ipadic && make WITH_CHARSET=utf8 install clean
# cd /usr/ports/japanese/p5-MeCab && make install clean
# cd /usr/ports/japanese/p5-Mail-SpamAssassin && make install clean

メール環境の復旧は何より sendmail.cf 設定ファイルのリカバリが命である。これをバックアップしておけばよいのであるが — 愚かにも — 今回バックアップのなかに見当たらなかった。それで一から設定することに。

最近の FreeBSD では sendmail.cf の生成は,/etc/mail 下で m4 マクロで元ネタ(mc ファイル)を記述し make することにより行うのが一般的のようである。私のサーバ yasuda.homeip.net 用の mc ファイルとして beatrice.yasuda.homeip.net.mc を以下の通り準備した。

divert(0)
VERSIONID(`...')
OSTYPE(freebsd6)
DOMAIN(generic)
MASQUERADE_AS(`yasuda.homeip.net')
MASQUERADE_DOMAIN(`$j')
EXPOSED_USER(``daemon news usenet postmaster MAILER-DAEMON'')
FEATURE(`limited_masquerade')
FEATURE(`masquerade_envelope')
FEATURE(`allmasquerade')
FEATURE(access_db, `hash -o -T<TMPF> /etc/mail/access')
FEATURE(blacklist_recipients)
FEATURE(local_lmtp)
FEATURE(mailertable, `hash -o /etc/mail/mailertable')
FEATURE(virtusertable, `hash -o /etc/mail/virtusertable')
define(`confCW_FILE', `-o /etc/mail/local-host-names')
define(`confMAX_MIME_HEADER_LENGTH', `256/128')
define(`confNO_RCPT_ACTION', `add-to-undisclosed')
define(`confPRIVACY_FLAGS', `authwarnings,noexpn,novrfy')
dnl j,{if_addr},{cert_subject},i,{auth_authen} are already enabled by default
define(`confMILTER_MACROS_HELO', confMILTER_MACROS_HELO``, {verify}'')
define(`confMILTER_MACROS_ENVRCPT', confMILTER_MACROS_ENVRCPT``, {greylist}'')
INPUT_MAIL_FILTER(`greylist', 
    `S=local:/var/milter-greylist/milter-greylist.sock, F=T, T=R:30s')
MAILER(local)
MAILER(smtp)

私自身の備忘録なので細かいことは省略する。最後行から 3--5 行は Milter-Greylist のための記述である。一般的な記述は freebsd.mc に書かれているので,ドメイン名などを自分用に修正すれば基本的によいはずである。書き方の詳細は /usr/share/sendmail/cf/README に記載されている。

mc ファイルができたら,sendmail.cf を make する。

# cd /etc/mail
# make SENDMAIL_MC=/etc/mail/beatrice.yasuda.homeip.net.mc all install

さらに /etc/rc.confsendmail_enable="YES" を追加する。これを行わないと,sendmail は localhost 以外のコネクションを拒否する設定で起動するので注意。詳細は man rc.sendmail を参照。これで,リブートすれば壊れる前と同様に sendmail が動作する。

スパムの踏み台にならないか一応チェックしておくとよい。http://verify.abuse.net/relay.html などで不正な第三者中継のセキュリティホールを診断できる。このサイト・フォームの Address to test: にメールサーバ名を入力して test for relay ボタンをクリックすれば診断を開始する。All tests performed, no relays accepted. が最後に出力されればよいと思う。

Movable Type

本ブログの管理システム Movable Type 4.1 (以下 MT) のリカバリについては,ブログ情報を格納した SQLite3 DB と Web MT data ツリー,cgi-bin ツリーすべてが,壊れたディスクから復元できた。このため,リカバリ作業はこれらのツリーの復元(バックアップアーカイブの解凍),SQLite3 のインストール,そしてMT 動作のために必要な Perl モジュールの追加ということになる。

まず Web サーバ Apache22 環境を構築しておく。その後バックアップから MT ツリーを復元する。SQLite3 がインストールされているか確認し,なければインストールしておく。そのあとでブラウザから mt-check.cgi にアクセスすると,MT が前提とする Perl モジュールの検出状況が出力される。不足しているものを ports で追加するか,cpan コマンドもしくは perl -MCPAN -e shell でインストールする。再度 mt-check.cgi を実行して動作準備完了が確認できれば,mt.cgi にアクセスする。以前の通り使用可能になるはずである。