Dovecot で IMAP サーバ構築

最終更新日:2006年09月13日

はじめに

概要

Dovecot で IMAP/IMAPS/POP3/POP3S サーバ環境を構築したので情報を整理しておく。
構築にあたっては、Courier-IMAP との互換性も少し考慮した(Courier-IMAP で動いているサーバもあるため)。

LDAP認証については、『Dovecot で IMAP/POP3 の LDAP認証』参照。

他のIMAPサーバ

他のIMAPサーバとの比較は以下のサイトが参考になる。

構築した環境

名称 バージョン 備考
Solaris 10 他のOSでも良かったけど、たまたま近くにあった。
Dovecot 1.0 beta5 2006.04.11時点での最新版。
メールの保存形式 --- やっぱ Maildir でしょう。
※ IMAPS/POP3S の環境も構築するので OpenSSL も必要だがこの場では割愛

インストール

ソースの入手

Dovecot のサイトからソースを入手。
(2006.04.11時点での最新版は 1.0 beta5)

ユーザ/グループ作成

Dovecot 用のユーザとグループを作成する。
# groupadd dovecot
# useradd -g dovecot -s /bin/false -d /dev/null dovecot

インストール

ソースを展開後、添付の INSTALL ドキュメントに従ってコンパイルおよびインストール。
$ tar zxf dovecot-1.0.beta5.tar.gz
$ cd dovecot-1.0.beta5
$ ./configure
$ make
# maek install

設定

Dovecotの設定

インストール時に入るサンプルの設定ファイルをコピーして編集する。
# cd /usr/local/etc
# cp dovecot-example.conf dovecot.conf

設定した項目を以下に示す(設定は環境によって異なる)。
# ベースディレクトリの指定。
# 指定しない場合は、/usr/local/var/run/dovecot/ になる。
base_dir = /var/run/dovecot/

# 動作させるプロトコルの指定
protocols = imap imaps pop3 pop3s

# 各プロトコルのポート番号指定
protocol imap {
  listen = *:143
  ssl_listen = *:993
}
protocol pop3 {
  listen = *:110
  ssl_listen = *:995
}

# プレインテキストでの認証を許可
disable_plaintext_auth = no

# 500 より小さい UID を使用している場合は設定する。
first_valid_uid = 100

# メール保存領域の指定。自動検出するが明示的に指定した。
default_mail_env = maildir:~/Maildir

# Courier-IMAP との互換性のための設定
namespace private {
  separator = .
  prefix = INBOX.
  inbox = yes
}

# POP3 UIDL フォーマットの指定。推奨値に設定。
protocol pop3 {
  pop3_uidl_format = %08Xu%08Xv
}

SSL証明書作成

ここでは、ローカル証明書の作成手順を示す。
証明書は、ソースを展開したディレクトリ(以降、$DOVECOT)にある doc/mkcert.sh で簡単に作成できる。

まず、証明書が入るディレクトリを作成しておく。
# mkdir -p /etc/ssl/certs
# mkdir -p /etc/ssl/private
カレントディレクトリを移動する。
# cd $DOVECOT/doc
SSL証明書作成用の設定ファイル dovecot-openssl.cnf を編集する。
主な編集箇所を以下に示す(値は各環境に合わせて適宜設定する)。
# 2文字の国コード。日本の場合は JP。
C=JP

# 都道府県名。
ST=Tokyo

# 市町村名。
L=Marunouchi

# 組織名(会社名)。
O=xxxxxx

# 部署名。
OU=yyyyyy

# サーバのFQDN。
CN=imap.xxxxxx.com

# 連絡先E-Mailアドレス
emailAddress=aaa@xxxxxx.com
スクリプトを実行して証明書を作成する。
# sh mkcert.sh
Generating a 1024 bit RSA private key
...........++++++
..++++++
writing new private key to '/etc/ssl/private/dovecot.pem'
-----

subject= /C=JP/ST=Tokyo/L=Marunouchi/O=xxxxxx/OU=yyyyyy/CN=imap.xxxxxx.com/emailAddress=aaa@xxxxxx.com
MD5 Fingerprint=90:01:80:4F:70:20:84:99:AA:47:51:51:EE:94:00:C3
証明書の内容を確認する場合は以下のコマンド。
$ openssl x509 -in /etc/ssl/certs/dovecot.pem -noout -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 0 (0x0)
        Signature Algorithm: md5WithRSAEncryption
        Issuer: C=JP, ST=Tokyo, L=Marunouchi, O=xxxxxx, OU=yyyyyy, CN=mail.xxxxxx.com/emailAddress=aaa@xxxxxx.com
        Validity
            Not Before: Apr 17 04:49:34 2006 GMT
            Not After : Apr 17 04:49:34 2007 GMT
        Subject: C=JP, ST=Tokyo, L=Marunouchi, O=xxxxxx, OU=yyyyyy, CN=mail.xxxxxx.com/emailAddress=aaa@xxxxxx.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (1024 bit)
                Modulus (1024 bit):
                    00:d0:e8:74:05:37:04:7a:2a:4c:1c:80:1e:be:ba:
                    07:2f:a7:c4:ec:50:5f:95:76:ff:8b:02:fd:f6:5e:
                    02:f6:6e:b0:b6:11:ea:53:e1:c3:87:37:4b:25:de:
                    44:08:03:c4:7d:e1:43:eb:38:01:f7:c4:68:a3:d4:
                    6d:fb:24:58:dd:e7:c4:64:5c:db:ff:93:2a:da:28:
                    eb:96:21:e7:e2:1e:c5:c9:66:27:b9:36:80:83:08:
                    81:7c:e9:8c:3f:f7:a9:7c:fb:4b:66:cf:e9:90:42:
                    90:0f:8f:1b:ed:0a:71:f2:e8:5b:82:64:81:50:20:
                    ca:9d:c3:88:95:53:38:f0:df
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            Netscape Cert Type:
                SSL Server
    Signature Algorithm: md5WithRSAEncryption
        4f:38:84:cb:a2:f2:e8:83:e8:80:2d:f0:21:6f:d7:49:4c:8d:
        b8:14:04:06:a5:48:0f:1c:f8:99:9a:ae:2f:55:d5:85:4f:7f:
        26:bd:de:0d:c0:d4:f7:d7:a0:73:61:1b:ac:92:64:81:56:f6:
        a2:d8:f0:49:57:31:9b:73:ce:87:e4:ac:42:a6:97:1e:30:de:
        15:5a:1e:ef:98:a2:ab:ae:28:72:63:90:d2:8d:77:0f:c5:de:
        d2:41:7f:82:ef:ae:03:fa:f8:1a:eb:88:07:a4:e9:d1:3e:32:
        b3:81:c4:6c:8a:1f:75:de:e1:75:39:15:a2:e1:52:c7:4f:12:
        47:83

起動スクリプト(rcスクリプト)作成

以下のような起動スクリプト /etc/init.d/dovecot を作成した。
#!/sbin/sh

CFG=/usr/local/etc/dovecot.conf
BIN=/usr/local/sbin/dovecot

if [ ! -f $CFG ]; then
        exit 0;
fi

case $1 in

'start')
        $BIN -c $CFG
        ;;
'stop')
        pkill -TERM -fu root $BIN
        ;;
'restart')
        pkill -TERM -fu root $BIN
        sleep 2
        $BIN -c $CFG
        ;;
*)      echo "Usage: $0 {start|stop|restart}"
        ;;
esac
リンクを作成して自動起動を有効にする。
# cd /etc/rc3.d
# ln -d ../init.d/dovecot S86dovecot
# cd /etc/rc2.d
# ln -d ../init.d/dovecot K10dovecot
# cd /etc/rc1.d
# ln -d ../init.d/dovecot K10dovecot
# cd /etc/rc0.d
# ln -d ../init.d/dovecot K10dovecot
# cd /etc/rcS.d
# ln -d ../init.d/dovecot K10dovecot

その他

初回起動(boot)時の注意点

初回起動(boot)時にSSLパラメータファイルが作成される。
SSLパラメータファイルが作成されるまで、SSL(IMAPS/POP3S)の接続はできない。但し、非SSL(IMAP/POP3)接続は問題なし。

初回起動(boot)時に以下のプロセスが実行され($base_dir は dovecot.conf で設定したディレクトリ)、
ssl-build-param $base_dir/login/ssl-parameters.dat
ログファイル(/var/log/syslog)には以下のメッセージが出力される。
Generating Diffie-Hellman parameters for the first time. This may take a while..
SSLパラメータファイルの作成が完了すると、上記プロセスは消滅しSSL(IMAPS/POP3S)接続ができるようになる。