メールアドレス毎にメールサーバを分ける

とある事情からメールアドレス毎にメールサーバを分ける事になったので、その時のメモ。

MTA が postfix の場合です。

transport にアドレスと送信先をセットするだけです。

ドメイン名を example.com で説明すると。。。

example.com を受信するように設定したメールサーバを 2 台作成します。
mail1.example.com(192.168.0.1), mail2.example.com(192.168.0.2) とします。
MX は mail1.example.com を設定しておき、example.com 宛てのメールは
mail1.example.com で一旦全て受けるようにしておきます。

メールアドレスと送信先メールサーバは以下とします。

  • user1@example.com は mail1.example.com で受信
  • user2@example.com は mail2.example.com で受信

mail1.example.com の transport

user2@example.com smtp:[192.168.0.2]

mail2.example.com の transport

user1@example.com smtp:[192.168.0.1]

アドレスを追加する場合はどっちのサーバで受信するかを指定しないといけないのでメンドイです。 😥

dovecot passwd-file の設定

認証用に MySQL などを使うケースが多いようですが、dovecot のみでお手軽に済ませたかったので passwd-file でセットアップしました。
OS は CentOS 4.7
postfix も dovecot も rpm 版です。

  1. 予め postfix で virtual domain の設定を行っておきました。
  2. postfix の設定で dovecot と関係があったのは以下。

    virtual_mailbox_maps
    ディレクトリ構造が dovecot の設定で必要になります。

    foo@example.com example/foo/Maildir/

    virtual_uid_maps, virtual_gid_maps

    virtual_uid_maps = static:5000
    virtual_gid_maps = static:5000
  3. /etc/dovecot.conf
  4. 必要なのは pop3 のみだったので imap はセットアップしませんでした。
    以下は設定した部分のみ。

    protocols = pop3
    #imap_listen = [::]
    #pop3_listen = [::]
    pop3_listen = *
    default_mail_env = maildir:/var/mail/vhosts/%d/%n/Maildir
    #auth_userdb = passwd
    auth_userdb = static uid=5000 gid=5000 home=/var/mail/vhosts/%d/%n
    #auth_passdb = pam
    auth_passdb = passwd-file /etc/dovecot.passwd
  5. passwd-file 作成
  6. PLAIN-MD5パスワードで作成します。
    以下は foo@example.com という pop3 ユーザで、

    パスワードが password の場合の例です。

    $ perl -MDigest::MD5 -e 'printf "{PLAIN-MD5}%sn", Digest::MD5::md5_
    hex("password")'
    {PLAIN-MD5}5f4dcc3b5aa765d61d8327deb882cf99

    /etc/dovecot.passwd を作成します。

    # vi /etc/dovecot.passwd
    foo@example.com:{PLAIN-MD5}5f4dcc3b5aa765d61d8327deb882cf99:5000:5000:::::/var/mail/vhosts/%d/%n
  7. dovecot 起動
  8. # chkconfig dovecot on
    # service dovecot start