Postfixは「外部のSMTPサーバ」にリレーすることでも、メールを送信することができる。
もちろん、自力で各ドメインのメールサーバに届けることもできる。
SMTP-AUTUを要求する「外部のSMTPサーバ」に、
平文でユーザー名とパスワードを送り認証を受けて、メールを送り出す方法や、
自力でメールを届けさせる方法については次のページで扱った。
http://akira-arets.blogspot.jp/2015/05/postfix-266-x8664linux-centos-65-64bit.html
これを基本として、ここでは、リレー先の「外部のSMTPサーバ」がSTARTTLSに対応していて、
Postfixとの間で暗号化経路を構成してからSMTP-AUTHする場合を扱う。
ただし、外部SMTPサーバ側がSTARTTLSに対応している必要がある。
また、リレー先を複数用意おいて、メインのリレー先に到達させられない場合に対応できるようにする。
環境は、CentOS 6.7 64bit minimal で行った。
(注意)以下の設定は、安全なプライベートネットワークでの動作のみ考慮している。
■Postfixの設定
○基本的な設定
外部のSMTPサーバへのリレーを受け付ける送信元ネットワーク
(スペース区切って列挙できる。)
# postconf -e "mynetworks=127.0.0.0/8 [::1]/128 192.168.0.0/16 172.16.0.0/12"
メールを受け取るインターフェイス
# postconf -e inet_interfaces=all
○外部のSMTPサーバにリレーするための設定
・メインのリレー先SMTPサーバ([example.com]:587 のように[ ]で囲むとMXレコードを引かない。)
# postconf -e relayhost=example.com:587
・バックアップのリレー先SMTPサーバ(MXレコードを引かない場合は、同様に[ ]で括る。)
(スペースで区切って列挙できる。)
# postconf -e smtp_fallback_relay="backup.example.com:587"
このようにsmtp_fallback_relayでバックアップとしてのSMTPサーバを登録しておくことで、
メインのリレーサーバーが応答しない場合には、即座にバックアップSMTPサーバへ接続するようになる。
(注)
Postfix2.2以前では、smtp_fallback_relayは、fallback_relayという名前だった。†3
メインのリレー先が利用不可になっているときに直ちにsmtp_fallback_relayでリトライされる。†2
リレー先SMTPサーバの認証情報をファイルに作成
# echo "example.com:587 myusername:thisispassword" >> /etc/postfix/relay_password
# echo "backup.example.com:587 myusername:thisispassword" >> /etc/postfix/relay_password
認証情報ファイルからdbファイルを作成して、Postfixに登録
# postmap /etc/postfix/relay_password
# postconf -e smtp_sasl_password_maps=hash:/etc/postfix/relay_password
○リレー先SMTPサーバから認証を受けるための必要な設定
予め、次のようにパッケージを追加インストールしておく。
これは、平文SMTP-AUTHでも必要なものである。
# yum install cyrus-sasl-plain
# postconf -e smtp_sasl_auth_enable=yes
↑この設定がなければ、次のようなエラーが発生する。(/var/log/maillog)
status=bounced# postconf -e smtp_sasl_security_options=noanonymous
said: 530 5.7.0 Authentication required (in reply to MAIL FROM command)
↑この設定がなければ、次のようなエラーが発生する。(/var/log/maillog)
status=deferred以上までは、平文でSMTP-AUTHを行う場合と同じである。
warning: SASL authentication failure: No worthy mechs found
SASL authentication failed; cannot authenticate to server
no mechanism available
<★>
次の設定を行うことによって、STARTTLSに対応してTLSによる暗号化経路が作成されるようになる。
(ただし、外部SMTPサーバ側がSTARTTLSに対応している必要がある。)
# postconf -e smtp_tls_security_level=may
外部SMTPサーバが非対応ならば、平文でSMTP-AUTHが試みられる。
その場合、平文でパスワードを含む認証情報がネットワーク上を流れることになるので注意。
○TLS通信を行おうとする外部SMTPサーバが発行する「証明書」を検証する設定
以上の設定だけでも、メールを外部のサーバにリレーすることはできた。
しかし、次のようなメッセージがログ(/var/log/maillog)に確認された。
これは外部SMTPサーバが提示する公開鍵証明書の正当性が確かめられなかったことを示す。
Feb 16 00:19:13 secondary postfix/smtp[5777]: certificate verification failed for backup.example.com:587: untrusted issuer /C=US/O=Equifax/OU=Equifax Secure Certificate Authorityこれは、次の設定を行うことによって解消された。
Feb 16 00:19:14 secondary postfix/smtp[5777]: xxxxxxxxxD: to=<test@example.com>, relay=backup.example.com:587, delay=0.63, delays=0.24/0.03/0.31/0.05, dsn=2.0.0, status=sent (250 2.0.0 xxxxxxxxxxxxxx Message accepted for delivery)
Feb 16 00:19:14 secondary postfix/qmgr[5741]: xxxxxxxxxD: removed
# postconf -e smtp_tls_CAfile=/etc/pki/tls/certs/ca-bundle.crt
○Postfixの再起動
再起動をして、設定を有効化した。
# service postfix restart
■動作テスト
次のようなコマンドで、以上で設定済みのローカルのPostfixにメールを送った。
# echo testtest | sendmail -f 送信元アドレス 受信先アドレス
リレー先SMTPサーバを経て受信先では、次のようなメールヘッダーを確認できた。
(sendmailコマンド→Postfix→リレー先 まで抜粋)
Received: from local.example.com
(authenticated bits=0)
by backup.example.com (/) with ESMTP id xxxxxxxxxxxxxx
(version=TLSv1/SSLv3 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO)
for <test@example.com>; Tue, 16 Feb 2016 00:23:24 +0900 (JST)
(envelope-from me@example.com)
Received: by local.example.com (Postfix, from userid xx)
id xxxxxxxxxD; Tue, 16 Feb 2016 00:23:23 +0900 (JST)
Message-Id: <201602xxxxxxxxx.xxxxxxxxxD@local.example.com>
Date: Tue, 16 Feb 2016 00:23:23 +0900 (JST)
From: me@example.com (test)
To: undisclosed-recipients:;
testtest
以上
<参考>
(1) Postfix からのメール送信も SSL で暗号化する
< https://www.compnet.jp/archives/3175 > 2016年2月16日
(2) postfix smtp_fallback_relay for deferred messages to a single domain
< https://serverfault.com/questions/452824/postfix-smtp-fallback-relay-for-deferred-messages-to-a-single-domain > 2017年6月20日
(3) Postfix main.cf ファイルフォーマット/smtp_fallback_relay
< http://www.postfix-jp.info/trans-2.3/jhtml/postconf.5.html > 2017年6月20日