ローカルIMAPサーバの構築方法

 インターネットサービスプロバイダ(ISP)のサーバからメールを取得するように普通のやり方で電子メールクライアントを設定するだけでは、十分に対応しきれない状況もある。たとえば、デスクトップPCの補助用にノートPCを導入している場合や、ときおりパートナーのコンピュータを使って自分のメールを読む場合だ。そうした状況では、自分が使うすべてのクライアントマシンでメールの同期を取るという課題にぶち当たる。POP3(Post Office Protocol)の代わりにIMAP(Internet Mail Access Protocol)を使うという手もあるが、その場合はすべてのメールをISPのサーバにためておく必要があり、それはそれで問題が残る。ここでは、自分のネットワーク上にメールの読み出しと保管用のサーバを1台セットアップすることで、メールクライアントが何台あってもメールを同じように扱えるようにする方法を紹介する。

 別に、本格的なインターネットメールサーバを構築しようというのではない。「本来」のインターネットメールサーバは、特定のドメインでメールホストとして指定される公開サーバである。ほかのサーバに届いたそのドメイン宛てのメールは、このメールサーバに転送される。そして、そのメールサーバによって宛先のユーザに届けられる。利用者側としては、公開メールサーバのセキュリティ管理はISPに委ねておき、ローカルのメールサーバを立てて公開メールサーバから定期的に自分たちのメールを取得することになる。こうすることで、こちらのサーバをインターネットに直接さらさずに済むようになっている。

 本稿では、最新版(Hardy Heron)のUbuntu Serverが動作するシステムを想定して話をすすめるが、ここで述べるやり方やソフトウェアはほかのLinuxディストリビューションにも適用できる。

IMAPとPOP3
 IMAPとPOP3はどちらもメール転送プロトコルだが、POP3が主にサーバからのメール取得に重点を置いているのに対し、IMAPは基本的にメールをサーバに残したままアクセスを行うのに使われる。今回の試みでは、まさにこの部分が大きな利点となる。複数のメールクライアント(それぞれが別のマシン上にあってもよい)が、自らの管理する1台のサーバに保管された同一のメールを参照できるのだ。

 Ubuntu Serverのインストールは、ほとんどデフォルト設定のままで進めていけばよい。ただ、「Software Selection(ソフトウェアの選択)」の画面にきたら「Mail Server(メールサーバ)」を選択する。これで、メールを扱うのに必要なソフトウェア(このサーバ上でメール配信の処理を行うプログラムPostfixなど)が自動的にインストールされる。また、「Mail Server」を選択すると、インストールの途中でその設定に関する質問が追加される。具体的には、対応するドメイン名がメールアドレスに含まれていない場合に使用される完全装飾ドメイン名(FQDN:Fully Qualified Domain Name)の入力が必要になる。しかし、今回の設定では特に使用しないので、最もよく使うメールアドレスのドメイン名を入力しておけばよい。

 また、SMTP(Simple Mail Transport Protocol)リレーホストの入力も求められる。とりあえず、通常のメールクライアントで使っているSMTPホスト名(通常はISPのネットワーク上にあるサーバ)を入力しておく。

 別のLinuxディストリビューションでこのサーバを構築する場合は、メールサーバ用のソフトウェアがインストールされていることを確認する。ここで紹介する設定内容は、Postfixやqmail 、あるいはsendmailでもすべて問題なく動作する。

メールの読み出し

 このサーバは、直接インターネットに接続するわけでも他のメールサーバから直接アクセスされるわけでもないので、何らかの方法でメールを取得する必要がある。そんなときに使えるのがfetchmailだ。

 fetchmailには2つの働きがある。1つは、メールクライアントとして動作し、POP3またはIMAPを使って特定のアカウントのメールを取得すること。また、Thunderbirdのようなメールクライアントとは違い、fetchmailはこうしたメールを保管したり表示したりせずに転送を行う。これがもう1つの働きだ。fetchmailは、メールサーバのメール転送エージェント(MTA:Mail Transport Agent)に接続してメールを渡す。こうして、メールサーバはあたかも外部のメールサーバからメールを受け取ったかのような形になる。あとは、通常の設定と同様、メールサーバ側がローカルでメールの処理を行う。

 デフォルトのUbuntu Serverにはfetchmailがインストールされていないが、「sudo apt-get install fetchmail」で簡単にインストールできる。fetchmailの設定では、「フェッチ」を行うメールアドレスと、そうしたメールを参照するユーザ名の入力が必要になる。また、複数のユーザでメールを利用する場合は、この段階で「adduser」コマンドを使ってサーバ上に別のアカウントを作成しておく。各ユーザのメールアドレスとアカウント名は、(管理上は一致させておいたほうが楽だが)一致していなくてもよい。ここで作成したユーザ名とパスワードは、あとでメールクライアントを設定するときにも使用する。

 fetchmailには、バックグラウンドで動作させて、設定ファイルに指定した間隔で定期的なメールチェックを行う”daemon”モードが用意されている。Ubuntu Serverの場合は「/etc/default/fetchmail」ファイルを編集して「START_DAEMON=no」という行を「START_DAEMON=yes」に変えることで、ブート時にfetchmailを起動できる。

 fetchmailの設定を実際に利用する前のテストとして、適当な作業ディレクトリに「fetchmailrc」というファイルを作り、次のようにユーザごとに設定を記述する。

poll pop.example.com proto pop3 user saul with password competent is saul here
poll pop.example.com proto pop3 user fred with password stolid is fred here
poll pop.example.com proto pop3 user orrie with password slick is orrie here

 fetchmail設定の構文はくだけた感じがするが、とてもわかりやすい。上記の設定は、POP3プロトコルを使ってリモートサーバ上にあるsaul、fred、orrieの各ユーザ宛てのメールを読み出し、ローカルメールサーバ上にあるユーザ別の受信箱に保存するというものだ。また、fetchmailの設定は、リモートサーバ上にあるsaul、fred、orrieのメールを読み出して、ローカルサーバ上に用意した単独ユーザの受信箱に置く場合にも有効である。このようにpollコマンドは非常に汎用性が高い。fetchmailのドキュメントには、多くの追加オプションが詳しく記されている。よく使われるものの1つに、SSLを必要とする、またはその機能を持つサーバ間でSSL使うための「options ssl」オプションがある。

 「fetchmailrc」の設定をテストするために「 fetchmail -v -f fetchmailrc」というコマンドを実行してみよう。これにより、fetchmailは設定ファイルに基づいて動作し、問題発生の有無など処理状況を知らせる情報が大量に出力される。満足のいく結果が得られたら、先ほどの「fetchmailrc」ファイルを「/etc/fetchmailrc」とし、「sudo /etc/inid.d/fetcmail start」コマンドによってfetchmailデーモンを起動する。

メールの配信

 メールをローカルサーバ上に取り込んだら、参照できるようにする必要がある。ここでは、DovecotメールサーバとIMAPプロトコルを利用する。Dovecotは設定が容易で、しかもUbuntuインストール時に「Mail Server」を選択していればすでにインストールは済んでいる。サーバマシンにまだインストールされていない場合も、使っているディストリビューションのパッケージリポジトリから簡単にインストールできる。

 ここで、デフォルトのDovecotインストール環境から1か所だけ設定の変更が必要になる。「/etc/dovecot/dovecot.conf」ファイルを開いて「mail_location」という変数の記されたセクションを探し、次の行を追加する。

mail_location=mbox:~/Mail:INBOX=/var/mail/%u

 この設定により、Dovecotにいくつかの指示が与えられる。まず、メールをmbox形式(伝統的かつ直接的な記憶形式)で保存すること。次に、ユーザがメールクライアントで作成したIMAPフォルダを、アカウントのホームディレクトリにある「Mail」ディレクトリに保持すること。最後は、各ユーザの受信メールの保存先を「/var/mail」ディレクトリ内のユーザアカウント名(%u)と同じ名前のファイルにすることだ。

 上記の変更が済んだら「/etc/init.d/dovecot restart」コマンドでDovecotサーバを再起動する。

 これで、メールサーバとして機能するようになったはずだ。テストとして、好きなメールクライアントを立ち上げてアカウントを追加し、構築したサーバを参照するように設定を行う。デフォルトのDovecotは、外部IPアドレスからの受信を993番ポートでしか行わないように設定されている。このポートはIMAP + SSL(IMAPSとも呼ばれる)に割り当てられているので、メールクライアントの設定時にはこのプロトコルを指定する。アカウントとパスワードには、先ほどサーバ側で作成した組の1つを用いる。

メールの処理

 クライアントをDovecotサーバに接続したあとは、クライアント側ではなくサーバ側で受信メールの処理を行うことになる。これにより、どのクライアントで接続しているかを気にせずに、メールを処理できるわけだ。

 サーバ側の処理の多くは、procmailというプログラムを使って行える。procmailでは、パターンを利用した設定言語を用いて、受信メールのあらゆる操作ができる。例として、SpamAssassinという別のプログラムを利用してprocmailによるスパムのフィルタリングを行ってみよう。

 デフォルトではメールサーバにSpamAssasinがインストールされていないが、apt-getを使えばインストールできる。SpamAssasinを有効にするには、「/usr/share/doc/spamassassin/procmail.example」というファイルを、このフィルタを利用するユーザの「~/.procmailrc」ディレクトリにコピーする。コピーが済んだら、ファイルの先頭に次の行を追記する。

MAILDIR=$HOME/Mail

 こうすると、procmailは指定したディレクトリを起点として、下位のフォルダやファイルを参照できるようになる。

す  でに用意されている「.procmailrc」は、スパムをその確実性に応じて「almost-certainly-spam」と「probably-spam」という2種類のフォルダに隔離する。この「.procmail」ファイルにルールを追記すれば、それ以上の処理が可能になる。たとえば、次のルールは、「To:(宛先)」に“mail-list”を含むアドレスが指定されたメールを「Mail」ディレクトリの「Mail-List」フォルダに移動する。

:0:
*	O_mail-list
Mail-List

 procmailの設定言語は強力だが複雑だ。procmailのホームページには、さまざまなWebサイトへのリンクや、便利なprocmailのサンプル「レシピ」が掲載されているので、詳細はそちらを参照してほしい。

 ローカルのメールインフラストラクチャの構築については以上だ。ローカルのIMAPサーバは強力で柔軟性が高く、小中規模グループにおけるメールのニーズに対応できる。セットアップが済めば、「/var/mail」ディレクトリと個々のユーザの「~/Mail」ディレクトリの適切なバックアップ以外のメンテナンスはほとんど不要だ。利用するコンポーネントはいずれも、十分な実績があり、柔軟なカスタマイズが可能なので組織の特定の要求にも対応できる。最初に少し手間をかければ、長期的に利用者のニーズに応えてくれるメールシステムを手にできるだろう。

Linux.com 原文(2008年9月9日)