本日も乙

ただの自己満足な備忘録。

ヴァーチャルドメイン(VirtualDomain)を利用して、複数ドメインの設定を行う

前回の記事エイリアスを設定することで、別メールに転送したりPHPスクリプトを実行したりできました。 通常、Postfixでは一つのドメインに対して設定を行うことができるのですが、VirtualDomainを使うことで、複数ドメインで同じようなことができます。

今回の目標

  • contact@baz.com, contact@qux.com, contact@quux.com にメール送信すると、baz_contact@gmail.com, qux_contact@gmail.com, quux_contact@gmail.com にそれぞれメールが転送されるようにする
  • register@baz.com にメール送信すると、指定したPHPスクリプトが実行される

サーバ環境

DNSの設定

ドメインDNSを管理している管理画面(レジストラ、Route53など)で以下のようにDNSを設定します。

baz.com

ホスト名 レコード TTL VALUE
baz.com A 60 101.102.103.104
mail.baz.com A 60 101.102.103.104
baz.com MX 60 10 mail.baz.com
baz.com TXT 60 v=spf +ip:101.102.103.104 -all

qux.com

ホスト名 レコード TTL VALUE
qux.com A 60 101.102.103.104
mail.qux.com A 60 101.102.103.104
qux.com MX 60 10 mail.qux.com
qux.com TXT 60 v=spf +ip:101.102.103.104 -all

quux.com

ホスト名 レコード TTL VALUE
quux.com A 60 101.102.103.104
mail.quux.com A 60 101.102.103.104
quux.com MX 60 10 mail.quux.com
quux.com TXT 60 v=spf +ip:101.102.103.104 -all

Postfixの設定

VirtualDomainの設定

# /etc/postfix/main.cf

# 以下を追加
virtual_alias_domains = baz.com qux.com quux.com
virtual_alias_maps = hash:/etc/postfix/virtual
  • virtual_alias_domainsは、virtualdomainのリストを指定します。半角スペースまたはコンマ(,)で複数のドメインを指定することができます
    • 注意点は、 mydomain または mydestination で指定したドメインをvirtual_alias_domains に含めてはいけません
  • virtual_alias_maps は、virtual_alias_domainsで指定したVirtualDomainのメールアドレスとのエイリアスを設定します
    • /etc/postfix/virtual は実際に存在するファイルを指定します

エイリアスの設定

以下のように設定します。

# /etc/postfix/virtual

# メール転送
contact@baz.com     baz_contact@gmail.com
contact@qux.com     qux_contact@gmail.com
contact@quux.com    quux_contact@gmail.com

# スクリプト実行
register@baz.com    baz_register
# /etc/aliases

baz_register:    "|/usr/bin/php /tmp/register.php"

virtual.db作成

ヴァーチャルドメイン用のデータベースを作成する必要があり、postmapコマンドで行います。

$ sudo postmap /etc/postfix/virtual

実行すると、/etc/postfix/virtual.dbが作成されます。

エイリアスの設定を反映

newaliasesコマンドを実行します。

$ sudo newaliases

Postfixを再起動

$ sudo service postfix restart

設定されたかの確認

postmapコマンドを使うことでVirtualDomainの設定が正しくされたかの確認ができます。

$ postmap -q "contact@baz.com" hash:/etc/postfix/virtual
baz_contact@gmail.com

$ postmap -q "contact@qux.com" hash:/etc/postfix/virtual
qux_contact@gmail.com

$ postmap -q "contact@quux.com" hash:/etc/postfix/virtual
quux_contact@gmail.com

$ postmap -q "register@baz.com" hash:/etc/postfix/virtual
baz_register

-q オプションでメールアドレスを指定すると、/etc/postfix/virtual で設定されたエイリアスが表示されるはずです。 もし何も表示されなければ、設定がどこかで間違っていると思いますので設定を見直してください。

最後に

VirtualDomainを設定して複数ドメインでメールの設定を行いました。 基本的には前回と同様にエイリアスを設定することで使えるようになりました。