Postfixで送信したメールをGmailで受信すると「このメールは xxxxx で暗号化されませんでした」となる現象を解決
Ubuntu 20でPostfixを使ったメールサーバ構築後にLet’s EncryptのSSL証明書を作成して暗号化したけど、なぜかGmailでメールを受信すると暗号化されていないと警告が出る現象を解決した件をシェアします。
行った作業内容
- Postfix インストール
- Dovecot インストール
- メールユーザーアカウント登録
- Certbot インストール
- SSL証明書の発行と設定
- IMAP over SSL (Port 993)での受信確認
- SMTP over SSL (Port 465)での送信確認
それなのにGmailで受信すると暗号化されていない警告?
受信したメールのヘッダーを確認する
Received: from [192.168.1.200] (**** [****])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ***** (Postfix) with ESMTPSA id A0215600C0
for <****@gmail.com>; Sun, 9 Apr 2023 13:52:16 +0900 (JST)
TLSで暗号化されているように見える
自身のIPアドレスで接続している部分のメールログ
Apr 9 14:58:10 sv001 postfix/smtpd[80358]: connect from *****[*****]
Apr 9 14:58:10 sv001 postfix/smtpd[80358]: Anonymous TLS connection established from *****[*****]: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)
Apr 9 14:58:11 sv001 postfix/smtpd[80358]: 2DBC46038F: client=*****[*****], sasl_method=PLAIN, sasl_username=mailtest2
Apr 9 14:58:12 sv001 postfix/cleanup[80364]: 2DBC46038F: message-id=<3AFD96AA8439CCCE3E56E2A@*****.jp>
「Anonymous TLS」とあるのでTLSで暗号化されているように見える
GmailにSMTPで接続している部分のメールログ
Apr 9 14:34:52 sv001 postfix/smtp[78576]: 2159D6038F: to=<*****@gmail.com>, relay=gmail-smtp-in.l.google.com[142.251.170.27]:25, delay=2.8, delays=1.2/0.01/0.75/0.79, dsn=2.0.0, status=sent (250 2.0.0 OK 1681018492 li12-20020a170903294c00b0019f3d6dfd19si7501744plb.471 - gsmtp)
Apr 9 14:34:52 sv001 postfix/qmgr[78555]: 2159D6038F: removed
TLSって書いていないので本当に暗号化されていなかった。。。
そもそもの間違い
設定とメールログにある「smtpd」と「smtp」の違いを理解していなかった。
・「自宅のパソコン」→「Postfix サーバ」間が「smtpd」のサーバー設定
・「Postfix サーバ」→「Gmailサーバ」間が「smtp」のクライアント設定
Gmailが暗号化されてないと言っているのは「Postfix サーバ」→「Gmailサーバ」間の通信のことでした。よってメールソフトのIMAPとSMTPで暗号化したところで関係ない話だった。
smtpとsmtpdの両方向を暗号化することで解決
##---------------------
## *TLS設定
##---------------------
#宛先のメールサーバがTLSに対応していれば、通信を暗号化する
smtp_tls_security_level = may
smtpd_tls_security_level = may
#ルート証明書を指定
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
#サーバ証明書と秘密鍵を指定
smtpd_tls_cert_file = /etc/letsencrypt/live/*****.jp/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/*****.jp/privkey.pem
#TLSログレベルの設定(0:出力しない 1:TLSハンドシェイクと証明書情報 2:全て)
smtp_tls_loglevel = 1
smtpd_tls_loglevel = 1
#暗号に関する情報を "Received:" メッセージヘッダに含める
smtpd_tls_received_header = yes
#接続キャッシュファイルの指定
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache
#キャッシュの保持時間の指定
smtpd_tls_session_cache_timeout = 3600s
「smtp_tls_CAfile」にはルート証明書を登録する必要があります。再度ログを確認すると
Apr 9 15:10:48 sv001 postfix/smtp[82502]: Trusted TLS connection established to gmail-smtp-in.l.google.com[64.233.188.27]:25: TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-256) server-digest SHA256
Apr 9 15:10:49 sv001 postfix/smtp[82502]: B72C86038F: to=<*****@gmail.com>, relay=gmail-smtp-in.l.google.com[64.233.188.27]:25, delay=2.7, delays=1.3/0.02/0.8/0.66, dsn=2.0.0, status=sent (250 2.0.0 OK 1681020649 n2-20020a635c42000000b0050b3064cd60si7732477pgm.416 - gsmtp)
Apr 9 15:10:49 sv001 postfix/qmgr[82482]: B72C86038F: removed
「Trusted TLS connection」で無事に暗号化されました。ルート証明書の設定が間違っていると「Untrusted TLS connection」となるので注意しましょう。
この設定変更を行ったら、なかなか消えなかったGmailで暗号化に失敗しているマークが消えてくれたので安心です(メールでは安心感が重要)