背景
ある日 Gmail で受信したメールに赤い錠が開いた形のマークがある、と報告を受けました。確認してみると Gmail が SMTP で受信する際に TLS が使われていない場合、赤い錠マークが表示されると、Gmail ヘルプにはあります。
寡聞にしてそのときまで知らなかったのですが、MTA 間通信でも TLS を利用できます。社内メールサーバーに利用している Postfix では、Thunderbird や Sylpheed 等の 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 とつい先日の更新です。頑張ってください。応援しています。