courier-imap / IMAP over SSL (with Postfix)
基本パッケージのインストール
ひとまず、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.