SSLに対応しているオープンソースの POP3/IMAPサーバー Dovecot をソースからインストールします。
ユーザー認証は、Postfixの管理ツールである PostfixAdmin と連携させ、MySQLで行います。
また、SMTPサーバー Postfix と連携し、AUTH-SMTP認証で Dovecotを使用するように設定します。

事前準備

Dovecotをインストール、運用するにあたり、事前に下記をインストールしておきます。
  1. データベース
    MySQL 5.5以上
    ユーザー認証情報管理に MySQLを使用します

インストール

/usr/local/srcに Dovecot公式サイト からソールファイルをダウンロードしてインストールします。
なお、ソースファイルからインストールした際のアンインストールを考慮しインストールには、パッケージ管理ツール pacoを使用しています。
※ /usr/local/srcには、インストールするユーザーで書き込み権限を設定しています。
《先頭文字 $ は一般ユーザーを表しています》
$ Dovecot用のgroupおよびuserを作成します
$ sudo groupadd -g  97 dovecot
$ sudo useradd  -u  97 dovecot  -g dovecot -s /sbin/nologin -d /usr/local/libexec/dovecot
$ sudo useradd  -r     dovenull -g dovecot -s /sbin/nologin -d /usr/local/libexec/dovecot

$ cd /usr/local/src
# 2014/06/22時点での最新バージョンをダウンロードしています
$ wget http://www.dovecot.org/releases/2.2/dovecot-2.2.13.tar.gz

# ファイルを展開して、コンパイルを行います
$ tar xzvf dovecot-2.2.13.tar.gz
$ cd dovecot-2.2.13
$ ./configure \
    (configureパラメータ) \
    2>&1 | tee configure.log
$ make 2>&1 | tee make.log

# パッケージ管理ツール pacoを使用してインストールを行います
$ sudo env PATH=$PATH paco -D make install 2>&1 | tee make_install.log
configureパラメータには以下を指定しています。

--sysconfdir=/etc
定義ファイルのディレクトリを指定しています
--localstatedir=/var
データディレクトリを指定しています
--with-sql
SQLによる認証を行います
--with-mysql
MySQLを認証に使用します
--without-passwd
/etc/passwd認証は使用しません
--without-passwd-file
/etc/passwd形式のファイル認証は使用しません
--without-shadow
shadowパスワード認証は使用しません
--without-pam
pam認証は使用しません
--without-checkpassword
checkpasswordプログラム認証は使用しません
--without-bsdauth
BSD認証は使用しません
--without-static-userdb
静的なユーザーデータベース認証は使用しません
--without-prefetch-userdb
その他のユーザーデータベース認証は使用しません

設定

Dovecotのサンプル設定ファイルをコピーします。
《先頭文字 $ は一般ユーザーを表しています》
# サンプル設定ファイルのディレクトリに移動します
$ cd /usr/local/share/doc/dovecot/example-config

# 個別定義ファイル用のディレクトリを作成します
$ sudo mkdir /etc/dovecot/conf.d

# 各サンプル設定ファイルをコピーします
$ sudo cp dovecot.conf          /etc/dovecot/
$ sudo cp dovecot-sql.conf.ext  /etc/dovecot/
$ sudo cp conf.d/10-auth.conf   /etc/dovecot/conf.d/
$ sudo cp conf.d/10-mail.conf   /etc/dovecot/conf.d/
$ sudo cp conf.d/10-master.conf /etc/dovecot/conf.d/
$ sudo cp conf.d/10-ssl.conf    /etc/dovecot/conf.d/
$ sudo cp conf.d/20-imap.conf   /etc/dovecot/conf.d/
$ sudo cp conf.d/20-pop3.conf   /etc/dovecot/conf.d/
$ sudo cp conf.d/auth-sql.conf.ext /etc/dovecot/conf.d/

Dovecot全般の定義を行います。
/etc/dovecot/dovecot.conf ...《root権限で編集しています》
     :
