Postfix の virtual_alias_maps でプログラム起動

適当にメモ。

  • alias_maps
    • mydestination に合致したメールアドレスのユーザ名を対象とする
    • 通常、ユーザ名部分のみが対象として渡される
      • でも、念のために正規表現は /^username(@.+)?$/ のように、@ 以降の有無に影響されないようにしておく
    • ユーザ名部分のみを対象とするため、サブドメインの違いにより異なる動作をさせることはできない
    • username "| /foo/bar/baz.sh" な書式で、プログラムを起動できる
      • 通常は username realusername で、username@mydestination 宛てのメールを、realusername 宛てのメールとして扱える
    • alias_maps=hash:/etc/aliases, regexp:/etc/postfix/aliases.regexp (main.cf 内)
      • hash のテーブルファイルは、/usr/sbin/postmap /etc/postfix/aliases で、aliases.db ファイルにする必要あり
      • aliases のファイルを変更した場合、newaliases が必要
      • main.cf 書き換えた場合は、/sbin/service postfix reload
  • virtual_alias_maps
    • バーチャルホストを運用している場合用
    • mydestination 以外の複数のドメインを扱える
    • virtual_alias_maps で扱うドメインを mydesitination に含めてはいけない
    • virtual_alias_maps で扱うドメインは virtual_alias_domains で指定する
      • virtual_alias_domains のデフォルト値は $virtual_alias_maps になっている
        • つまり、virtual_alias_maps の設定だけで済ますことができる
    • virtual_alias_maps=regexp:/etc/postfix/virtual.regexp
    • virtual.regexp
/^sub\.domain$/ true
/^(x[0-9]+)@sub\.domain$/ sub.$1
    • virtual_alias_domains 用に、ドメインの設定も記述する
      • 値は何でも良い(上記では true にしている)
    • プログラムの起動は出来ない
      • 特定のユーザ名に置き換え、alias_maps で処理する (sub.〜 とか)
      • aliases.regexp
/^sub\.x[0-9]+(@.+)?$/ "| /foo/bar/baz.sh"


ポイントとしては、

  • alias_maps はサブドメインの違いを意識しない
    • virtual_alias_maps を使用する
  • virtual_alias_maps はプログラム起動が出来ない
    • 識別可能なユーザ名に置き換えて、alias_maps に処理を受け渡す
  • virtual_alias_maps で処理対象とするドメインは、virtual_alias_domains に設定
    • virtual_alias_domains の初期値は virtual_alias_maps なので、ひとつのファイルで設定を済ますことができる