sendmailの設定で mailertable というのがある。ごく簡単にいうと、電子メールの送り先データ(MX)を無視して強制的に移送する時などに使うもので、たとえばメールゲートウェイなんかで使ったりする。MXはゲートウェイ、すなわち自分自身に向いているのでそれが利用できないためだ。
(もちろんもっときちんとした別の解決法もあるが、ネットワーク構成が繁雑なところではこうした調整が必要とされることがある)
今回の記事は、同じことをわざわざpostfixでやっちまおう、という脱力企画である。
先ず、/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
ここに記したドメインへのメールは転送する。
hoge.co.jp hega.ne.jp mokya.example.com
配送テーブル。かぎ括弧で囲むと強制配送、ないとMXを引く。
hoge.co.jp smtp:[hoge.co.jp]
許可するのしないのと書く。たとえばこんな感じに。
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
名前の通りだが、接続元クライアントによる制御である。こう書く。
nintemdo.info REJECT
さらに header_checksやbody_checksを組み合わせると、ずっと細かいアクセス制御も可能になる。