# Protocols we want to be serving.
#protocols = imap pop3 lmtp
protocols = imap pop3
     :
#listen = *, ::
listen = *
     :
4行目
IMAP/POP3を有効にしています
7行目
IPv4のみを有効にしています

SQLの定義を行います。
/etc/dovecot/dovecot-sql.conf.ext ...《root権限で編集しています》
     :
# Database driver: mysql, pgsql, sqlite
#driver =
driver = mysql
     :
#connect =
connect = host=actmysql.server.localnet dbname=postfix user=postfix password=password
     :
#default_pass_scheme = MD5
default_pass_scheme = MD5-CRYPT
     :
#password_query = \
#  SELECT username, domain, password \
#  FROM users WHERE username = '%n' AND domain = '%d'
password_query = \
  SELECT password FROM mailbox WHERE username = '%u' AND active = '1'
     :
#user_query = \
#  SELECT home, uid, gid \
#  FROM users WHERE username = '%n' AND domain = '%d'
user_query = \
  SELECT concat('/home/mailbox/', maildir) AS home, 5000 AS uid, 5000 AS gid \
    FROM mailbox WHERE username = '%u' AND active = '1'
     :
4行目
MySQLを使用します
7行目
MySQLサーバーのホスト名、データベース名、接続ユーザー、および接続パスワードを指定します
PostfixAdminのデータベース名、接続ユーザーにしています
10行目
PostfixAdminのパスワード保存形式 MD5-CRYPT を指定しています
15-16行目
パスワードを取得する SQL文を指定します
21-23行目
ユーザ情報を取得するSQL文を指定します /home/mailboxはユーザメールボックスのホームディレクトリです uid, gidpostfixの virtual_uid_maps, virtual_uid_mapsと同じ値にします

認証定義を行います。
/etc/dovecot/conf.d/10-auth.conf ...《root権限で編集しています》
     :
#disable_plaintext_auth = yes
disable_plaintext_auth = no
     :
auth_mechanisms = plain login
     :
#include auth-system.conf.ext
!include auth-sql.conf.ext
     :
3行目
グループウェアでの接続を考慮し plaintextでの認証を許可しています
5行目
login認証を可能にしています
7-8行目
PAMによるパスワード認証を無効にして、SQLによるパスワード認証を有効にしています

メールボックスの定義を行います。
/etc/dovecot/conf.d/10-mail.conf ...《root権限で編集しています》
     :
#mail_location =
mail_location = maildir:%h
     :
3行目
メールボックスは Maildir形式で SQLで取得したユーザ情報のホームディレクトリに存在しています

各サービスの定義を行います。
/etc/dovecot/conf.d/10-master.conf ...《root権限で編集しています》
     :
  #unix_listener /var/spool/postfix/private/auth {
  #  mode = 0666
  #}
  unix_listener /var/spool/postfix/private/auth {
    mode  = 0666
    user  = postfix
    group = postfix
  }
     :
5-9行目
postfixからの認証要求を監視します
6行目
認証要求ソケットのアクセス権限です
7行目
認証要求ソケットの所有ユーザーです
8行目
認証要求ソケットの所有グループです

SSLの定義を行います。
各証明書は OpenSSLで作成したものを使用しています。
/etc/dovecot/conf.d/10-ssl.conf ...《root権限で編集しています》
     :
# SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>
#ssl = yes
ssl = yes
     :
ssl_cert = </home/ssl/server/mail/server.crt
ssl_key  = </home/ssl/server/mail/server.key
     :
#ssl_ca =
ssl_ca = </home/ssl/CA/cacert.pem
     :
4行目
SSL/TLS通信を行います
6行目
OpenSSLで作成したサーバー証明書を指定しています
7行目
OpenSSLで作成したサーバー秘密鍵を指定しています
10行目
OpenSSLの CA認証サーバー証明書を指定しています

以下のファイルについては変更していません。
/etc/dovecot/conf.d/20-imap.conf
IMAP定義ファイル
/etc/dovecot/conf.d/20-pop3.conf
POP3定義ファイル
/etc/dovecot/conf.d/auth-sql.conf.ext
SQL認証定義ファイル

自動起動設定

自動起動スクリプトを作成します。
/etc/rc.d/init.d/dovecot ...《root権限で作成しています》
#!/bin/bash
#
#       /etc/rc.d/init.d/dovecot
#
# Starts the dovecot daemon
#
# chkconfig: - 54 54
# description: Dovecot Imap Server
# processname: dovecot
# Source function library.
. /etc/init.d/functions

test -x /usr/local/sbin/dovecot || exit 0

RETVAL=0
prog="Dovecot IMAP/POP3"

start() {
        echo -n $"Starting $prog: "
        rm -f /usr/local/var/run/dovecot/master.pid
        daemon /usr/local/sbin/dovecot
        RETVAL=$?
        [ $RETVAL -eq 0 ] && touch /var/lock/subsys/dovecot
        echo
}

stop() {
        echo -n $"Stopping $prog: "
        killproc /usr/local/sbin/dovecot
        RETVAL=$?
        [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/dovecot
        echo
}

#
#       See how we were called.
#
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  reload|restart)
        stop
        start
        RETVAL=$?
        ;;
  condrestart)
        if [ -f /var/lock/subsys/dovecot ]; then
            stop
            start
        fi
        ;;
  status)
        status /usr/local/sbin/dovecot
        RETVAL=$?
        ;;
  *)
        echo $"Usage: $0 {condrestart|start|stop|restart|reload|status}"
        exit 1
esac

exit $RETVAL

作成した自動起動スクリプトが再起動時に実行されるようにします。
《先頭文字 $ は一般ユーザーを表しています》
$ sudo chmod 755 /etc/rc.d/init.d/dovecot
$ sudo chkconfig dovecot on

ファイアーウォール設定

ファイアーウォール iptables に POP3/IMAPの許可設定を追加します。
/usr/local/sbin/firewall.sh ...《root権限で編集しています》
     :
# --- (INPUTチェイン) ---
     :
# POP3/POP3S 接続を許可
iptables -A INPUT -i $EXTIF -p tcp --dport 110 -j CHK-SYNFLOOD
iptables -A INPUT -i $EXTIF -p tcp --dport 995 -j CHK-SYNFLOOD

# IMAP/IMAPS 接続を許可
iptables -A INPUT -i $EXTIF -p tcp --dport 143 -j CHK-SYNFLOOD
iptables -A INPUT -i $EXTIF -p tcp --dport 993 -j CHK-SYNFLOOD
     :
# --- (OUTPUTチェイン) ---
     :
# POP3/POP3S 接続を許可
iptables -A OUTPUT -o $EXTIF -p tcp --sport 110 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o $EXTIF -p tcp --sport 995 -m state --state ESTABLISHED -j ACCEPT

# IMAP/IMAPS 接続を許可
iptables -A OUTPUT -o $EXTIF -p tcp --sport 143 -j ACCEPT
iptables -A OUTPUT -o $EXTIF -p tcp --sport 993 -j ACCEPT
     :

ファイアーウォールの設定を反映させるため iptablesを再起動します。
《先頭文字 $ は一般ユーザーを表しています》
$ sudo firewall.sh

Dovecotの起動

Postfixと連携しますので、Dovecotは Postfixのインストール後に起動します。
《先頭文字 $ は一般ユーザーを表しています》
$ sudo service dovecot start

フィードバック

記事の内容についてのご質問、ご指摘、その他ご意見等は下記にてお願いいたします。
System House ACT公式ブログ内記事 :
Dovecot - CentOS メールサーバー構築 POP3/IMAPサーバー

トラックバックまたはコメントにてお寄せください。