Postfix + dovecot バーチャルメールボックスの設定を深堀する

メールサーバは、配送先を1つのドメインのみ設定できるのではなく、複数のドメインを配送先として設定できます。指定された配送先のドメインをどのように仕分けを行うかはいろいろな方法が用意されています。

前提

前提としてメール保管形式は、Maildir形式にします。Postfixとdovecotの設定は、以下に設定してください。

Postfix Maildir形式の設定

vi /etc/postfix/main.cf
#MailDir形式に設定
home_mailbox = Maildir/

設定の反映は、Postfixを再起動してください。

dovecot Maildir形式の設定

まずdovecotのインストールします。すでにインストールされている場合は、飛ばしてください。

yum install dovecot

以下Maildir形式の設定です。

vi /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:~/Maildir

設定の反映は、dovecotを再起動してください。

バーチャルメールボックスを設定する方法

バーチャルメールボックスを実現する方法は、3つあります。それは、mydestinationを利用する方法、バーチャルエイリアスを利用する方法、バーチャルメールボックスを利用する方法です。

mydestinationを利用した場合

mydestinationは、宛先、行先を意味しここにドメインを設定するとメールの宛先を見て、設定されているドメインの場合、自サーバに配送されます。ここからどのユーザーに配送するか仕分けします。仕分けは、ドメインを完全に無視しユーザー名のみで仕分けされます。ユーザーは、Linuxで設定されているユーザーのメールボックスに配送されます。

例としてgmail.comと設定した場合、設定されたサーバから送信すると実際のgmail.com宛には配送されず自サーバに配送されます。

vi /etc/postfix/main.cf
mydestination = $myhostname, localhost.$mydomain, localhost,gmail.com

また、後に説明するバーチャルエイリアス、バーチャルメールボックスを設定してもmydestinationで設定したほうが優先され、仕分けもvirtual_alias_maps、virtual_mailbox_mapsで設定していても完全に無視され、Linuxのユーザーに仕分けされるので設定には注意が必要です。

バーチャルエイリアスを設定した場合

バーチャルエイリアスは、宛先のドメインがvirtual_alias_domainsで設定されているものと一致した場合、自サーバに配送されます。そしてvirtual_alias_mapsの記載されている内容を基に仕分けされます。virtual_alias_mapsは、宛先のメールアドレスを基に既存のどのLinuxユーザーに配送するかを記載します。

Postfixの設定

vi /etc/postfix/main.cf
virtual_alias_domains = hogehoge.com
virtual_alias_maps = hash:/etc/postfix/virtual

どのユーザーに配送するか設定する

vi /etc/postfix/virtual
#以下のように[ドメイン] anythingを記述したあとメールアドレスとユーザーを関連付ける
hogehoge.com              anything
newname@hogehoge.com      newname

hash化されたDBを作成します。以下のコマンドで設定が反映します。

postmap /etc/postfix/virtual

宛先のアカウントはadduserで作成しておきます。

バーチャルメールボックスを設定した場合

バーチャルメールボックスは、Linuxのユーザーを使わず独自にユーザーを作成しメールアドレスと関連付けます。Linuxのユーザーと切り分けができるため独立性が高まり、管理もしやすくなります。ユーザーとメールボックスは、Linuxのユーザーを使わないため独自に用意する必要があります。

バーチャルメールボックスは、宛先のドメインがvirtual_mailbox_domainsで設定されているものと一致した場合、自サーバに配送されvirtual_mailbox_mapsの記載されている内容を基に仕分けします。virtual_mailbox_mapsは、宛先のメールアドレス(ユーザー名)を基にどのメールボックスに配送するかを記載します。メールボックスのディレクトリは、virtual_mailbox_baseで設定します。メールボックスのディレクトの権限を持つユーザー、グループは、virtual_uid_maps、virtual_gid_mapsで定義します。

Postfixの設定

vi /etc/postfix/main.cf
#自サーバに配送するドメイン。複数記述する場合カンマで追加
virtual_mailbox_domains = hogehoge.com
#仕分け時に利用する関連付けファイル
virtual_mailbox_maps = hash:/etc/postfix/vmail
#メールボックスのディレクトの権限を持つユーザーID、グループID
virtual_uid_maps = static:10000
virtual_gid_maps = static:10000
#メールボックスのディレクトリ
virtual_mailbox_base = /var/www/vmailbox

メールボックスの作成

#メールボックスのディレクトの権限を持つユーザー、グループを作成
groupadd -g 10000 vmailg
useradd -u 10000 -g vmailg vmail
#バーチャルメールボックスのディレクトリを作成。このディレクトリにユーザーのメールボックスが作成される。
mkdir /var/www/vmailbox
#権限変更
chown -R 10000.10000 /var/www/vmailbox

どのユーザーに、どこのメールボックスへ配送するか記載する

