Postfix でメールアドレスのドメイン名を変更した話

ふと、メールアドレスのドメイン名を変更しようかと考えた。具体的に言うと、「mail.magic-object.mydns.jp」から「magic-object.com」へと変更しようかと考えたのだ。

だが、dovecot と連携している関係上、そう簡単な話ではなかった。

dovecot はメールをドメイン名で管理している

dovecot には、基本的にはドメイン名を指定する設定は無い。例外的に SSL の公開キーと秘密キーを指定しているくらいだ。

だが調査してみると、メールの格納場所がドメイン名「mail.magic-object.mydns.jp」で格納されていた。勿論、ディレクトリ名を変更すれば問題無い気もするが、全てのメーラー(Thunderbird や Geary など)の設定を変更するのは面倒臭い。 そこで、Postfix のエイリアス機能とリライト機能を利用して、見せかけのメールアドレスを変更する事にした。

認証系を確認

「main.cf」では「dovecot」認証になっていた。つまり、imap などの認証と同じという事だ。

ここはイジる必要はなさそうだ。

メールの転送方式を確認

「main.cf」では、「dovecot-lmtp」になっていた。LMTP は同じマシン内での転送なので、チェックは非常に緩い。しかも UNIX ドメインソケットである。

ドメイン名を変更

受取人指定

参考:http://www.postfix-jp.info/trans-2.2/jhtml/mysql_table.5.html

SQL接続ファイル(今回は「/etc/postfix/mysql-recipients.cf」)内容は大体、次の様になる。

こんな感じなので、SQL 文は結構自由にかけるし、必要があれば UNION なんかを使ってもOKだ。

因みに「%s」に入ってくる文字列は、今回はメールアドレスが入って来る。

ここで返却する値なのだが、条件に一致した場合は「ACCEPT」とか「OK」とかメールアドレスとか色々だが、一致しない場合は何も返却しないのがポイント。

今回は受取人なので、「ユーザー名@mail.magic-object.mydns.jp」か「ユーザー名@magic-object.com」のメールアドレスを返却する事にした。

エイリアス名の指定

ここでのポイントは「ユーザー名@magic-object.com」を受けとると「ユーザー名@mail.magic-object.mydns.jp」を返す事だ。つまり、「ユーザー名@magic-object.com」宛のメールを「ユーザー名@mail.magic-object.mydns.jp」宛に強制的に送り付ける事が出来る。

メールの流れ

今回の指定で、メールには2つの流れが出来た。

  • 「ユーザー名@mail.magic-object.mydns.jp」に来たメールを dovecot に送信。
  • 「ユーザー名@magic-object.com」に来たメールを「ユーザー名@mail.magic-object.mydns.jp」宛として強制的に dovecot に送信。

送信側の設定

「main.cf」の送信元のリライトを行う。

この場合、「/etc/postfix/mysql-canonical_maps.cf」に「ユーザー名@mail.magic-object.mydns.jp」が来るので、「ユーザー名@magic-object.com」を返す様にする。

何なら SQL 文は次の様に書いても良い。(必要なのはユーザー名だけなので)因みに「%u」に入ってくる文字列はユーザー名である。

これで送信されるメールは「ユーザー名@magic-object.com」になった。

結論

内部的なドメインは「mail.magic-object.mydns.jp」のままだが、外部的には「magic-object.com」に見える。 これは一種のドメイン偽装なのではなかろうか?

参考:カノニカルアドレスマッピングPostfix設定パラメータ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です