CentOSのネットワーク経由でのインストールが終わったら,ホーム・サーバー上でメール・サービスを稼働させよう。今回は,携帯電話にメールを転送したり,Web画面でメールを見たりできるようにする。

 前回は,今となっては旧型の携帯ノートPC「ThinkPad s30」に,Linuxディストリビューションの「CentOS」をネットワーク・インストールして,ホーム・サーバーの“土台”を構築した。今回は,ホーム・サーバー上で動かすサーバー・アプリケーションとして,メール・サービスを導入してみよう。

 自宅で利用するメール・サービスは,インターネット・プロバイダが提供するものを使っている場合が多いだろう。プロバイダのサーバーから直接メーラー(メール・クライアント)でメールを送受信する形態だ。

 ところが,ホーム・サーバー上でメール・サービスを稼働させると,プロバイダで契約しているメールをフィルタリングしたり,携帯電話に転送したり,Webメールを稼働できたりする。今回は,これらのサービスを実現してみよう。

CentOSのバージョン4.4が登場

 本題に入る前に,ここで使用するCentOS 4.4について触れておきたい(注:2007年6月20日現在,既にCentOS5,およびCentOS4.5が公開されている。関連記事1関連記事2を参照)。

 バージョン4.4は,ThinkPad s30に導入したCentOS 4.3の新版である。これから導入するのであれば,前回と同じ手順で新版をインストールしよう。

 既にバージョン4.3をインストールしていれば,yumコマンドを使って簡単にアップデートできる。

# yum update
# yum upgrade

 バージョン4.4になって,一部のサーバー・アプリケーションの設定ファイルのフォーマットが変更されている。今回から,バージョン4.4の利用を前提に説明する。

メール・サーバーを構築する

 ホーム・サーバーでメール・サービスを稼働させれば,次に挙げるようなことを実現できる。

・スパムを退治する

 「メール最大の悩みはスパム」という読者は少なくないはずだ。そこでスパム・フィルタを活用してスパム・メールを排除しよう。

・携帯電話などにメールを転送する

 携帯電話でのパケット通信の定額化やメール・サービスの無料化を追い風に,携帯電話をより一層活用するユーザーが増えている。ここでは,プロバイダあてに届いたメールを携帯電話に転送する。

・別のネットワークから閲覧する

 プロバイダのメール・サービスは,セキュリティ上の配慮から,外部ネットワークからのメール閲覧を許可していないケースが多い。そこで,別のネットワーク環境からメールを閲覧できるよう,Webメールを稼働する。

 今回は,この3点を実現する。そのために,必要なのは図1にあるようなシステムだ。簡単に説明すると,まずプロバイダのメール・サーバーから「Fetchmail」でメールを受信する。サーバーに置くメール・サーバーには「Postfix」を利用する。CentOSは標準のメール・サーバーとして「sendmail」を採用するが,設定や管理が簡単なPostfixを利用する。

図1●今回作成するシステムのメールの流れ
図1●今回作成するシステムのメールの流れ
Fetchmailがプロバイダのメール・サーバーからのメールを受信する。
[画像のクリックで拡大表示]

 次に,「Procmail」とスパム・フィルタの「SpamAssassin」「bsfilter」を組み合わせて,スパム・メールを排除する。携帯電話への転送は,Procmailが行う。最後に,IMAPサーバーの「Dovecot」を稼働し,Webメーラー・ソフト「Squirrelmail」を使って,Webブラウザからメールが見られるようにする。

Postfixのインストールと設定

 図1のシステムで核になるのはPostfixである。Postfixから導入していこう。

 PostfixとProcmail,デフォルト(初期設定)のメール・サーバーを切り替える「system-switch-mail」をまとめてインストールする。

 なお,サーバーを構築する作業は,すべて管理者権限で行う。

# yum install system-switch-mail postfix procmail

 インストールができたら,system-switch-mailコマンドを実行し,デフォルトのメール・サーバーをPostfixに変更する(写真1)。

