UnixPower on Networking
  http://www.unix-power.net/

 
 Top - Linux - CentOS Postfixでバーチャルドメイン



Postfixでバーチャルドメインを構築します。バーチャルドメインといっても大きくわけて3つに分類することができますので、それぞれを紹介していきます。

1. 宛先ドメインの追加

3つの方法の中で最も簡単なやりかたです。
/etc/postfix/main.cfの中の以下の部分に追加したいドメインを追記します。

# vi /etc/postfix/main.cf

mydestination = xxyy.jp, unix-power.net


設定としてはこれだけです。変更を有効にするためにPostfixを再起動します。

# /etc/rc.d/init.d/postfix reload


この状態で例えばwebmaster@unix-power.net宛にメールを送ると、このサーバのwebmasterアカウント にメールがポストされます。(DNSが正常に設定されているという前提です)但し、本来のドメイン(xxyy.jp)のwebmaster@xxyy.jp宛にメールを送ったとしても同様のwebmaster アカウントにメールがポストされドメインでのアカウント区別は存在しない状況になります。簡単ではありますが、ドメインで完全に区別をつけたいといった場合にはこの方法はオススメできません。


2. バーチャルエイリアスの設定


最初の方法と比較して少々ややこしいですが、この方法ではドメインごとでアカウントは完全に区別できます。main.cfを以下の形で編集していきます。

# vi /etc/postfix/main.cf

virtual_alias_domains = unix-power.net
virtual_alias_maps = hash:/etc/postfix/virtual

# /etc/rc.d/init.d/postfix reload

追加したいドメインをvirtual_alias_domainsに指定します。ここで指定するドメインはmydestinationに指定してはいけません。さらにそのドメインの具体的なアカウントの振り分けを/etc/postfix/virtualに記載することになります。具体的なサンプルは以下のようになります。


# vi /etc/postfix/virtual

unix-power.net anything
webmaster@unix-power.net account1
info@unix-power.net account2

# postmap /etc/postfix/virtual


postfix の再起動は必要ありません。postmapでDB化した時点で設定は有効となります。上の記載ですとwebmaster@unix-power.net宛のメールはアカウントaccount1にポストされinfo@unix-power.net宛のメールはaccount2にポストされます。この ようにしてvirtual_alias機能でバーチャルドメインを実現することが可能です。


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


3つめです。この方法はアカウントに実体を使うのではなく仮想的なアカウントを作成してそこにメールをポストするやりかたです。main.cfに以下を追記します。

# vi /etc/postfix/main.cf

virtual_mailbox_domains = example1.jp
example2.jp
example3.jp
virtual_mailbox_maps = hash:/etc/postfix/virtual-mailbox
virtual_uid_maps = static:10000
virtual_gid_maps = static:10000
virtual_mailbox_base = /var/spool/virtual


uid / gidは10000で管理しますのでそれ用のユーザを作成しておきます。

# groupadd -g 10000 mailuser
# useradd -u 10000 -g mailuser mailuser


仮想アカウントへメールが配信されるディレクトリを作成します。

# mkdir /var/spool/virtual
# chown -R 10000.10000 /var/spool/virtual


ドメイン毎、ユーザ毎のディレクトリは Postfix が自動的に /var/spool/virtual の下に作製してくれるので、事前に作製しておく必要はありません。virtual mailbox map を作製します。特に名前は決まっていませんし、雛型ファイルも用意されていないので
/etc/postfix/virtual-mailbox という名前で新規作製します。

# vi /etc/postfix/virtual-mailbox

test1@example1.jp example1.jp/test1/Maildir/
test2@example2.jp example2.jp/test2/Maildir/
test3@example3.jp example3.jp/test3/Maildir/


ファイルを保存して終了したら postmap コマンドを使って hash 型式のバークレイ DB を作製します。

# postmap /etc/postfix/virtual-mailbox


仮想メールボックスで管理するドメインは mydestination 文の引数に指定してはいけません。見落としがちなのはメールサーバのホスト名 $myhostname やドメイン名 $mydomain と同じ名前のバーチャルドメインが存在する場合です。この場合は下のように mydestination から $myhostname や $mydomain を外します。


引き続きユーザが仮想となりますのでDovecot側にも設定変更が必要です。以下のファイルをそれぞれ次のように編集していきます。

# vi /etc/dovecot/conf.d/10-auth

auth_mechanisms = cram-md5 plain login
!include auth-passwdfile.conf.ext
!include auth-static.conf.ext
# vi /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 = scheme=CRAM-MD5 username_format=%u /etc/dovecot/passwd
}
# vi /etc/dovecot/conf.d/auth-static.conf.ext

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

そしてdovecotを再起動します。

# /etc/rc.d/init.d/dovecot restart

次に仮想ユーザに対するパスワードを設定します。dovecot附属のコマンドでパスワードを生成しそれを /etc/dovecot/passwdに記載する形になります。

# doveadm pw

Enter new password:
Retype new password:
{CRAM-MD5}e01582f1eec39ad9bfe97ab5a4b8c7a2b293ca154427b5a775867cd4e572da4f

# vi /etc/dovecot/passwd

test1@example1.jp:{CRAM-MD5}e01582f1eec39ad9bfe97ab5a4b8c7a2b293ca154427b5a775867cd4e572da4f

この段階で仮想ユーザの認証が出来るようになります。その際はユーザ名はメールアドレスとなりますので御注意ください。アカウントを追加するたびに上記の処理が必要となるので、これらを何とか自動化するようなツールでも作ろうか考えてはいるのですがちょいと余裕がなくてまだ作れていません。そのうち作れればいいかなぁ。



 

 関連記事
 Postfix+Dovecotのインストール
 Postfix+Dovecot+OpenLDAPの設定
 PostfixAdmin+Dovecot+MySQLのインストール
 Postfix+AMaViS+Clamavのインストール
 Mailmanのインストール
 RoundCubeのインストール
 Copyright(C) 2003-2015 UnixPower on Networking All rights reserved.