24時間365日フルマネージドホスティングサービスのデイーネット

Postfixで外部メールサーバを中継する方法について

どうも、ディーネットの山田です。

大阪地震、西日本豪雨により被害に遭われた皆様心よりお見舞い申し上げます。

私は、どちらも電車が運休してしまい、出勤できませんでした。

また、大阪地震については、出勤途中の駅で運行打ち切りになったので、 出勤もできない・帰宅もできない困難者になって結構大変でした。

そういう時は、スマホが生命線なので予備バッテリは常に常備しておくに越したことはないですね。

さて、話が脱線してしまいましたが、本題に移りたいと思います。

概要

今回は、シェルスクリプトなどからのメールについてMTAのPostfixが 直接インターネットに送るのではなく、自社のメールサーバ経由で 送れるようにする方法を紹介します。

背景として、自社のドメインにSPFレコードが導入され、記載されている IP以外からはスパム扱いとなってしまうので、自社のメールサーバに 自分のメールアカウントでSMTPAUTH認証を取ってから送ろうという 考え付いたためです。

SPFレコードとは

電子メールの送信元ドメインが詐称されていないかを検査するための仕組みです。 DNS情報に予め送信元サーバのIPアドレスを記載しておき、受信側のサーバが 実際に送ってきたメールサーバのIPアドレスとを比較し、受信拒否するなどの 処理を行います。

検証環境情報

OS

CentOS release 6.9 (Final)

Postfix

postfix-2.6.6-8.el6.x86_64

検証内容

テストメールコマンド

# echo "testmail" | mail -s "testmail" "{※メールアカウント}"
  • {※メールアカウント}宛にメールを送信できます

作業内容

必要なパッケージをインストールします

SMTP AUTHの各種認証方式に対応できるようにする
# yum install cyrus-sasl.x86_64 cyrus-sasl-devel.x86_64 cyrus-sasl-lib.x86_64 cyrus-sasl-md5.x86_64 cyrus-sasl-plain.x86_64
  • CRAM-MD5認証に対応できるようにします

必要な設定ファイルを作成します

メールアカウント情報が記載されたファイルを作成する
# vi /etc/postfix/relay_password
------------------------------------------------------------
[{※自社メールサーバのホスト名やIP}]:587 {※メールアカウント}:{※メールパスワード}
------------------------------------------------------------
  • SMTP AUTHに使用するメールアカウント情報を記載します
Postfixが読めるようにバイナリ化する
# postmap /etc/postfix/relay_password
  • Postfixは平文だと読めないので、バイナリ化します
エンベロープFROMを書き換えるためのファイルを作成する
# vi /etc/postfix/sender_maps
------------------------------------------------------------
/^.*$/ {※メールアカウント}
------------------------------------------------------------
  • 送信元メールアドレスを書き換えないと、メールサーバ側で送信元メールアドレスの存在チェックで拒否される可能性があるので、送信元メールアドレスは書き換えた方が無難です。
  • こちらは、正規表現形式になるので、バイナリ化は不要です。
Postfixの設定に組み込む
# vi /etc/postfix/main.cf
------------------------------------------------------------
## RELAY HOST
relayhost = [{※自社メールサーバのホスト名やIP}]:587

## SMTP AUTH
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/relay_password
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = login, cram-md5, plain

## SSL
smtp_use_tls = yes
smtp_tls_security_level = may
smtp_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt

## HEADER CHANGE
local_header_rewrite_clients = permit_mynetworks
sender_canonical_classes = envelope_sender
sender_canonical_maps = regexp:/etc/postfix/sender_maps
------------------------------------------------------------
  • 必要最低限なものを揃えていますので、上記の内容を末端に追加して頂ければOKです。

設定反映のためにPostfixを再起動する

# service postfix restart

動作結果

  • テストメールコマンドを実行した際の結果を参考程度に記載しておきます。

SMTPAUTHを使うか直接送るかでログの出力内容が異なります

