今回は下記バージョンでの設定手順になります。
- Postfix: 2.9.6
- Dovecot: 2.0.19
1. Postfixをインストール
yumなりaptなりportsなりソースからmakeするなり環境に合わせてインストールしてください。
2. Postfixで外部とメールの送受信を出来るようにする
-
/etc/postfix/main.cf
でPostfixの設定を変更変更するのは下記のとおり
-
myhostnameパラメータ
サーバのホスト名(FQDN)を指定する。/etc/postfix/main.cfmyhostname = myhost.example.com
-
mydomainパラメータ
メールの送受信を行うドメイン名を指定する。/etc/postfix/main.cfmydomain = example.com
-
inet_interfaces
メールを受信するネットワークインターフェースを指定する。
デフォルトはall
(全ネットワークインターフェースからのメールを受け付ける。)
ローカルからのメールしか受け付けたくないなどといった場合に設定する/etc/postfix/main.cfinet_interfaces = all
-
inet_protocols
通信に使用するIPプロトコルを指定する。/etc/postfix/main.cfinet_protocols = all
-
myorigin
メールの送信元アドレスに追加するドメインを指定する。/etc/postfix/main.cfmyorigin = $myhostname # -> user@myhost.example.com myorigin = $mydomain # -> user@example.com
-
mydestination
ローカルに配信するドメインを指定する。
カンマ or 半角スペース区切りで複数指定可能。/etc/postfix/main.cfmydestination = $myhostname, localhost.$mydomain, localhost # 自サーバに割り当てられたドメインのみ、ローカルに配信する
-
mynetworks_style
mynetworksパラメータの生成に使用されるパラメータ。 mynetworksパラメータでは、信頼できるネットワーク、つまり他のメールサーバへのメール転送を受け付けるサーバを指定する。/etc/postfix/main.cfmynetworks_style = host # 自サーバのみ。他のサーバからのメール転送は受け付けない
-
relayhost
外部からのメールを受け付けるドメインを指定する。
デフォルトは空なので外部のメールはすべて受け付ける。外部へメールを転送するときに利用するメールサーバを指定する。
プロバイダのSMTPサーバなどを使用する場合は、こちらで指定する。
インターネットへ直接配送する場合は空でいい。(デフォルト)/etc/postfix/main.cfrelayhost = # インターネットへ直接配送するので空のまま
-
home_mailbox
受信したメールの保存形式と保存先を指定する。
末尾に'/'を付けるとMaildir形式で保存されるようになり、メール1通に付き1ファイルとなる。
逆に、'/'をつけないと、1ユーザーにつき1ファイルとなり、今までに受信したメール全部が1つのファイルとして保存されるので、パフォーマンスなどいろいろと残念な感じになります。/etc/postfix/main.cfhome_mailbox = Maildir/
-
-
設定を反映させるためにpostfixのサービスを(再)起動
各OSに応じて
service
,kill
,systemctl
,/etc/init.d/postfix reload
など使って再起動してください。 -
ファイヤーウォールの設定
TCP 25番ポートを空けといてください。
3. Dovecotをインストールする。
yumなりaptなりportsなりソースからmakeするなり環境に合わせてインストールしてください。
POP, IMAPを外部から使いたい場合はそれなりに設定をお願いします。
今回の解説対象外とします。
4. バーチャルメールボックスの設定
-
バーチャルメールボックス用のOSユーザーとOSグループを作成する
受信したメールのOS上のオーナーとなるユーザーを作成する。# groupadd -g 10000 mailuser # useradd -u 10000 -g mailuser mailuser
-
メールの保存先ディレクトリを作成
今回は
/var/spool/virtual
ディレクトリにメールを保存するようにする。# mkdir /var/spool/virtual # chown -R mailuser:mailuser /var/spool/virtual
-
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
-
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
これで仮想ユーザーへのメールがローカルに転送されるようになる。
-
Dovecot側で仮想ユーザーの設定
4.で設定した仮想ユーザー宛のメールを、ローカルからPOP3でメールが受信できるようにする。
そのためにはPostfix上ででっち上げた仮想ユーザーの情報をDovecotにも設定する必要がある。-
仮想ユーザーの情報が記載された設定ファイルを作成
/etc/dovecot/conf.d/10-auth.confauth_mechanisms = cram-md5 plain !include auth-passwdfile.conf.ext !include auth-static.conf.ext
/etc/dovecot/conf.d/auth-passwdfile.conf.extpassdb { 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.extuserdb { driver = static args = uid=10000 gid=10000 home=/var/spool/virtual/%d/%n }
-
ファイルを作成したらDovecotを再起動
-
仮想ユーザーに対するパスワードを設定する
-
下記コマンドを実行して、/etc/dovecot/passwdに書き込むパスワードのハッシュ値を取得する
doveadm pw Enter new password: Retype new password: {CRAM-MD5}913331d8782236a8ecba7764a63aa27b26437fd40ca878d887f11d81245c2c6b
-
/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
単純にメールを保存するディレクトリがないだけなので、何か適当なメールを送ってから、もう一度メールを受信してください。