Postfix で MTA 間送信に TLS を利用する


背景

ある日 Gmail で受信したメールに赤い錠が開いた形のマークがある、と報告を受けました。確認してみると Gmail が SMTP で受信する際に TLS が使われていない場合、赤い錠マークが表示されると、Gmail ヘルプにはあります。

寡聞にしてそのときまで知らなかったのですが、MTA 間通信でも TLS を利用できます。社内メールサーバーに利用している Postfix では、ThunderbirdSylpheed 等の MUA からの接続には TLS を使うよう設定していましたが、外部の MTA への SMTP 接続はデフォルトのままでした。

この記事では、Postfix が外部への SMTP 通信時に TLS が利用できる場合に TLS 通信させる設定について説明します。

設定方法

大掛かりな前書きを用意しましたが、設定はシンプルで main.cf に以下を追加して Postfix を reload すれば完了です。

smtp_tls_CAfile = /etc/pki/tls/cert.pem
smtp_tls_security_level = may
smtp_tls_loglevel = 1

設定の意味

smtp_tls_security_level

一番重要な設定です。値には "may" を設定しましょう。may の場合、送信先の SMTP サーバーが STARTTLS 対応している場合に STARTTLS を使い、未対応の場合は通常の SMTP で送信します。

Gmail では赤い錠アイコンが目立ちますが、残念ながら TLS に対応していないサーバーはまだまだ残っています。この記事を記述している 2016/9/30 の時点でも、Google のレポートによると、キャリアメールは全滅です。yahoo.co.jp も非対応ですね。

smtp_tls_CAfile

接続先の証明書を検証するためのルート証明書です。古いサーバーだと、ルート証明書の期限が切れていたり、不足していることがあるので、最新のものかどうか確認を忘れずに。

smtp_tls_loglevel

これを設定しないとログファイルに送信時の TLS 情報が出ません。設定しましょう

確認方法

Postfix の稼動しているサーバーで Gmail 宛に送ってみるのが簡単です。

Gmail ヘッダ

Gmail の「メッセージのソースを表示」メニューでヘッダを表示しましょう。

Received: from *.*.ne.jp (*.*.ne.jp [*.*.*.*])
        by mx.google.com with ESMTPS id qf3si568403igb.48.2016.03.10.18.18.51
        for <***@gmail.com>
        (version=TLS1 cipher=AES128-SHA bits=128/128);
        Thu, 10 Mar 2016 18:18:51 -0800 (PST)

TLS で送信されたことが確認できます。

Postfix ログ

"TLS connection" で grep してみましょう。

2016-03-11T11:18:50.879713+09:00        postfix/smtp[21172]:    mail    info     setting up TLS connection to gmail-smtp-in.l.google.com
2016-03-11T11:18:50.970645+09:00        postfix/smtp[21172]:    mail    info     Verified: subject_CN=mx.google.com, issuer=Google Internet Authority G2
2016-03-11T11:18:50.970691+09:00        postfix/smtp[21172]:    mail    info     TLS connection established to gmail-smtp-in.l.google.com: TLSv1 with cipher AES128-SHA (128/128 bits)

TLS で接続されていればこのようなログが出ていると思います。

環境ごとの注意点

Amazon Linux

上記設定のみで OK です。

CentOS

CentOS 5.x 系以前はルート証明書が古いです。更新されていることを確認しましょう。他の環境から最新のルート証明書を持ってくるのも手っ取り早くてよいですね。

今、新しくメール環境を独自ドメインで作成するなら G Suiteで運用するのが簡単ですが、古くからメールを自社で運用している場合は移行も大変で、メールサーバーが社内最古のサーバーになってしまっていることは少なくないように思います。

Debian / Ubuntu

ルート証明書のパスが Red Hat 系列 (CentOS, Amazon Linux) とは異なります。/etc/ssl/certs/ca-certificates.crt がシステムのルート証明書になります。

諸事情でアップデートできていない場合は、他の環境から最新のルート証明書を取ってきましょう。

まだ qmail 使ってるんだけど...

探してみたらパッチがありました。それも20160918 とつい先日の更新です。頑張ってください。応援しています。