Help us understand the problem. What is going on with this article?

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした