戻る

courier-imap / IMAP over SSL (with Postfix)

対象バージョン ... woody(stable) 今更〜って感じがプンプンするけど、ちょっと imap を使う機会があって「結構便利かも!?」と思ったので早速つかってみました (^-^;
ついでなんで、SSL 経由での暗号化通信まで。(パッケージあるのでラクチン)
Postfix の基本インストール・設定での設定では、メールのスプールは
/var/mail/$USERNAME
に imap サーバの動作の有無にカンケー無く溜まっていくので、imap サーバが無事インストールした後に、スプールの保存形式を変更します。まぁ、あとでね。

基本パッケージのインストール

ひとまず、courier-imap をインストール。non SSL でのサービスのインストール。
# apt-get install courier-imap
多分、courier なんとかが、合計 3 つくらいインストールされる。設定も特になく、インストール完了し、daemon が起動するはず。

CRAM-MD5 認証の設定(サーバ)

そのままでは平文のパスワードがネットワークを流れてセキュリティ的によろしくないので、CRAM-MD5 で認証できるように設定。

/etc/courier/authdaemonrc 27 行目
authmodulelist="authcram authpam"
/etc/courier/imapd 111 行目 (実際は 1 行)
IMAP_CAPABILITY="IMAP4rev1 CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REF
ERENCES SORT AUTH=CRAM-MD5 AUTH=CRAM-SHA1"
でもって、再起動
# /etc/init.d/courier-authdaemon restart
# /etc/init.d/courier-imap restart
確認 (赤字がコマンド / 青背景が確認項目)
$ telnet localhost 143
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
* OK Courier-IMAP ready. Copyright 1998-2002 Double Precision, Inc.  See COPYING
 for distribution information.
1 capability
* CAPABILITY IMAP4rev1 CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES
SORT AUTH=CRAM-MD5 AUTH=CRAM-SHA1
1 OK CAPABILITY completed
1 logout
* BYE Courier-IMAP server shutting down
1 OK LOGOUT completed
Connection closed by foreign host.

CRAM-MD5 認証の設定 (ユーザ)

サーバが CRAM-MD5 認証に対応したら、CRAM-MD5 認証するためのユーザと、そのパスワードを設定する。
ユーザ名が zaki (OS アカウントとして存在) の場合
# pw2userdb | grep zaki > /etc/courier/userdb  二人目移行は追記(>>)しないとダメよ
# chmod 600 userdb   忘れるとエラーに ... MAY NOT HAVE GROUP OR WORLD PERMISSIONS!!
# userdbpw -hmac-md5 | userdb zaki set imap-hmac-md5pw
Password:            imap の認証用のパスワード
Reenter password:    imap の認証用のパスワード 繰り返す
# makeuserdb
で、ユーザで、Maildir 形式のメールを格納するためのディレクトリ作成
$ cd
$ maildirmake Maildir
$ maildirmake -f Trash Maildir
$ maildirmake -f Sent Maildir
$ maildirmake -f Draft Maildir mozilla Thunderbird だと "Drafts"かも
Trash (ゴミ箱), Sent (送信済みフォルダ), Draft (草稿) なんかは、MUA によっては自動で作ってくれます。
とりあえずこの時点で、MUA 使ってログインできるか試してみる。メールは 1 通もないけどね(^-^;

Maildir へのスプール移行

すみません、「移行」といっても、/var/mail/$USERNAME に溜まったメールを Maildir へコンバートするのではなく、以降の着信メールを Maildir へ溜めるようにする設定です。
1 か 2 どちらか設定すればよく、私は 2 の procmail を使っています。

■ 1 Postfix の main.cf でサーバワイドに設定
main.cf で以下の設定(未確認) (http://www.kobitosan.net/postfix/conf/main.cf.jp)
home_mailbox = Maildir/
■ 2 .forward や .procmailrc に記述
.forward なら、
~/Maildir/
.procmail なら、
:0 flag:
* conditions
$HOME/Maildir/

まぁ、DEFAULT を $HOME/Maildir/ にしても良いけど(多分)
とにかく、ディレクトリ名と末尾の"/"がポイント。
これで、メールが新しく着信すると、Maildir/new 以下に格納されるはずなので配送試験を行う。

IMAP over SSL

とまぁ、この時点で IMAP が利用可能になったわけですが、他のいろんなものと同じように、暗号化されるのはパスワードのみで、メール本文は平文で垂れ流されるので、全通信内容が暗号化されるように IMAP over SSL を使いましょう。幸い専用パッケージがあり、パッケージを入れると鍵関連も自動で作成されるので、Apache-SSL 並に簡単です。
# apt-get install courier-imap-ssl
鍵が自動で作成される。設定ファイルは何も変更しなくてよかった… (いいのか??)
ただ、サーバ証明書関係が、サーバ名 "localhost" として作成されてしまうので(なんでやー)、何かと都合が悪い。ので、Secure MTA(Postfix)のやり方で作った鍵を使うように修正した。
TLS_CERTFILE=/etc/ssl/servkey/server.pem
↑これ、標準では存在しない、私が勝手に作ったディレクトリ・ファイルなので、各自の環境に合わせる。

(おまけ) STARTTLS

まぁ、せっかくなので。tcp/143 に平文で接続し、starttls コマンドにより暗号化通信を行うパターン。Web で探しても資料が無くて(ほとんどの解説ページは、標準で starttls できるような感じだった。そうなの??)、試行錯誤で設定したので、せっかくなのでメモ。
/etc/courier/imapd の末尾にでも、(imapd-ssl を参考に)以下を追記する。
IMAPDSTARTTLS=YES
IMAP_TLS_REQUIRED=0
COURIERTLS=/usr/bin/couriertls
TLS_STARTTLS_PROTOCOL=TLS1
TLS_CERTFILE=/etc/ssl/servkey/server.pem
TLS_VERIFYPEER=NONE
で、courier-imap を restart する。
$ telnet localhost 143
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
* OK Courier-IMAP ready. Copyright 1998-2002 Double Precision, Inc.  See COPYING
for distribution information.
1 capability
* CAPABILITY IMAP4rev1 CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES
SORT AUTH=CRAM-MD5 AUTH=CRAM-SHA1 STARTTLS
1 OK CAPABILITY completed
1 logout
* BYE Courier-IMAP server shutting down
1 OK LOGOUT completed
Connection closed by foreign host.