postfix+dovecotでバーチャルドメイン(バーチャルメールボックスを使用)

postfix + dovecot で、バーチャルメールボックス形式を使用した、バーチャルドメイン環境を構築した際のメモです。

バーチャルメールボックス形式を使用すると、システムのユーザを使用せずに仮想的なアカウントを作成する形になるのでアカウント名とパスワードが漏洩してしまった場合も、システムにログインされることが無いのが良いところです。(その分管理の方が少し複雑になるので慣れが必要になりますが…)

前提条件

今回の手順は「postfix」と「dovecot」の基本的な設定が完了していることが前提となります。

詳しい内容はこちらにまとめていますので参考にしてみてください。
https://www.server-memo.net/server-setting/postfix/postfix-install.html

バーチャルメールボックス用ユーザ作成

一般的な「postfix」の設定では、メールはユーザのホームディレクトリにある「Maildir」ディレクトリ内に配送されますが、バーチャルメールボックス形式の場合は、専用のディレクトリを作成してそこにメールを配信させるという形になります。

バーチャルメールボックス用のディレクトリを作成する前に、管理用のユーザとして今回は「vmail」というユーザとグループを作成していきます。

「gid」と「uid」に「10000」を指定していますが、特に決まりはありませんのでお好きな番号を指定してもらって構いません。

グループ作成

ユーザを作成する前にグループを作成しておきます。

# groupadd -g 10000 vmail

ユーザ作成

グループの作成が終わりましたら、次にユーザの作成を行います。

# useradd -u 10000 -g vmail -s /sbin/nologin vmail

今回は「vmail」ユーザのログインシェルに「/sbin/nologin」を指定し、作成したユーザではログイン出来ないようにしていきます。

バーチャルメールボックス用ディレクトリの作成

バーチャルメールボックス用のユーザを作成しましたら、次にメールを保存するためのディレクトリを作成していきます。

今回は「/var/spool/virtual」というディレクトリを作成しています。

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

メールデータは今回作成したディレクトリに、ドメインごとのディレクトリが作成されて、そのなかにユーザごとのディレクトリが作成されていきます。

postfix

次に「postfix」の設定を行っていきます。

postfixの設定ファイルである「/etc/postfix/main.cf」を設定していきます。

# cd /etc/postfix
# cp -p main.cf main.cf_yyyymmdd
# vi main.cf

バーチャルドメイン設定

バーチャルドメイン用の設定として以下の項目を追加していきます。

項目 内容
virtual_mailbox_domains バーチャルドメインとして運用するドメインを指定
ドメインが記述されたファイルを指定する形式と、直接ドメインを指定する形式がある
virtual_mailbox_base メールデータを保存するベースのディレクトリを指定
virtual_mailbox_maps バーチャルドメイン用の仮想ユーザとメールの保存ディレクトリをマッピングデータを指定
virtual_uid_maps 保存するメールデータのuidを指定
virtual_gid_maps 保存するメールデータのgidを指定

virtual_mailbox_domains

バーチャルドメインとして運用したいドメインの情報を設定します。

注意点としては、main.cfのmydestinaitonにはバーチャルドメインとして運用したいドメインは記述しないようにしてください。

そちらにも記述があると、バーチャルメールボックスの方ではなくシステムのアカウントの方にメールが配送されてしまいます。

ファイルを指定する形式

この形式の場合はバーチャルドメインとして管理するドメイン情報を記述したファイルを指定します。

virtual_mailbox_domains = /etc/postfix/vdomain

この例では「/etc/postfix/vdomain」というファイルを新規に作成して、そこにドメインを記述していくという形になります。(ファイル名に決まりはないのでお好きな名前で作成してください)

ドメインを直接指定する形式

この形式の場合は、下記のように直接ドメインを指定する形となります。

virtual_mailbox_domains = example.com, example.net

この例では、「example.com」「example.net」という2つのドメインをバーチャルドメインとして運用する形になります。

virtual_mailbox_base

メールを保存するためのベースとなるディレクトリ(はじめに作成したバーチャルメールボックス用のディレクトリ)を指定します。

virtual_mailbox_base = /var/spool/virtual

このディレクトリ内にバーチャルドメインで運用しているドメインのディレクトリが作成されていきます。

virtual_mailbox_maps

仮想的なアカウントとメールの保存先・ディレクトリがマッピングhash形式のファイル

virtual_mailbox_maps = hash:/etc/postfix/vmailbox

virtual_uid_maps

保存するメールの「uid」を設定します。

virtual_uid_maps = static:10000

virtual_gid_maps


保存するメールデータの「gid」を設定します。

virtual_gid_maps = static:10000

/etc/postfix/vdomain

「mail.cf」の「virtual_mailbox_domains」で指定した、バーチャルドメイン情報を記述したファイルを作成します。

なお、「virtual_mailbox_domains」で直接ドメインを記述した場合はこのファイルを作成する必要はありません。

# vi vdomain

「example.com」と「example.net」をバーチャルドメインとして運用したい場合は下記のように記述します。

example.com
example.net

/etc/postfix/vmailbox

バーチャルドメインとして使用するメールアドレスと、メールを保存するディレクトリを記述し、その後「postmap」コマンドを使用してhash化させたDBファイルを作成します。

# vi vmailbox

メールアドレスと保存ディレクトリといった書式で記入していきます。

test1@example.com      example.com/test1/Maildir/
test2@example.com      example.com/test2/Maildir/
test3@example.com      example.com/test3/Maildir/

test1@example.net      example.net/test1/Maildir/
test2@example.net      example.net/test2/Maildir/
test3@example.net      example.net/test3/Maildir/
hashデータ化

「postmap」コマンドを使用してhash化させたDBファイルを作成します。

# postmap vmailbox

これで「vmailbox.db」というファイルが作成されます。

postfix再起動

設定を反映させるために「postfix」の再起動を行います。

# systemctl restart postfix

dovcecot設定

バーチャルドメイン用設定

バーチャルメールボックス用アカウントで認証が出来るように設定を追加していきます。

10-auth.conf

「auth-passwdfile.conf.ext」と「auth-static.conf.ext」を使用できるように編集していきます。

# cd /etc/dovecot/conf.d
# cp -p 10-auth.conf 10-auth.conf_yyyymmdd
# vi 10-auth.conf

「auth-passwdfile.conf.ext」の有効化

編集前 #!include auth-passwdfile.conf.ext
編集後 !include auth-passwdfile.conf.ext

「auth-static.conf.ext」の有効化

編集前 #!include auth-static.conf.ext
編集後 !include auth-static.conf.ext

auth-passwdfile.conf.ext

バーチャルドメイン用のアカウント情報に記述するパスワードの暗号化タイプを「CRYPT」から「CRAM-MD5」に変更します。

# cp -p auth-passwdfile.conf.ext auth-passwdfile.conf.ext_yyyymmdd
# vi auth-passwdfile.conf.ext

初期値ではパスワードの暗号化タイプは「scheme=CRYPT」と「CRYPT」が設定されています。

passdb {
  driver = passwd-file
  args = scheme=CRYPT username_format=%u /etc/dovecot/users
}

アカウントの設定をパスワードを生成する際に「doveadm pw」というコマンドを使用するのですが、生成されるパスワードの暗号化タイプの初期値が「CRAM-MD5」なので「scheme=CRAM-MD5」に変更します。

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

auth-static.conf.ext

仮想アカウントの「uid」「gid」「ホームディレクトリ」の情報を設定していきます。

# cp -p auth-static.conf.ext auth-static.conf.ext_yyyymmdd
# vi auth-static.conf.ext

バーチャルメールボックス用としてのユーザとグループ「vmail」を作成してあるので、「uid」と「gid」は初期値のままで、ホームディレクトリの部分だけを変更していきます。

#userdb {
#  driver = static
#  args = uid=vmail gid=vmail home=/home/%u
#}

「/var/spool/virtual」をバーチャルメールボック用のディレクトリして作成していますので、それを指定していきます。

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

※ちなみに「%d」はドメイン「%n」はユーザ名となります。

dovecot再起動

設定を反映させるために「dovecot」を再起動します。

# systemctl restart dovecot 

仮想ユーザ認証ファイル作成

バーチャルドメインで使用する、仮想ユーザの認証情報を記述したファイルを作成していきます。

パスワード作成

まずは「doveadm pw」コマンドで暗号化されたパスワードを生成します。

# doveadm pw
Enter new password:
Retype new password:
{CRAM-MD5}9186d855e11eba527a7a52ca82b313e180d62234f0acc9051b527243d41e2740

ユーザの認証情報作成

「auth-passwdfile.conf.ext」で指定されているファイルに、バーチャルドメイン用の仮想ユーザの情報を下記の書式で追加していきます。

メールアドレス:パスワード

パスワードは「doveadm pw」コマンドで生成されたものをコピペしてください。

# vi /etc/dovecot/users

下記のように設定を行っていきます。

# example.com
test1@example.com:{CRAM-MD5}f406a483dbf8000bec520b4f76556ae47246d4e931db88845ce88c0cc0763941
test2@example.com:{CRAM-MD5}20e53301bad2300c6a6fc4c7d9dbfb681e8ed6039496020faa9764275be78af4
test3@example.com:{CRAM-MD5}ceccf408bb3e3f3cfa6f72c91e1ac1672d144e93793e4a5b1479a160a0f7efdc

# example.net
test1@example.net:{CRAM-MD5}d02ce7cd774a6bdf05ccf9c320585dc538e5441050dc6c435855a6fcc9bcf0fb
test2@example.net:{CRAM-MD5}b42f965471f7ad1a2a0a485608500907b27fdc112fd81e7d9d691deca37b3137
test3@example.net:{CRAM-MD5}9186d855e11eba527a7a52ca82b313e180d62234f0acc9051b527243d41e2740

以上で設定は完了となりますので、あとは実際に別のメールアドレスからメールを送信してみて、実際に受信できるか確認してみてください。

コメント

タイトルとURLをコピーしました