▼自社のメールを経由する場合
Jul 17 13:00:43 localhost postfix/pickup[16356]: 5743F100805: uid=0 from=<root>
Jul 17 13:00:43 localhost postfix/cleanup[16363]: 5743F100805: message-id=<20180717040043.5743F100805@localhost.localdomain>
Jul 17 13:00:43 localhost postfix/qmgr[16357]: 5743F100805: from=<{※メールアカウント}>, size=445, nrcpt=1 (queue active)
Jul 17 13:00:44 localhost postfix/smtp[16365]: 5743F100805: to=<{※メールアカウント}>, relay=XXX.XXX.XX.XX[{※自社メールサーバのホスト名やIP}]:587, delay=0.91, delays=0.02/0.03/0.53/0.33, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as C4B232B204F2)
Jul 17 13:00:44 localhost postfix/qmgr[16357]: 5743F100805: removed
▼直接インターネットに送る場合
Jul 17 13:04:02 localhost postfix/pickup[16482]: 8B96C100805: uid=0 from=<root>
Jul 17 13:04:02 localhost postfix/cleanup[16489]: 8B96C100805: message-id=<20180717040402.8B96C100805@localhost.localdomain>
Jul 17 13:04:02 localhost postfix/qmgr[16483]: 8B96C100805: from=<root@localhost.localdomain>, size=453, nrcpt=1 (queue active)
Jul 17 13:04:03 localhost postfix/smtp[16491]: 8B96C100805: to=<{※メールアカウント}>, relay=YYY.YYY.YY.YY[YYY.YYY.YY.YY]:25, delay=1.1, delays=0.03/0/0.68/0.41, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 41V68z21yMz35B)
Jul 17 13:04:03 localhost postfix/qmgr[16483]: 8B96C100805: removed

SMTPAUTHを使うか直接送るかでヘッダーの内容が異なります

▼自社のメールを経由する場合
Return-Path: <{※メールアカウント}>
X-Original-To: {※メールアカウント}
Delivered-To: {※メールアカウント}
Received: from localhost.localdomain (unknown [ZZZ.ZZZ.ZZ.ZZ])
    by XXX.XXX.XX.XX (Postfix) with ESMTPSA id C4B232B204F2
    for <{※メールアカウント}>; Tue, 17 Jul 2018 13:00:43 +0900 (JST)
Received: by localhost.localdomain (Postfix, from userid 0)
    id 5743F100805; Tue, 17 Jul 2018 13:00:43 +0900 (JST)
Date: Tue, 17 Jul 2018 13:00:43 +0900
To: {※メールアカウント}
Subject: testmail
User-Agent: Heirloom mailx 12.4 7/29/08
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-Id: <20180717040043.5743F100805@localhost.localdomain>
From: {※メールアカウント} (root)

testmail
▼直接インターネットに送る場合
Return-Path: <root@localhost.localdomain>
X-Original-To: {※メールアカウント}
Delivered-To: {※メールアカウント}
X-No-Auth: unauthenticated sender
Received: from YYY.YYY.YY.YY (YYY.YYY.YY.YY [YYY.YYY.YY.YY])
    by XXX.XXX.XX.XX (Postfix) with ESMTP id A4E802B204F2
    for <{※メールアカウント}>; Tue, 17 Jul 2018 13:04:04 +0900 (JST)
Received: from localhost.localdomain (unknown [ZZZ.ZZZ.ZZ.ZZ])
    by YYY.YYY.YY.YY (MTA) with ESMTP id 41V68z21yMz35B
    for <{※メールアカウント}>; Tue, 17 Jul 2018 13:04:03 +0900 (JST)
Received: by localhost.localdomain (Postfix, from userid 0)
    id 8B96C100805; Tue, 17 Jul 2018 13:04:02 +0900 (JST)
Date: Tue, 17 Jul 2018 13:04:02 +0900
To: {※メールアカウント}
Subject: testmail
User-Agent: Heirloom mailx 12.4 7/29/08
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-Id: <20180717040402.8B96C100805@localhost.localdomain>
From: root@localhost.localdomain (root)

testmail

以上、SPFレコード制限回避のために自分のアカウントを使って自社のメールサーバなどから メールを送信する方法の紹介でした。

  • このページの先頭へ

  • 東京本社
    〒105-0001東京都港区虎ノ門2-3-22 第一秋山ビル5F
    TEL:03-3591-8887 FAX:03-3591-8886
  • 大阪本社
    〒541-0041 大阪市中央区北浜2-6-11北浜エクセルビル5F
    TEL:06-6231-8887 FAX:06-6231-8897

  • 認証範囲はこちらをご覧ください。

Denet logo

クラウドサービス・データセンタ・高機能専有サーバ・共有サーバホスティングサービス 株式会社ディーネット
dot_bar