どうも、ディーネットの山田です。
大阪地震、西日本豪雨により被害に遭われた皆様心よりお見舞い申し上げます。
私は、どちらも電車が運休してしまい、出勤できませんでした。
また、大阪地震については、出勤途中の駅で運行打ち切りになったので、
出勤もできない・帰宅もできない困難者になって結構大変でした。
そういう時は、スマホが生命線なので予備バッテリは常に常備しておくに越したことはないですね。
さて、話が脱線してしまいましたが、本題に移りたいと思います。
目次
概要
今回は、シェルスクリプトなどからのメールについて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レコード制限回避のために自分のアカウントを使って自社のメールサーバなどから
メールを送信する方法の紹介でした。