写真1●デフォルトのメール・サーバーをPostfixに切り替える
写真1●デフォルトのメール・サーバーをPostfixに切り替える
矢印キーで「Postfix」を選択し,Tabキーでカーソルを「Ok」ボタンに合わせてスペース・キーを押す。

 続いて,Postfixの設定を行う。/etc/postfix/main.cfファイルをテキスト・エディタで開き,図2に示す行を変更する。main.cfの設定項目は多いが,今回のように自宅のLAN内で利用するなら,初期設定から変更すべき個所は少ない。

……# myhostname = bigbird2.localnet.mda.or.jp
……
inet_interfaces = all
……
mydestination = $myhostname, localhost.$mydomain, localhost
……
home_mailbox = Maildir/
……
mailbox_command = /usr/bin/procmail
……
mynetworks = 192.168.1.0/24, 127.0.0.0/8
……
図2●/etc/postfix/main.cfファイルの変更例

 「myhostname」には,通常,このサーバーのFQDNを記述するが,LAN内には正式なFQDNが与えられていない。したがって,コメントアウトする。

 「home_mailbox」の右辺は,メールをスプールする「Maildir/」ディレクトリを指定する。後述するIMAPサーバーのDovecotが利用するディレクトリだ。

 「mailbox_command」の右辺には,Procmailを指定しておく。

 「mynetwork」の右辺には,このメール・サーバーを利用するホストのIPアドレスを設定する。もし,このPostfixにメールをリレーさせない(ローカル配信のみ利用)のなら,「127.0.0.0/8」を設定しておくだけでよい。リレーをさせるのなら,図2のようにLANのIPアドレスもカンマ区切りで設定しておこう。

 以上を編集してmain.cfファイルを保存する。そしてホーム・ディレクトリにメール・スプール用のMaildirディレクトリを作成する。

# mkdir /home/yoneda/Maildir
# chmod 700 /home/yoneda/Maildir
# chown -R yoneda:yoneda /home/yoneda/Maildir

 上記はユーザー名「yoneda」の例だ。メールを利用するすべてのアカウントについて上記のようにMaildirを作成しておく。

 以上を実行したら,最後にPostfixを再起動する。

# /etc/init.d/postfix restart

スパム・フィルタの設定

 スパム・フィルタは,万全とは言えないまでも,スパムの被害を減らすのに役に立つ。UNIX系では,SpamAssassinが広く利用されている。

 SpamAssassinは,キーワードなどを指定したルールによるスパム検出に加えて,学習機能を持つ「ベイジアン・フィルタ」による検出機能も備える。ただし,SpamAssassinでも検出できないスパムもある。そこで今回はスパム・フィルタをもう一つ加えて,スパム検出の精度を上げることにする。

 追加するのは,Rubyで記述された国産のスパム・フィルタ「bsfilter」だ。検出方法にはベイジアン・フィルタを使用,優れた日本語のトークン解析機能を持つ。筆者が使用した印象では,日本語のスパム・メールの検出精度は,SpamAssassinよりもbsfilterの方が高い。

 SpamAssassinはCentOSのパッケージに含まれており,yumコマンドでインストールできる。

# yum install spamassassin

 一方,bsfilterはCentOSのパッケージとしては提供されていない。前述したように,bsfilterはRubyを使用するため,先にインストールしておく。

# yum install ruby

 次に,bsfilterのバイナリ・アーカイブを入手する。2006年9月上旬時点では,バージョン1.0.14が最新だった。バイナリ・アーカイブである「bsfilter-1.0.14.tgz」を次の公式サイトから入手する。

■bsfilter
http://bsfilter.org/

 入手できたら,次のコマンドで展開しよう。

# tar xvzf bsfilter-1.0.14.tgz

 bsfilter-1.0.14ディレクトリに展開されるので,Rubyスクリプト(UNIX向け)を/usr/local/bin/の下にコピーすれば,bsfilterを利用できる。

# cp bsfilter-1.0.14/bsfilter/bsfilter /usr/local/bin/

 最後に,Procmailのシステム共通設定ファイル/etc/procmailrcを図3のように設定する。


PATH=/bin:/usr/bin
MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/
LOGFILE=$MAILDIR/procmail.log
LOCKFILE=$HOME/.lockmail

:0fw
|/usr/bin/spamc

