2007年12月12日

Nullクライアントでメールを集める - postfix編

これから先はメールサーバを管理しようと思う人ならば、sendmail は捨てて postfix から始めた方がよい。

そのうち新人の管理者が、

「sendmailってなんすか」

「むかしのあれっすね。骨董品ですよ。はぁはぁ」

とか言う時代が来るんだろうなぁ。

気落とさずにpostfixに対して Null クライアントの設定をしよう。

postfix のNullクライアント設定

設定の内容は

  1. smtp 接続はループバックにのみで、リモートアクセスさせない。
  2. ローカルで受ける宛先ドメインを空にする。
  3. ローカル以外宛先のメールを、Mail Hub にリレーする。
  4. アドレスのドメイン部分に対して$mydomain へのマスカレードを行う。
  5. マスカレードの対象は、エンベロープ送信者、ヘッダ送信者、エンベロープ受信者、ヘッダ受信者の全て。

/etc/postfix/main.cf

inet_interfaces = loopback-only
myhostname = host.example.com
mydomain = example.com
myorigin = $myhostname
mydestination =
relayhost = $mydomain

masquerade_classes =  envelope_sender,header_sender,envelope_recipient,header_recipient
masquerade_domains = $mydomain

これで、sendmail の EXPOSED_USERが空の場合と同じになる。

postfix で EXPOSED_USER を実現?

sendmail の EXPOSED_USER と同じことを行うにはどうすればよいのか?

EXPOSED_USER で指定したユーザがマスカレード対象を除外されるのは、ヘッダ送信者/ヘッダ受信者の変換のみのようである。 実際の挙動とcf で変換した sendmail.cf をざっと見た限りそう思う。

どこにも一次情報が見当たらない。。。だから嘘かもしれない。

postfix で、masquerade_exceptions にユーザを追加すると、エンベロープ送信者/エンベロープ受信者の変換も除外になるので、ちょっとだけ追加の設定が必要である。

/etc/postfix/main.cf

...
masquerade_exceptions = root
virtual_alias_maps = regexp:/etc/postfix/virtual_regexp

/etc/postfix/virtual_regexp

/^root@.+\.example\.com$/ root@example.com

これで、ヘッダ部分のFrom:/To:でのみ root@host.example.com 形式のまま残るようになる。

ただ、無理して sendmail と同じ動作するようにする必要は無いかも。

追記

存在しないホストでも変換してしまう。

user@host.example.com -> user@example.com
user@ZZZ.example.com -> user@example.com

postfix の masquerade_domains 設定はちょっと外向きのメールサーバには向かないなぁ。。。

追記

Open Directory の設定のまとめ 2008Q1

0 件のコメント: