Sendmailのmailertableと同じことをpostfixでやる

 sendmailの設定で mailertable というのがある。ごく簡単にいうと、電子メールの送り先データ(MX)を無視して強制的に移送する時などに使うもので、たとえばメールゲートウェイなんかで使ったりする。MXはゲートウェイ、すなわち自分自身に向いているのでそれが利用できないためだ。

 (もちろんもっときちんとした別の解決法もあるが、ネットワーク構成が繁雑なところではこうした調整が必要とされることがある)

 今回の記事は、同じことをわざわざpostfixでやっちまおう、という脱力企画である。

postfix

設定例(main.cf)

先ず、/etc/postfix/main.cfにこんな感じに設定してみる。

relay_domains = $mydestination, /etc/postfix/mydomains
transport_maps = hash:/etc/postfix/transport

smtpd_recipient_restrictions =
        check_recipient_access hash:/etc/postfix/toaccess
        check_recipient_access hash:/etc/postfix/mydomain2
        permit_mynetworks
        reject_unauth_destination

設定例の意味(main.cf)

relay_domains

ここに記したドメインへのメールは転送する。

hoge.co.jp
hega.ne.jp
mokya.example.com

transport_maps

配送テーブル。かぎ括弧で囲むと強制配送、ないとMXを引く。

hoge.co.jp  smtp:[hoge.co.jp]

smtpd_recipient_restrictions

許可するのしないのと書く。たとえばこんな感じに。

illyasviel.ath.cx       REJECT 550 Server is sending only.

transportテーブルは送り先を記述するが、セキュリティには関与しないので別途許可しなくてはならない。

relay_domainsは「こいつらへのrelayは許可するぞテーブル」なのだけど、許可するだけで実際どう配送するかにはタッチしない。

smtpd_recipient_restrictionsは最も細かい制御をする事ができる(エラーメッセージすら書き換える事ができる)が、配送先やリレー許可といった大きな権限はない(禁止する事はできる)。

余談・アクセス元制御

なお余談だが、アクセス元で禁止する時は以下がおすすめだ。

まず、main.cfにはこうする。

smtpd_client_restrictions =
        check_client_access hash:/etc/postfix/clients

smtpd_client_restrictions

名前の通りだが、接続元クライアントによる制御である。こう書く。

nintemdo.info REJECT

さらに header_checksやbody_checksを組み合わせると、ずっと細かいアクセス制御も可能になる。