centos7.2にて外に一切配送しないSMTPサーバーを作る方法.
ここでは vagrantで作った centos7.2 を想定。
(メールを仮に配送するためのユーザーを特定するため。vagrantでないホストでは適当なユーザーを作るとかする。)
root宛て以外のメールをすべてvagrantユーザー宛てに変更する
alias.regexpを以下の内容で作成する。
root宛てはrootに、vagrant以外宛てをすべてvagrant宛てに変更する、って意味(だと思う)
/(?!^root$|^vagrant$)^.*$/ vagrant
main.cf の alias_mapsを設定。
alias_maps = hash:/etc/aliases, pcre:/etc/aliases.regexp
設定のテスト
記述ミスとかあると気づかないうちに外に出ちゃったりするのでテストする。
$ postmap -q foo pcre:/etc/aliases.regexp
vagrant
$ postmap -q root pcre:/etc/aliases.regexp
; 出力なし
$ postmap -q vagrant pcre:/etc/aliases.regexp
; 出力なし
alias設定にマッチするとその結果が出力される。マッチしない場合は出力なし(つまり-qで指定されたユーザーに配送される)。
メールを外部に配信せず、すべてローカルに配信する。
/etc/postfix/transport_maps ファイルを以下の内容で作成する
/^.*@.*$/ local
(上のcodeタグにつけられたファイル名の最後のドットは不要。qiita仕様で拡張子のないファイル名はつけられない?)
main.cf の transport_maps を設定する。
transport_maps = pcre:/etc/postfix/transport_maps
ここまでの設定で、ローカル以外宛てのメールは
- ローカル配送されて
- ユーザーがvagrantでないのでalias_mapsにより vagrantに配送される
はず。
postfix を再起動
sudo systemctl restart postfix
vagrantの外からSMTPで接続できるようにする
面倒なので main.cf内で以下のようにする
inet_interfaces = all
通常、この設定をしてしまうと「すべてのホストからのSMTPリクエストを受け付けてしまう」ので$mydomainとかを設定するのだけどこのホストがvagrantで動いていてそもそもvagrantの親の外からつながらないのでOK?
参考にした資料
Postfixで絶対にメールを外に出さずに特定のローカルユーザー宛に集約する開発用メールサーバのつくり方
http://blog.roundrop.jp/show/22
半分以上この文書のコピペです。多謝。
その他
普段 windows使っているので radishとか使った方がテストは簡単なんだけど、再インストールしたときにradishのバイナリを無くして公式のを取りに行ったらlzhだったのでやめた。
あとテストとはいえPOSサーバーとか入れないとメールコマンドでちまちまやる事になり面倒。
いずれchefレシピにする。でもmain.cfとかchefでどうやるのがいいんだろう。