Edited at

PostfixとDovecotでバーチャルメールボックスの設定をする

More than 3 years have passed since last update.

今回は下記バージョンでの設定手順になります。


  • Postfix: 2.9.6

  • Dovecot: 2.0.19


1. Postfixをインストール

yumなりaptなりportsなりソースからmakeするなり環境に合わせてインストールしてください。


2. Postfixで外部とメールの送受信を出来るようにする



  1. /etc/postfix/main.cfでPostfixの設定を変更

    変更するのは下記のとおり



    1. myhostnameパラメータ

      サーバのホスト名(FQDN)を指定する。


      /etc/postfix/main.cf

      myhostname = myhost.example.com
      




    2. mydomainパラメータ

      メールの送受信を行うドメイン名を指定する。


      /etc/postfix/main.cf

      mydomain = example.com





    3. inet_interfaces

      メールを受信するネットワークインターフェースを指定する。

      デフォルトはall(全ネットワークインターフェースからのメールを受け付ける。)

      ローカルからのメールしか受け付けたくないなどといった場合に設定する


      /etc/postfix/main.cf

      inet_interfaces = all
      




    4. inet_protocols

      通信に使用するIPプロトコルを指定する。


      /etc/postfix/main.cf

      inet_protocols = all
      




    5. myorigin

      メールの送信元アドレスに追加するドメインを指定する。


      /etc/postfix/main.cf

      myorigin = $myhostname  # -> user@myhost.example.com
      
      myorigin = $mydomain # -> user@example.com




    6. mydestination

      ローカルに配信するドメインを指定する。

      カンマ or 半角スペース区切りで複数指定可能。


      /etc/postfix/main.cf

      mydestination = $myhostname, localhost.$mydomain, localhost  # 自サーバに割り当てられたドメインのみ、ローカルに配信する
      




    7. mynetworks_style

      mynetworksパラメータの生成に使用されるパラメータ。
 mynetworksパラメータでは、信頼できるネットワーク、つまり他のメールサーバへのメール転送を受け付けるサーバを指定する。


      /etc/postfix/main.cf

      mynetworks_style = host  # 自サーバのみ。他のサーバからのメール転送は受け付けない
      




    8. relayhost

      外部からのメールを受け付けるドメインを指定する。

      デフォルトは空なので外部のメールはすべて受け付ける。

      外部へメールを転送するときに利用するメールサーバを指定する。

      プロバイダのSMTPサーバなどを使用する場合は、こちらで指定する。

      インターネットへ直接配送する場合は空でいい。(デフォルト)


      /etc/postfix/main.cf

      relayhost =  # インターネットへ直接配送するので空のまま
      




    9. home_mailbox

      受信したメールの保存形式と保存先を指定する。

      末尾に'/'を付けるとMaildir形式で保存されるようになり、メール1通に付き1ファイルとなる。

      逆に、'/'をつけないと、1ユーザーにつき1ファイルとなり、今までに受信したメール全部が1つのファイルとして保存されるので、パフォーマンスなどいろいろと残念な感じになります。


      /etc/postfix/main.cf

      home_mailbox = Maildir/
      






  2. 設定を反映させるためにpostfixのサービスを(再)起動

    各OSに応じてservice,kill, systemctl, /etc/init.d/postfix reloadなど使って再起動してください。




  3. ファイヤーウォールの設定

    TCP 25番ポートを空けといてください。




3. Dovecotをインストールする。

yumなりaptなりportsなりソースからmakeするなり環境に合わせてインストールしてください。

POP, IMAPを外部から使いたい場合はそれなりに設定をお願いします。

今回の解説対象外とします。


4. バーチャルメールボックスの設定



  1. バーチャルメールボックス用のOSユーザーとOSグループを作成する

    受信したメールのOS上のオーナーとなるユーザーを作成する。

    # groupadd -g 10000 mailuser
    
    # useradd -u 10000 -g mailuser mailuser



  2. メールの保存先ディレクトリを作成

    今回は/var/spool/virtualディレクトリにメールを保存するようにする。

    # mkdir /var/spool/virtual
    
    # chown -R mailuser:mailuser /var/spool/virtual



  3. postfixの設定変更

    下記のように設定を変更して、メールの送受信に使う 仮想的なユーザ (OSのユーザーではない!!)を作成する。


    /etc/postfix/main.cf

    # 仮想的なユーザーが所属するドメイン。mydestinationと同様にカンマor半角スペース区切りで複数指定可能。
    
    virtual_mailbox_domains = example1.com, example2.com
    # メールの保存先
    virtual_mailbox_base = /var/spool/virtual
    # 仮想的なユーザーとメールの保存先・ディレクトリがマッピングhash形式のファイル
    virtual_mailbox_maps = hash:/etc/postfix/vmailbox
    # 保存するメールのOS上のオーナーとグループを指定
    virtual_uid_maps = static:10000
    virtual_gid_maps = static:10000




  4. Postfix側で仮想ユーザーの作成

    下記仮想ユーザーを作成したい場合、

    下記のようにテキストファイルを作成して

    info@examle1.com     example1.com/info/Maildir/
    
    support@examle1.com example1.com/support/Maildir/
    testuser@examle2.com example2.com/testuser/Maildir/
    info@examle2.com example2.com/info/Maildir/

    下記コマンドでハッシュファイルに変換

    # postmap /etc/postfix/vmailbox
    

    これで仮想ユーザーへのメールがローカルに転送されるようになる。




  5. Dovecot側で仮想ユーザーの設定

    4.で設定した仮想ユーザー宛のメールを、ローカルからPOP3でメールが受信できるようにする。

    そのためにはPostfix上ででっち上げた仮想ユーザーの情報をDovecotにも設定する必要がある。



    1. 仮想ユーザーの情報が記載された設定ファイルを作成


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

      auth_mechanisms = cram-md5 plain
      
      !include auth-passwdfile.conf.ext
      !include auth-static.conf.ext


      /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
      }


      /etc/dovecot/conf.d/auth-static.conf.ext

      userdb {
      
      driver = static
      args = uid=10000 gid=10000 home=/var/spool/virtual/%d/%n
      }



    2. ファイルを作成したらDovecotを再起動



    3. 仮想ユーザーに対するパスワードを設定する



      1. 下記コマンドを実行して、/etc/dovecot/passwdに書き込むパスワードのハッシュ値を取得する

        doveadm pw
        
        Enter new password:
        Retype new password:
        {CRAM-MD5}913331d8782236a8ecba7764a63aa27b26437fd40ca878d887f11d81245c2c6b



      2. /etc/dovecot/passwdにユーザーとパスワードを書き込み

        info@example1.com:{CRAM-MD5}913331d8782236a8ecba7764a63aa27b26437fd40ca878d887f11d81245c2c6b
        







参考資料

http://www.postfix.org/

http://d.hatena.ne.jp/heihoo/20101208/p1

http://www.unix-power.net/linux/centos_postfix_virtual.html

http://dovecot.org/


補足

メールを1通も受信していない状態でPOP3でメールを受信しようとすると、Internal error occurred.などとエラーとともに通信が切断されます。

サーバのログを見ると、下記のようなログが出力されています。


Error: user info@example1.com: Initialization failed: Namespace '': Mail storage autodetection failed with


単純にメールを保存するディレクトリがないだけなので、何か適当なメールを送ってから、もう一度メールを受信してください。