:0 fw
| /usr/local/bin/bsfilter --pipe --insert-flag --insert-probability
図3●/etc/procmailrcファイルを編集する

 これで,受信したすべてのメールはスパム・フィルタのSpamAssassinとbsfilterのチェックを受けるようになる。

DovecotとSquirrelmailの設定

 続いて,IMAPサーバーのDovecotを導入し,Webメーラー・ソフトのSquirrelmailを設定しよう。

 まず,Dovecotをインストールする。

# yum install dovecot

 Dovecotの設定ファイルは,/etc/dovecot.confである。サーバーをLAN内で設置する場合であれば,テキスト・エディタで「protocols」から始まる行を次のように書き換えるだけだ。

protocols = imap

 これでDovecotをIMAPサーバーとして稼働できる。設定を変えたら再起動しておこう。

# /etc/init.d/dovecot restart

 続いてSquirrelmailを設定する。Squirrelmailは,Webブラウザからメールを見られるようにするため,HTTPサーバー(Apache HTTP Server)とPHPも必要である。そこで,まとめてインストールしよう。

# yum install httpd php squirrelmail

 インストールできたら,正しく動作しているか,調べてみよう。

 まずは,ドキュメント・ルートの/var/www/htmlディレクトリに,次の内容のファイルを「phpinfo.php」という名前で保存する。

 次に,Webブラウザで次のURLにアクセスする。

http://localhost/phpinfo.php

 これで,写真2のような表示が出れば,正しくインストールされている。もし表示されない場合は,Webサーバーを再起動してみよう。

写真2●テスト・ファイルphpinfo.phpを表示したところ
写真2●テスト・ファイルphpinfo.phpを表示したところ
[画像のクリックで拡大表示]

# /etc/init.d/httpd restart

 PHPの動作が確認できたら,Squirrelmailの設定に移ろう。カレント・ディレクトリを/usr/share/squirrelmail/configに変更し,このディレクトリにあるconf.plを実行しよう。

# cd /usr/share/squirrelmail/config# ./conf.pl

 すると写真3の設定メニューが現れる。まず,「C」を入力して,カラー・モードをオフにする。コンソールの文字が見えない場合があるからだ。続いて,「2」として「Server Settings」を選択しよう。ここで「A」と入力してIMAPサーバーの設定を変更する(写真4)。

写真3●Squirrelmailの設定メニュー
写真3●Squirrelmailの設定メニュー
[画像のクリックで拡大表示]

写真4●IMAP Serverの設定を変更する
写真4●IMAP Serverの設定を変更する
[画像のクリックで拡大表示]

 写真4では,「Server software」を「other」に,「Delimiter」(フォルダの区切り文字)を「.」(ピリオド)に換えておく。そのほかの設定についても,写真4と同じになっているかを確認する。

 これでOKだ。最後に「S」と入力して設定を保存してから,「Q」と入力して設定メニューを終了させる。 設定を終わったら,次のURLをWebブラウザに入力する。

http://localhost/webmail

 設定が正しくできていれば,ログイン画面が表示されるはずだ。サーバーに登録されたユーザー名とパスワードを入力すればログインできる(写真5)。

タイトル
写真5●Squirrelmailにログインした

 写真5は,筆者が使用しているため,既にフォルダがいくつか設定されている。初期状態では受信箱(INBOXフォルダ),ゴミ箱(Trashフォルダ),送信済みフォルダ(Sentフォルダ)しか見えない。後述するスパム処理を行うために必要な「Junk」というフォルダを,画面上部の「フォルダ」というリンクをクリックして作成する。

 なお,今回設置したIMAPサーバーは,ThunderbirdといったIMAPをサポートするメーラーでも利用できる。使い慣れたメール・クライアントでも試してみよう。

ユーザー別の設定を行う

 以上でサーバー側の設定は完了した。続いて各ユーザーの設定を行う。

 まずは,管理者権限から,実際にメールを利用するユーザー・アカウントに切り替える。

 次に,スパム・メールを処理するProcmailを設定する。ホーム・ディレクトリに,p.88の図4を参考にした「.procmailrc」というファイルを作成する。.(ピリオド)から始まるため,隠しファイルとして見えないことがある。設定を変更して見てほしい。

図4●~/.procmailrcの例
図4●~/.procmailrcの例

 図4の設定例では,次の条件を満たすメールが,Junkフォルダに移動する。

