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

  • 58
    いいね
  • 5
    コメント

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

  • 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

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