
自宅サーバーでブログを運用していると、バックアップスクリプトの実行結果やWordPressのコメント通知、セキュリティアラートなどを自分のGmail宛てに送信する場面が多々あります。
しかし、デフォルト設定のままメールサーバー(Postfix等)から送信すると、Gmailでメールを開いた際に送信元アドレスの横に「赤い開いた南京錠のアイコン(暗号化されていません)」が表示されてしまうことがあります。
これは、自前のサーバーとGoogleのメールサーバーとの間の通信が平文(暗号化なし)で行われていることを意味しており、セキュリティ上好ましくないだけでなく、迷惑メールフォルダに直行する大きな原因になります。
本記事では、Webサーバー用の無料SSL証明書(Let’s Encrypt / Certbot)を流用し、Postfixの送信時(SMTPクライアント)および受信時(SMTPサーバー)のTLS暗号化を有効化して、Gmailに安全なメールとして届ける設定手順をまとめました。
1. 赤い南京錠が表示される原因
Gmailは、メールの送受信経路で TLS(Transport Layer Security)暗号化 が使われていないメールに対して、ユーザーへ注意を促すために赤い南京錠アイコンを表示します。
- 問題点:
- 経路上の通信が盗聴・改ざんされるリスクがある。
- Googleのスパム判定フィルターにおいて評価が下がり、迷惑メール扱い(Spam)になりやすい。
- 解決策:
- 自宅サーバー側のPostfixに有効なTLS証明書を設定し、外部サーバーへの配送時に 「TLS暗号化通信(STARTTLS)」を優先・必須化 する。
2. Let’s Encrypt証明書の確認
すでにWordPress等のWebサーバー(Nginx / Apache)でLet’s Encryptを利用している場合、既存の証明書ファイルをそのままPostfixに適用できます。
通常、証明書は以下のパスに配置されています。
- 証明書(フルチェーン):
/etc/letsencrypt/live/<ドメイン名>/fullchain.pem - 秘密鍵:
/etc/letsencrypt/live/<ドメイン名>/privkey.pem
※Postfix(postfix ユーザー)が秘密鍵を読み取れるよう、パーミッションに注意してください(通常はroot権限でPostfixデーモンが読み込むため問題ありません)。
3. Postfixの設定(/etc/postfix/main.cf)
Postfixの設定ファイルを開いて、TLS関連のパラメータを編集・追記します。
sudo nano /etc/postfix/main.cf追記・変更する設定内容
# ==========================================
# 🔒 TLS / 暗号化設定
# ==========================================
# 証明書と秘密鍵のパス(Let's Encryptのパスを指定)
smtpd_tls_cert_file = /etc/letsencrypt/live/example.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/example.com/privkey.pem
# 受信側(サーバーとしてメールを受け取る際)のTLS有効化
smtpd_tls_security_level = may
smtpd_tls_auth_only = yes
smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
# 送信側(Gmail等へメールを送り出す際)のTLS有効化 ★最重要★
smtp_tls_security_level = may
smtp_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
# CA証明書のパス(外部サーバーの証明書を検証するため)
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache設定のポイント
smtp_tls_security_level = may:- 相手先サーバー(Googleなど)がTLSに対応していれば、自動的に暗号化接続(Opportunistic TLS / STARTTLS)を行います。
!TLSv1, !TLSv1.1:- 脆弱性のある古いプロトコルを無効化し、安全なTLS 1.2 / TLS 1.3での通信を強制します。
4. 設定の反映とテスト送信
設定ファイルを保存したら、Postfixを再起動して設定を反映させます。
sudo systemctl restart postfixテストメールの送信
コマンドラインからGmail宛てにテストメールを送信します。
echo "Postfix TLS Test Body" | mail -s "Postfix TLS Test Subject" your_email@gmail.comメールログの確認
/var/log/mail.log(または journalctl -u postfix)を確認し、TLSハンドシェイクが成功しているかを点検します。
sudo tail -n 20 /var/log/mail.log以下のようなログ行が出力されていれば成功です。
postfix/smtp[xxxxx]: Untrusted TLS connection established to gmail-smtp-in.l.google.com[xxx.xxx.xxx.xxx]:25: TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256TLS connection established ... TLSv1.3 と出ていれば、Googleのサーバーと強固な暗号化通信でハンドシェイクできています。
5. Gmail側での確認
届いたメールをGmailで開いて確認します。
- メールの差出人名の横にある 詳細アイコン(小さな下矢印「▼」) をクリック。
- 表示されるセキュリティ情報の欄を確認します。
- 「セキュリティ: 標準的な暗号化(TLS)」 と表示され、緑色(または通常の鍵アイコン)になっていれば完全クリアです。
- 赤い開いた南京錠マークは綺麗に消えています。
まとめ
- Gmailの「赤い南京錠」は、自前サーバーとGoogleサーバー間の通信が平文であることが原因
- Web用として取得済みのLet’s Encrypt証明書をそのままPostfixに流用できる
smtp_tls_security_level = mayを追加するだけで、送信メールの安全性が向上し、迷惑メール判定のリスクも大幅に低減できる
自宅サーバーからのログ・通知メール運用において、一度設定しておけば恒久的に安心できる必須チューニングです。



コメント