現在、当サイトの postfix の設定はメインのドメイン(正規ドメイン)を mydestination で指定し、その他のドメイン(ホスティングドメイン)を virtual_alias_domains で指定し運用している。
今回、virtual_mailbox 環境へ移行してみたのでその概要をメモしておく。
変更後の構成(概要)
- localhost を含むすべてのドメインを仮想化
- lmtp による配送
- dovecot で認証
公式サイト
まず、ここを読む。昔読んだときは virtual ドメインの必要性もなかったので、何を書いてあるのかよくわからなかったのだが、いざ必要になるとわかるようになるもんだ…
virtual_mailbox 用ユーザの作成
virtual_mailbox の管理用のユーザを作成する。
/etc/passwd および /etc/shadow
vipw コマンドおよび vipw -s で管理者用のユーザ (vmailbox) を作成する。このユーザではログインできないようにしておく。
vmailbox:x:9000:9000:virtual mail box:/var/mail/vmailbox:/sbin/nologin
/etc/group
ユーザ vmailbox が所属する group (vmailbox) を作成する。
vmailbox:x:9000:
ディレクトリ作成およびアクセス権設定
# cd /var/mail
# mkdir vmailbox
# chown -R vmailbox:vmailbox vmailbox
# chmod 750 vmailbox
postfixの設定
肝の部分のみ記載しておく。
/etc/postfix/main.cf
mydestination を空白にする。バーチャルメールボックスドメイン名を mydestination やvirtual_alias_domains に入れてはいけない。
関連のある定義はこんな感じ。
mydestination =
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain =
virtual_mailbox_domains = yo7612.com example.com example.net
virtual_mailbox_base = /var/mail/vmailbox
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_minimum_uid = 100
virtual_uid_maps = static:9000
virtual_gid_maps = static:9000
virtual_alias_maps = hash:/etc/postfix/virtual
virtual_transport = lmtp:inet:127.0.0.1:24
/etc/postfix/vmailbox と /etc/postfix/virtual
virtual_mailbox_maps で指定するファイル /etc/postfix/vmailbox は以下のように記載する。
info@example.com example.com/info/
webmaster@example.com example.com/webmaster/
# catch-all アドレスを実装するには以下のエントリのコメントを外します。
# @example.com example.com/catchall
...他のドメインのバーチャルメールボックス...
また、virtual_alias_maps で指定するファイル /etc/postfix/virtual の内容は以下の通り。
postmaster@example.com info@example.com
sales@example.net webmaster@example.com
最後に 上記のファイルを指定して、postmap コマンドを実行しておく。
dovecot の設定
だいたいこんな感じ。
/etc/dovecot/dovecot.conf
protocols に lmtp を加えておく。
protocols = imap lmtp
/etc/dovecot/conf.d/10-master.conf
lmtp に関する定義を追加する。
service imap-login {
inet_listener imap {
port = 143
}
inet_listener imaps {
port = 993
ssl = yes
}
}
service lmtp {
unix_listener lmtp {
mode = 0600
user = postfix
group = mail
}
inet_listener lmtp {
port = 24
}
}
service auth {
unix_listener auth-userdb {
}
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
}
/etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = yes
auth_mechanisms = cram-md5 plain login
!include auth-passwdfile.conf.ext
!include auth-static.conf.ext
/etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:/var/mail/vmailbox/%d/%n
/etc/dovecot/conf.d/15-mailboxes.conf
namespace inbox {
mailbox Drafts {
auto = subscribe
special_use = \Drafts
}
mailbox Junk {
auto = subscribe
special_use = \Junk
}
mailbox Trash {
auto = subscribe
special_use = \Trash
}
mailbox Sent {
auto = subscribe
special_use = \Sent
}
mailbox "Sent Messages" {
special_use = \Sent
}
}
/etc/dovecot/conf.d/auth-passwdfile.conf.ext
passdb {
driver = passwd-file
args = scheme=CRAM-MD5 username_format=%u /etc/dovecot/passwd
}
userdb {
driver = passwd-file
args = username_format=%u /etc/dovecot/passwd
override_fields = home=/var/mail/vmailbox/%d/%n
}
/etc/dovecot/conf.d/auth-static.conf.ext
userdb {
driver = static
args = uid=vmailbox gid=vmailbox home=/var/mail/vmailbox/%d/%n
}
/etc/dovecot/passwd
info@example.com:{CRAM-MD5}passwd1:9000:9000::/var/mail/vmail/example.com/info:/bin/false::
webmaster@example.com:{CRAM-MD5}passwd2:9000:9000::/var/mail/vmail/example.com/webmaster:/bin/false::
(以下省略)
メールスプールの移行
バックアップとって、定義に合せてmvして、chownすればOK。
コメント