現在、当サイトの 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 vmailboxpostfixの設定
肝の部分のみ記載しておく。
/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。
 
  
  
  
  

コメント