Postfixを使ったメールサーバを構築します。構築する仕様は次の通り。
- バーチャルドメイン対応
- アカウントと転送先の定義にはDBファイルを使用(PostfixAdminではない)
- Quotaを利用しない
- Maildir形式とする
- POP3サーバにDovecotを使う
試した環境。
| OS | CentOS5.2(i386) |
| Postfix | postfix-2.3.3(RPM) |
| Dovecot | dovecot-1.1.2(ソース) |
アカウントの収容方式について。
- メールアカウントはドメインを含まない形で収容する
- /home/mailuser/UserName/Maildir/ というディレクトリ
- メールアカウントは UserName@DomainName の形式
- @より前の部分をサーバ内でユニークなものにする
- メールアカウントはUNIXユーザでは無く、Dovecot専用アカウントとする
- メールボックスも専用の領域に置く
- PostfixではVirtualDomain設定をし、メールアドレスをDovecotのアカウントにマッピングする
PostfixとDovecotのMaildir構成図。
- Postfix側は/etc/postfix/vmailboxファイルでMaildirの場所を定義する
- Dovecot側は/user/local/etc/dovecot.conf、dovecot-passwdファイルで定義する
Postfixのインストール
今回は、Quotaを利用しないので、CentOSのRPM版Postfixをそのまま利用します。
下準備
メールボックスを保存するためのディレクトリ、およびメールボックス用のLinuxアカウントを作ります。
ここでは、メールディレクトリのオーナーをmailuserとして作りました。
[root]# groupadd -g 10000 mailuser [root]# useradd -u 10000 -g 10000 -d /home/mailuser -s /sbin/nologin mailuser [root]# id mailuser uid=10000(mailuser) gid=10000(mailuser) groups=10000(mailuser)
メールディレクトリは次の場所に作成されていきます。
- /home/mailuser/UserName/Maildir/
Postfixの設定
バーチャルドメイン対応の設定をします。設定ファイル名と役割。
| /etc/postfix/main.cf | Postfixのメイン設定ファイル |
| /etc/postfix/vmailbox | バーチャルドメインのメールディレクトリの定義 |
| /etc/postfix/virtual | バーチャルドメインの転送先の定義 |
master.cfは変更ありません。
main.cfの変更箇所。
myhostname = mail.example.jp
mydomain = example.jp
myorigin = $mydomain
mydestination =
mynetworks = 127.0.0.0/8
alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/etc/postfix/aliases
home_mailbox = Maildir/
smtpd_banner = $myhostname ESMTP unknown
## Addtional --------------------------------------------------
## POP before SMTP support
smtpd_recipient_restrictions = permit_mynetworks,
reject_unauth_destination
## Virtual Domain support
virtual_mailbox_base = /home/mailuser
virtual_alias_maps = hash:/etc/postfix/virtual
virtual_alias_domains = $virtual_alias_maps
virtual_mailbox_domains = $mydomain,
example.com,
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_minimum_uid = 10000
virtual_uid_maps = static:10000
virtual_gid_maps = static:10000
virtual_mailbox_limit = 512000000
## Other configuration
maximal_queue_lifetime = 2d
bounce_queue_lifetime = 1d
disable_vrfy_command = yes
message_size_limit = 512000000
## End --------------------------------------------------------------------
ここでは、virtual_mailbox_domains で example.jp と example.com を定義しています。
バーチャルドメインの設定
virtual_mailbox_maps用のファイルを作ります。内容は、メールサーバが受信するメールアドレスおよび、メールを保存するディレクトリ名を記述します。
ファイル名 /etc/postfix/vmailbox
# virtual mailbox # mailaddress maildir # virtual_mailbox_base = /home/mailuser # example.jp postmaster@example.jp p_master1/Maildir/ test.user@example.jp test.user/Maildir/ # example.com postmaster@example.com p_master2/Maildir/ user1@example.com user1/Maildir/
virtual_alias_maps用のファイルを作ります。内容は、メールサーバが受信するメールアドレスおよび、転送先のメールアドレスを記述します。書式はPostfixのvirtualに従います。
ファイル名 /etc/postfix/virtual
# example.jp webmaster@example.jp postmaster@example.jp # example.com webmaster@example.com user1@example.com # 複数の転送先を設定するには、「,」で区切ります。 # 転送しつつMaildirに残したい場合は、自分のアドレスを書きます。 # user1@example.com user1@example.com,user1@example.org
それぞれのファイルを編集した後は postmap コマンドで DBファイルを更新します。
[root]# postmap /etc/postfix/vmailbox [root]# postmap /etc/postfix/virtual ※Postfixの再起動は不要です。
バーチャルドメイン用のメールアカウントをvmailboxに定義した後に、該当アカウント宛てにテストメールを送信します。メールサーバのコマンドラインから実施しておきます。
[root]# mail -s "testmail" user1@example.com
Postfix側ではメールを受信した後にMaildirを自動生成します。Maildirが生成されていない
状態では、以下でPOPアカウントを作成してもログイン時にエラーになってしまいます。そのため、メールボックスを定義した後で必ずMaildirを作成しておきましょう。
PostfixでVirtualドメイン構成をする場合の、設定ファイル構成図。
参考サイト
Postfixのバーチャルドメインについて。
- Postfixのぺーじ - manual virtual(5)
- Postfixのぺーじ - バーチャルドメインホスティングHowto
Dovecotのインストール
POP3/IMAPサーバとしてDovecotをインストールします。Dovecotはソースコードで配布されているものをコンパイルして利用します。
インストール
Dovecot公式サイトよりソースコードのアーカイブを入手します。
- http://www.dovecot.org/
- ファイル dovecot-1.1.2.tar.gz
アーカイブを展開し、configureを実施します。オプションは次のとおり。不要なモジュールを全てwithoutにします。ここではDovecot独自のユーザ/パスワードを利用します。
./configure \ --disable-ipv6 \ --without-vpopmail \ --without-sql \ --without-pgsql \ --without-mysql \ --without-sqlite \ --without-passwd \ --without-nss \ --without-shadow \ --without-pam \ --without-checkpassword \ --without-gssapi \ --without-ldap \ --without-db \ --without-sql \ --with-passwd-file \ --with-static-userdb
あとは make~make installを実行することで /usr/local/sbin にインストールされます。
設定
Dovectoを実行するためのユーザをLinux上に作成しておきます。
[root]# useradd -c Dovecot -s /sbin/nologin -d /var/empty/dovecot -m -u 93 dovecot
Dovecotの設定ファイルは /usr/local/etc/dovecot.conf になります。POPユーザのpasswdファイルも同じ場所に置きます。
ファイル dovecot.conf の編集後の状態。
#
# dovecot.conf - for dovecot-1.1.2
# -2008/09/16-
# Protocol , listen if/port
login_greeting = POP3 ready.
protocols = pop3 imap
listen = *
ssl_disable = yes
disable_plaintext_auth = no
# logfile to syslog
#log_path = /var/log/dovecot.log
#log_timestamp = "%b %d %H:%M:%S "
syslog_facility = local6
# auth debug mode
auth_verbose = no
#auth_debug = no
#auth_debug_passwords = no
#default_mail_env = maildir:/home/maildir/%d/%u/Maildir
protocol imap {
listen = *:143
}
protocol pop3 {
listen = *:110
}
mail_location = maildir:/home/mailuser/%u/Maildir
mail_uid = 10000
mail_gid = 10000
auth default {
mechanisms = plain login digest-md5 cram-md5
passdb passwd-file {
args = /usr/local/etc/dovecot-passwd
}
#userdb static {
# args = uid=10000 gid=10000 home=/home/mailuser/%u/Maildir
#}
}
dict {
}
plugin {
}
設定概要
- POP3,IMAPサーバを有効
- Dovecotのログをsyslog経由でlocal6に出力
- Maildirの場所を maildir:/home/mailuser/%u/Maildir と指定
- %uにはPOP/IMAPで認証されたユーザ名が入る
- このサーバの仕様ではPOP/IMAPのユーザIDはメールアドレスとは独立して設定している
- POP/IMAPログイン時は Username / Password のみを用いる。メールアドレスは使わない。
- Maildirのuid/gidを10000に指定。これは、ディレクトリのオーナーのものを使う。
- 認証用パスワードファイルを /usr/local/etc/dovecot-passwd と指定。
Dovecotのログをsyslogで保存するために/etc/syslog.confを編集します。
# Log anything (except mail) of level info or higher. → local6.noneを追加 # Don't log private authentication messages! *.info;mail.none;authpriv.none;cron.none;local6.none /var/log/messages # pop/imap log → 以下2行を追加 local6.* /var/log/poplog
また、poplogをローテートするように/etc/logrotate.d/syslogも編集しておきます。最後にsyslogdを再起動して完了です。
POPアカウントの作成
次にPOP/IMAPアカウントを作成します。これは ユーザID:パスワード 形式の文字列をDovecotのパスワードファイルに記載します。
- パスワードファイル /usr/local/etc/dovecot-passwd
まず、パスワードを決めてdovecotpwコマンドで暗号化します。
[root]# dovecotpw -s HMAC-MD5 -p hogehoge
{HMAC-MD5}dcbe8064d829ee98ad16817611150a6c7ee5fe1c9dfd79f5395be892f162bfd3
・暗号化方式は適当に選択します。
・メールクライアント側でAPOPやIMAP(CRAM-MD5)を利用する場合は、パスワードを Cleartext形式にします。
生成されたパスワードを、dovecot-passwd ファイルに追加します。1行に1ユーザ分を書きます。
# username:password
daresore:{HMAC-MD5}dcbe8064d829ee98ad16817611150a6c7ee5fe1c9dfd79f5395be892f162bfd3
dovecot-passwdファイルの変更では dovecotプロセスを再起動する必要はありません。
設定ファイル類のパーミッション
dovecot.confとdovecot-passwdファイルは、オーナーをdovecot:rootにしておき、一般ユーザが閲覧できないようにしておくべきでしょう。
[root] ls -l /usr/local/etc -rw-r----- 1 dovecot root 860 Jul 1 13:18 dovecot.conf -rw-r----- 1 dovecot root 50 Jul 1 13:22 dovecot-passwd
自動起動スクリプト
Dovecotのソースコードには自動起動スクリプトが含まれていないようなので、SRPM版から拝借します。
#!/bin/bash
#
# /etc/rc.d/init.d/dovecot
#
# Starts the dovecot daemon
#
# chkconfig: - 65 35
# 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"
start() {
echo -n $"Starting $prog: "
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
以上で準備ができれば、Dovecotを起動します。
参考サイト
- Dovecot日本語翻訳プロジェクト

