mail
postfix

メールを飲み込んで消すメールサーバの構築

概要

正常に受信するが、 受け取ったデータは /dev/null に流し込むPostfixの構築。

そんなことしてなにが嬉しいの

DNSにMX/Aレコードが存在しないドメインからのメールを拒否するPostfixの設定があります。
スパマーでもない限り存在しないドメインからメールを送ることは無いだろうと考えていましたが、 一方的にno-replyメールを送りたい場合があります。
この場合、 メールを拒否されないためには、 メールアドレスのドメイン部分のDNSに何かしら「最終的にIPアドレスとなるもの(MXレコードやAレコード)」を設定しておく必要があります。
しかし、 自前でMTAを持たず、 社内共有のリレーサーバを経由するような場合、 最終宛先にメールアドレス間違い等で拒否された場合に、 リレーサーバが「お届けできませんでした」を送る先に送信できず、 リレーサーバでエラーが出てしまいます。 (DNSを設定しない場合もエラーは出ますが、 ネットワーク接続ができなかったテンポラリエラー扱いで、 リトライ処理が走ってしまう事が多いです)
それくらい許容するという手も全然ありですが、 最小限の労力で「メールを受け付けるけどすぐさま捨てる」というメールサーバを作ることで解決しようと思います。

postfix_devnull_001.png

  1. MAIL FROM: no-reply@hoge.fuga.example.com / RCPT TO: user@atesaki-domain.example.jp
  2. MAIL FROM: no-reply@hoge.fuga.example.com / RCPT TO: user@atesaki-domain.example.jp (そのままリレー)
  3. ユーザがいない等のエラー応答
  4. no-reply@hoge.fuga.example.com に 「メールをお届けできませんでした」のメール(Bounce)を返したいが、 失敗する

設定

環境

  • CentOS Linux release 7.4.1708 (Core)
  • Postfix 2.10.1-6

外部からのメールを受け付け許可

/etc/postfix/main.cf
-inet_interfaces = localhost
+inet_interfaces = all

正確には外部のIPからの接続を許可です。 firewalld/iptables/各種クラウドサービスのファイアウォール(tcp:25)も許可してあげましょう。

扱うドメインを追加

/etc/postfix/main.cf
-mydestination = $myhostname, localhost.$mydomain, localhost
+mydestination = $myhostname, localhost.$mydomain, localhost, hoge.example.jp, hoge.fuga.example.com

ここに記載したドメイン宛のメールのみ受け付けます。その他の場合は「Relay access denied」と拒否します。
no-reply@xxxxxx のxxxxxの部分で使用予定のものを書いてください。

no-reply宛を/dev/nullへとルーティング

/etc/aliases
+no-reply:   /dev/null

編集後、 newaliases コマンドを実行してください。

設定反映

postfix check
postfix reload
(まだpostfixをを動かしていない場合は、 systemctl start postfix して下さい)

検証

no-reply@使いたいドメイン に対してメールを送ってみましょう。

Dec 18 06:16:17 yourhostname postfix/local[20106]: D959510D2F82: to=<no-reply@your.domain>, relay=local, delay=11, delays=11/0.02/0/0, dsn=2.0.0, status=sent (delivered to file: /dev/null)

という風に /dev/null に送られた事がわかります。

その他

  • この設定だけでは問題ないはずですが、 念のためオープンリレーサーバになっていないかチェックしておきましょう。
  • この設定だけでは、 実存するアカウントへのメール (ex. root@xxx.xxx) にはメールが届きます。 ここに迷惑メールが溜まってしまう事もあるので、 それを避けたい場合は /etc/aliases を全て /dev/nullに向ける等してみましょう。 (cronが失敗した時のメールも消えてしまいますが、 その辺の設定は書きません)
  • 完全に省きましたが、 使用するドメインのDNSの設定(MX/A/SPFのTXTレコード)ももちろん必要です。 この辺はたくさんインターネットに資料があります。