ユーザー名と配送先のメールボックスのpathを記入します。ユーザー名はメールアドレスと同一にします。pathは/ドメイン名/@の前のユーザー名/Maildir/にします。これは後に設定するdovecotの設定と合わすためです。

vi /etc/postfix/vmail
test@hogehoge.com      hogehoge.com/test/Maildir/

hash化されたDBを作成します。以下のコマンドで設定が反映します。

postmap /etc/postfix/vmail

バーチャルメールボックスに対応したdovecotの設定

Postfixの設定で送信されてきたメールは、無事メールボックスに配送されます。しかしユーザーがメーラーでメールを受信するためには、バーチャルメールボックスに対応したdovecotの設定が必要です。

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

dovecotの認証関連の設定を変更します。デフォルトの認証方法は、Linuxのユーザーのみになっているので、dovecotで独自のユーザー情報を利用した認証方法に変更します。このユーザーを利用して先ほど設定したPostfixの設定に対応させます。

dovecotのアカウント情報は、ユーザーDBとパスワードDBで構成されています。DBは、外部のアカウントシステムやファイルを参照することで情報を管理します。今回は、ユーザーDBにstatic(静的にメールボックスのpathを定義)とpasswdfile(認証用ユーザー)、パスワードDBにpasswdfile(認証用ユーザーに対応したパスワード)を使用します。

以下の設定で認証方法を変更します。

vi /etc/dovecot/conf.d/10-auth.conf
#!include auth-deny.conf.ext
#!include auth-master.conf.ext
#認証時のパスフレーズの送信方法を指定。デフォルトは plain。
auth_mechanisms = cram-md5 plain login
#Linuxのアカウントを使って認証を使用する。使わない場合はコメントアウトする。
!include auth-system.conf.ext
#!include auth-sql.conf.ext
#!include auth-ldap.conf.ext
#Dovecotの認証データベースを使用する。#を外す
!include auth-passwdfile.conf.ext
#!include auth-checkpassword.conf.ext
#!include auth-vpopmail.conf.ext
#静的なPathを設定するデータベースを使用する。#を外す。この設定でPostfixのメールボックスに対応させる。
!include auth-static.conf.ext

dovecot独自のユーザーを設定する

以下の設定で独自のユーザー情報が記載されたファイルを定義します。

vi /etc/dovecot/conf.d/auth-passwdfile.conf.ext
passdb {
  driver = passwd-file
  #args = scheme=CRYPT username_format=%u /etc/dovecot/users
  args = scheme=CRAM-MD5 username_format=%u /etc/dovecot/passwd
}

userdb {
  driver = passwd-file
  #args = username_format=%u /etc/dovecot/users
  args = scheme=CRAM-MD5 username_format=%u /etc/dovecot/passwd
}

次は、ユーザーに設定するパスワードを先に作成します。

#パスワード生成コマンド
doveadm pw
Enter new password:←パスワードを入力
Retype new password:←再度パスワードを入力
#生成されたパスワードは後に貼り付けるのでコピーする
{CRAM-MD5}fe8522268d91e485ccac8f36800e4fa6b10363e2a371....

最後にユーザーを作成します。

vi /etc/dovecot/passwd

ユーザー名は、必ずメールアドレスと同一にします。これは、userdbで「username_format=%u」と設定したからです。%uは、メールアドレス全体を表します。これを「username_format=%n」とすると@の前のユーザー名で定義する必要があります。パスワードは、先ほどコピーしたパスワードを貼り付けます。

#ユーザー名:パスワード で設定
#userdbでusername_format=%uにした場合
test@hogehoge.com:{CRAM-MD5}fe8522268d91e485ccac8f36800e4fa6b10363e2a371....

#userdbでusername_format=%nにした場合は@以降を削除する
#test:{CRAM-MD5}fe8522268d91e485ccac8f36800e4fa6b10363e2a371....

バーチャルメールボックスのPathを設定する

Postfixで設定したバーチャルメールボックスからメーラーで受信できるように設定します。
以下の設定でPostfixで設定したバーチャルメールボックス、ユーザーID、グループIDを設定します。
argsのhomeでメールボックスのpathを定義します。ユーザー名をメールアドレスにすることで変数%dと%nを使うことができます。%dは、ユーザー名の@以後のドメイン名を参照し%nは@の前のユーザー名を参照します。これでメールボックスのpathを動的に定義することができます。

vi /etc/dovecot/conf.d/auth-static.conf.ext
userdb {
  driver = static
  #args = uid=vmail gid=vmail home=/home/%u
  #Postfixで設定したバーチャルメールボックス、ユーザーID、グループIDを記載する
  #%dはユーザー名の@以後のドメイン名、%nは@の前のユーザー名
  args = uid=10000 gid=10000 home=/var/www/vmailbox/%d/%n
}

特殊変数の詳しい説明はこちら
https://doc.dovecot.org/configuration_manual/config_file/config_variables/#config-variables

dovecotを再起動すると設定が反映され、メーラーからメールを受信することができます。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする