postfix/dovecotをvirtual_mailbox環境へ移行してみる

dovecot

現在、当サイトのpostfixの設定はメインのドメイン(正規ドメイン)をmydestinationで指定し、その他のドメイン(ホスティングドメイン)をvirtual_alias_domainsで指定し運用している。

今回、virtual_mailboxへ移行してみたのでその概要をメモしておく。

変更後の構成(概要)

  • localhostを含むすべてのドメインを仮想化
  • lmtpによる配送
  • dovecotで認証

公式サイト

まず、ここを読む。昔読んだときはvirtualドメインの必要性もなかったので、何を書いてあるのかよくわからなかったのだが、いざ必要になるとわかるようになるもんだ…

virtual_mailbox用ユーザの作成

virtual_mailboxの管理用のユーザを作成する。

/etc/passwdおよび/etc/shadow

vmailbox:x:9000:9000:virtual mail box:/var/mail/vmailbox:/sbin/nologin

/etc/group

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

/etc/postfix/vmailboxは以下のように記載する。

info@example.com        example.com/info/
webmaster@example.com   example.com/webmaster/
# catch-all アドレスを実装するには以下のエントリのコメントを外します。
# @example.com      example.com/catchall
...他のドメインのバーチャルメールボックス...

/etc/postfix/virtualの内容。

postmaster@example.com    info@example.com
sales@example.net         webmaster@example.com

最後にpostmapしておく。

dovecotの設定

だいたいこんな感じ。

/etc/dovecot/dovecot.conf

protocols = imap lmtp

/etc/dovecot/conf.d/10-master.conf

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。

コメント

タイトルとURLをコピーしました