□postfix でバーチャルドメイン
postfix は極力踏み台にされないようにとバーチャルドメインの設定が
かなり複雑怪奇になっています。今まで気がついた点をあげると…
・/etc/postfix/main.cf の mydestination パラメーターにドメインを
?書くと、そのサーバーにアカウント(@マークの前)が存在すれば、
?ドメイン部分を無視して受け付けてしまう。
・ただし /etc/postfix/virtual に振り分け先が書いてあれば、そちら
?を参照して振り分ける。
1.バーチャルドメインの特定のアドレスのみ有効にしたい場合
例:実アドレスとして test01,test02 が存在する場合
/etc/postfix/main.cf の mydestination には特に書かなくても、
/etc/postfix/virtual に
hogehoge.com anything
test@hogehoge.com test01
とだけ書いておけば、test@hogehoge.com だけは受け付けてくれる。
test01@hogehoge.com や test02@hogehoge.com に送っても postfix は
「そんなユーザーしらねーぜ」(User unknown)として返してくれる。
2.そのサーバーに実在するアドレスならとりあえず受け付けたい場合
/etc/postfix/main.cf の mydestination に
hogehoge.com
areare.jp
のように、受け付けたいドメイン名(@なんとか)を書いてあげれば、
/etc/postfix/virtual が一応優先されるが、1のように知らぬ存ぜぬ
ということはなくなる。ただし、SPAMが適当なアドレスで送ってき
た場合や間違えられた場合には、勝手に取り込んでしまうので
test01@hogehoge.com test01
test01@areare.jp test02
と書いておいても、test02@hogehoge.com 宛のメールは test02 へ、
また test01@areare.jp 宛のメールは test01 に届いてしまう。
3.この辺ほんとは使い分けたいよね?
多分みなさんはほんとは
「ある特定のアドレスだけはどんなドメイン宛に届いても全部受けたい
?が、それ以外のメールアカウントについてはきっちり制限したい」
というのが本音でしょう。そんな(たぶん)優先度の高い(管理者など
の)メールアドレスを受け入れるには、1の状態で設定して、かつ別途
受け入れるアドレスをべた書きしてあげると良い。
べた書きの方法としては、/etc/postfix/virtual-beta というファイル
(べつにファイル名は何でもいい)に、
/^test00@(.*)/ test00
のように正規表現で書いて、/etc/postfix/main.cf の virtual_maps に
virtual_maps = hash:/etc/postfix/virtual, regexp:/etc/postfix/virtual-beta
としてあげると、個の正規表現にあてはまったメールに関しては取り込
んでくれる。
そんなわけで、あとは
/usr/sbin/postmap hash:/etc/postfix/virtual < /etc/postfix/virtual
/usr/sbin/postfix reload
tail -f /var/adm/messages
として、ちゃんと動いている事を確認。
以下余談:
tail -f /var/adm/syslog の方に postfix 関連のエラーがでていたら
必ず潰す事。でないときちんと動作しないので、バーチャルドメインの
設定がちゃんと出来たかどうかの確認が出来ない。
自分の場合には、/etc/aliases.db がないと怒られていたのに気がつく
のが遅れて1時間以上無駄にした。
★ postfix で不正中継を更に無くす
せっかく「POP before SMTP」や「SMTP AUTH」を入れたのに、hogehoge%areare.com
というようにして不正中継をされることもあるので、次のようにします。
まず、/etc/postfix/main.cf に
> smtpd_recipient_restrictions =
>???????? regexp:/etc/postfix/recipient_checks.reg?★
>???????? permit_mynetworks
>???????? reject_non_fqdn_recipient
>???????? reject_unauth_pipelining
>???????? permit_sasl_authenticated
>???????? check_client_access hash:/etc/postfix/dracd
>???????? reject
のように、★印行を追加して、さらに「/etc/postfix/recipient_checks.reg」に
> /[@!%].*[@!%]/ 550 Please use user@domain address forms only.
と書くといいらしい。ホンとかな?