・ホーム・ディレクトリにある.spammer_fromファイルに
記述されている送信元からのメール
・SpamAssassinでスパムと判定されたメール・bsfilterで
スパムと判定されたメール

 なお,IMAPフォルダはMaildirディレクトリにあり,ピリオドが区切り文字として使用されている。IMAP上でのJunkフォルダは,「~/Maildir/.Junk」と指定する必要があるので注意してほしい。

 次に,既にスパムの送信元と分かっているメール・アドレスを,ホーム・ディレクトリ以下に作成する「.spammer_from」ファイル内に,改行区切りで次のように列記しておく。

spammer@junk.comjunker@spammer.org……

 これで,記述されているアドレスからのスパム・メールは,無条件でJunkフォルダに移動する。

 次は,携帯電話へのメール転送の設定だ。携帯電話は大きなサイズのメールを扱えないことが多い。例では10000バイト以下のメールに限定した。また,HTMLメールも携帯電話では扱えないことがあるため,転送しないように設定した。バイト数などは,携帯電話の仕様やキャリアに応じて調節しよう。

プロバイダからのメール受信

 次に,インターネット・プロバイダのメール・サーバーからメールを受信する設定を施す。受信には,Fetchmailを利用する。既にインストールされているので,設定するだけだ。

 メールを利用する一般ユーザーのアカウントでホーム・ディレクトリに「.fetchmailrc」というファイルを作成し,図5のように記述しよう。「poll」の横にインターネット・プロバイダのメール・サーバーのホスト名またはIPアドレスを記述する。「user」と「pass」には,それぞれユーザー名とパスワードを設定する。

図5●~/.fetchmailrcの例
図5●~/.fetchmailrcの例

 最後は定期実行するために,「cron」にFetchmailを登録する。cronの設定は,次のようにコマンドを実行すると,個人用の設定ファイル(crontab)がGNOMEエディタで開かれる。

$ EDITOR=gedit crontab -e

 設定例を図6に示す。

# 15分おきにメールをプロバイダからメールを受信
*/15 * * * * /usr/bin/fetchmail -s >/dev/null 2>&1

# 午前2時にJunkフォルダの既読メールをスパムと学習(spamassassin)
0 2 * * * /usr/bin/sa-learn
 --spam --dir $HOME/Maildir/.Junk/cur/ >/dev/null 2>&1
# 午前3時にINBOXフォルダの既読メールを非スパムと学習(spamassassin)
0 3 * * * /usr/bin/sa-learn
 --ham --dir $HOME/Maildir/.INBOX/cur/ >/dev/null 2>&1

# 午前4時にJunkフォルダの既読メールをスパムと学習(bsfilter)
0 4 * * * /usr/local/bin/bsfilter
 --add-spam $HOME/Maildir/.Junk/cur/* >/dev/null 2>&1
# 午前5時にINBOXフォルダの既読メールを非スパムと学習(bsfilter)
0 5 * * * /usr/local/bin/bsfilter
 --add-clean $HOME/Maildir/.INBOX/cur/* >/dev/null 2>&1

# 午前5時30分にbsfilterのスパム・データベースをアップデート
30 5 * * * /usr/local/bin/bsfilter --update >/dev/null 2>&1
図6●crontabの設定例

 図6の設定では,プロバイダのメールを15分おきに受信する。午前2時以降の深夜には,自動的にSpamAssassinとbsfilterの学習プロセスを起動して,ベイジアン・フィルタの精度を向上させる。

 その際は,Junkフォルダの既読メール(Dovecotでは,フォルダ内のcur以下に既読メールが格納される)をスパムと学習する。同時に,INBOXフォルダの既読メールを非スパムとして学習する。これで,bsfilterでスパムと判定されたが,SpamAssassinでは非スパムと判定されたメール,あるいは逆の場合もスパムとして学習できる。

 これで,ThnkPad s30を使ったメール・サーバーを構築できた。プロバイダのメール・アカウントを使いつつ,転送やスパム処理を自前で行うだけで,かなり便利に使えるようになったはずだ。

 次回はWebサーバーなど定番のサーバー・アプリケーションをセットアップする。