バーチャルメールボックス形式を使用すると、システムのユーザを使用せずに仮想的なアカウントを作成する形になるのでアカウント名とパスワードが漏洩してしまった場合も、システムにログインされることが無いのが良いところです。
一般的な「postfix」の設定では、メールはユーザのホームディレクトリにある「Maildir」ディレクトリ内に配送されますが、バーチャルメールボックス形式の場合は、専用のディレクトリを作成してそこにメールを配信させるという形になります。
バーチャルメールボックス用のディレクトリを作成する前に、管理用のユーザとして今回は「vmail」というユーザとグループを作成していきます。
「gid」と「uid」に「10000」を指定していますが、特に決まりはありませんのでお好きな番号を指定してもらって構いません。
ユーザを作成する前にグループを作成しておきます。
[root@localhost ~]# groupadd -g 10000 vmail |
グループの作成が終わりましたら、次にユーザの作成を行います。
[root@localhost ~]# useradd -u 10000 -g vmail -s /sbin/nologin vmail |
今回は「vmail」ユーザのログインシェルに「/sbin/nologin」を指定し、作成したユーザではログイン出来ないようにしていきます。
バーチャルメールボックス用のユーザを作成しましたら、次にメールを保存するためのディレクトリを作成していきます。
今回は「/var/spool/virtual」というディレクトリを作成しています。
[root@localhost ~]# mkdir /var/spool/virtual| [root@localhost ~]# chown -R vmail:vmail /var/spool/virtual|
メールデータは今回作成したディレクトリに、ドメインごとのディレクトリが作成されて、そのなかにユーザごとのディレクトリが作成されていきます。
次に「postfix」の設定を行っていきます。
postfixの設定ファイルである「/etc/postfix/main.cf」を設定していきます。
[root@localhost ~]# cd /etc/postfix| [root@localhost ~]# cp -p main.cf main.cf_yyyymmdd| [root@localhost ~]# 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_uid_maps
保存するメールの「uid」を設定します。
virtual_uid_maps = static:10000
/etc/postfix/vdomain
「mail.cf」の「virtual_mailbox_domains」で指定した、バーチャルドメイン情報を記述したファイルを作成します。
なお、「virtual_mailbox_domains」で直接ドメインを記述した場合はこのファイルを作成する必要はありません。
[root@localhost ~]# vi vdomain |
「example.com」と「example.net」をバーチャルドメインとして運用したい場合は下記のように記述します。
example.com example.net
/etc/postfix/vmailbox
バーチャルドメインとして使用するメールアドレスと、メールを保存するディレクトリを記述し、その後「postmap」コマンドを使用してhash化させたDBファイルを作成します。
[root@localhost ~]# 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ファイルを作成します。
[root@localhost ~]# postmap vmailbox |
これで「vmailbox.db」というファイルが作成されます。
設定を反映させるために「postfix」の再起動を行います。
[root@localhost ~]# systemctl restart postfix |
バーチャルメールボックス用アカウントで認証が出来るように設定を追加していきます。
10-auth.conf
「auth-passwdfile.conf.ext」と「auth-static.conf.ext」を使用できるように編集していきます。
[root@localhost ~]# cd /etc/dovecot/conf.d |
[root@localhost ~]# cp -p 10-auth.conf 10-auth.conf_yyyymmdd |
[root@localhost ~]# 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」に変更します。
[root@localhost ~]# cp -p auth-passwdfile.conf.ext auth-passwdfile.conf.ext_yyyymmdd |
[root@localhost ~]# 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」「ホームディレクトリ」の情報を設定していきます。
[root@localhost ~]# cp -p auth-static.conf.ext auth-static.conf.ext_yyyymmdd |
[root@localhost ~]# 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」を再起動します。
[root@localhost ~]# systemctl restart dovecot |
バーチャルドメインで使用する、仮想ユーザの認証情報を記述したファイルを作成していきます。
まずは「doveadm pw」コマンドで暗号化されたパスワードを生成します。
[root@localhost ~]# doveadm pw |
Enter new password: Retype new password: {CRAM-MD5}9186d855e11eba527a7a52ca82b313e180d62234f0acc9051b527243d41e2740 |
「auth-passwdfile.conf.ext」で指定されているファイルに、バーチャルドメイン用の仮想ユーザの情報を下記の書式で追加していきます。
メールアドレス:パスワード
パスワードは「doveadm pw」コマンドで生成されたものをコピペしてください。
[root@localhost ~]# 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
以上で設定は完了となりますので、あとは実際に別のメールアドレスからメールを送信してみて、実際に受信できるか確認してみてください。