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