Postfixでメールの宛先の制限

どうも、東京Kです。

早速ですが、メールを送るWebシステムにおいて、ステージングサーバーなどで万が一にもテスター以外にメールが飛んで欲しくない時ってありますよね?

フレームワークがそのような機能をサポートしていたりしますが、もし、使用しているサーバーのPostfixを経由してメールを飛ばしている場合には、Postfixの設定でも回避ができます。

今回の記事では、その方法を簡単に書いておきます。

Postfixでのメールのリレー先設定

  1. Postfoxの設定ファイルを編集します。
    yum等で導入していれば /etc/postfix/main.cf に設定ファイルがありますので、transport_mapsの設定があれば確認しておいて、無ければ、以下の様に記載します。

    transport_maps = hash:/etc/postfix/transport
  2. 先ほど設定ファイルに記載したファイル( /etc/postfix/transport )を編集し、以下の様に書き換えます。(#で始まる行はコメント行ですので以下の記載からは割愛しています。)
    webimpact.co.jp           smtp:
    localhost                 local:
    localhost.localdomain     local:
    *                         discard: "discard received email"

    ※webimpact.co.jp宛てのメールは送り、ローカル宛てはローカルに送り、それ以外は破棄するという設定です。

  3. 設定ファイルをpostmapコマンドで変換します。
    $ postmap /etc/postfix/transport

    ※/etc/postfix/transport.dbというファイルが作成または更新されます

  4. Postfixを再起動します。
    $ service postfix restart
  5. 設定が反映されているかを確認します。
    ※確認方法は各自のシステムで確認しましょう。
    ※/var/log/maillogに「status=sent (“discard received email”)」等と出ていれば送信されずに破棄されています。

transportファイルの書き方

transportファイルの書き方は、transportファイルに長々と書いてありますが、簡単にまとめると、

メールの宛先  送信先:オプション

と各行に書きます。書き方の例は以下の通り

# my.example.jp宛ては、ローカルに配信
my.example.jp             local:
# 指定したIP にリレー
ip.example.jp             smtp:13.114.255.101
# []で囲まないと、 xxx.example.jpのMXレコードにリレー
host_mx.example.jp        smtp:xxx.example.jp
# []で囲むと、direct.example.jp にリレー
host_direct.example.jp    smtp:[direct.example.jp]
# :で繋げてポートの指定も出来る
host_port.example.jp      smtp:[host_port.example.jp]:587
# .から書くと「xxx@xxx.sub.example.jp」等のサブドメインも対象に。
.sub.example.jp           smtp:
# discardと書けば、メールは捨てられる
none.example.jp           discard: "discard received email"
# smtp:だけ書いたら、main.cfのrelayhostの記述に従う
*                         smtp:

その上で、これらの記述が上から順番に評価されてヒットした条件でメールが送られます。

以上、参考にしていただければ。