[アップデート]Amazon SESの送信イベントに受信サーバへのメール送信時に利用されたTLSバージョンが追加されました
初めに
先月のアップデートとなりますがAmazon SESの送信イベントに送信時に利用されたTLSのバージョンが含まれるようになりました。
以前はメール送信元(クライアント)からAmazon SESまでの通信に利用されたTLSのバージョンは取得することができましたが、Amazon SESから受信者側までのTLSのバージョンについては取得することができなかったのでこれに対応する形となります。
副次的に(?)TLSを利用有無自体が見えるようになったため個人的には結構嬉しいアップデートではないかと感じてます。
現在のAmazon SESの仕様ではクライアントからAmazon SESに対してはTLS v1.2以上の暗号化通信が強制されていますが、Amazon SESから受信サーバに対する通信のTLSの利用を必須とするかはオプションとなっており設定と受信サーバ側次第で暗号化されていない場合があります。
https://docs.aws.amazon.com/ja_jp/ses/latest/dg/security-protocols.html
デフォルトでは、Amazon は日和見 TLSSESを使用します。つまり、Amazon SES は常に受信メールサーバーへの安全な接続を試みます。Amazon SESが安全な接続を確立できない場合、暗号化されていないメッセージを送信します。この動作は、設定セットを使用することで変更できます。
Amazon SESではデフォルトでいわゆる日和見TLSが採用されており、サーバサイドでTLS非対応の場合暗号化せず通信を行います(「日和見TLS」という単語をAWSのドキュメントで見るとは思いませんでした)。
Postfixを触っている方はご存知smtp_tls_security_level=may
相当がデフォルト設定となります。
一昔前はTLSの対応まちまちなのでこの設定がむしろメジャーな印象がありましたが、近年では通信の暗号化必須の流れも進んでいるためできれば暗号化しておきたいというのは当然あるかと思います。
一方でSMTPの暗号化は世論的な意味ではHTTPほど一般化していない印象で、かつ端末やブラウザといったユーザが直接何とかしやすいHTTPSと違いサーバサイド部のため、まだTLSに対応していない受信サーバはそこそこ存在する印象があります。
なのでできればそこを確認したい...というのがこれまではできなかったのですが、今回のアップデートで受信サーバ向けのTLSの利用状況を確認できるようになったので今後はどの程度影響があるかを調査できるようになります。
実際に確認してみる
Amazon SESでは暗号化を任意とした上でメールの送信を行います。Amazon SESから受信サーバへの通信で利用されているTLSのバージョンはtags
内のses:outgoing-tls-version
のパラメータから確認できます。
Amazon SESではイベント情報を保存していれば特に追加の設定等は必要ありません。
TLS利用パターン
受信サーバ側のPostfixで以下の設定を加えてTLSv1.3の通信を強制した上でAmazon SESから送信を行ってみます。
smtpd_tls_security_level = encrypt
smtpd_tls_protocols = >=TLSv1.3
この場合記録されるイベントのタグは以下のようになります。
ses:source-tls-version
から送信元クライアントからAmazon SESまでの通信はTLSv1.2が利用されており、ses:outgoing-tls-version
よりAmazon SESから受信サーバまではTLSv1.3が利用されていることが確認できます。
"tags": {
"ses:source-tls-version": [
"TLSv1.2"
],
"ses:operation": [
"SendSmtpEmail"
],
"ses:configuration-set": [
"examplecom-configuration"
],
"ses:recipient-isp": [
"UNKNOWN_ISP"
],
"ses:outgoing-tls-version": [
"TLSv1.3"
],
"ses:source-ip": [
"xx.xx.xx.xx"
],
"ses:from-domain": [
"example.com"
],
"ses:sender-identity": [
"example.com"
],
"ses:caller-identity": [
"xxxxxxx"
],
"ses:outgoing-ip": [
"yy.yy.yy.yy"
]
}
流石に暗号スイートといった部分の情報はなくてあくまでTLSのバージョンまでのようですね。
TLS無効化パターン
ではTLSを利用しなかった場合はどうなるのでしょうか。
受信サーバ側でsmtpd_tls_security_level = none
を行った場合を確認してみます。
この場合のイベントとしてはses:outgoing-tls-version
のキー自体がなくなるようです。
{
"tags": {
"ses:source-tls-version": [
"TLSv1.2"
],
"ses:operation": [
"SendSmtpEmail"
],
"ses:configuration-set": [
"examplecom-configuration"
],
"ses:recipient-isp": [
"UNKNOWN_ISP"
],
"ses:source-ip": [
"xx.xxx.xxx.xxx"
],
"ses:from-domain": [
"example.com"
],
"ses:sender-identity": [
"example.com"
],
"ses:caller-identity": [
"xxxxxx"
],
"ses:outgoing-ip": [
"23.251.234.8"
]
}
}
一方でses:source-tls-version
は引き続きTLSv1.2
として残っているためクライアントからAmazon SESまではTLSv.1.2で暗号化、それ以降は暗号化なしとわかります。
念の為受信側のログを確認してみましたがTLS関連のログは出力されていませんでした。
smtpd_tls_security_level = encrypt
で受信した場合
Nov 8 18:10:29 ubuntu postfix/smtpd[3047251]: initializing the server-side TLS engine
Nov 8 18:10:29 ubuntu postfix/smtpd[3047251]: connect from e234-8.smtp-out.ap-northeast-1.amazonses.com[23.251.234.8]
Nov 8 18:10:30 ubuntu postfix/smtpd[3047251]: setting up TLS connection from e234-8.smtp-out.ap-northeast-1.amazonses.com[23.251.234.8]
Nov 8 18:10:30 ubuntu postfix/smtpd[3047251]: e234-8.smtp-out.ap-northeast-1.amazonses.com[23.251.234.8]: TLS cipher list "aNULL:-aNULL:HIGH:MEDIUM:+RC4:@STRENGTH"
Nov 8 18:10:30 ubuntu postfix/smtpd[3047251]: SSL_accept:before SSL initialization
Nov 8 18:10:30 ubuntu postfix/smtpd[3047251]: SSL_accept:before SSL initialization
Nov 8 18:10:30 ubuntu postfix/smtpd[3047251]: SSL_accept:SSLv3/TLS read client hello
Nov 8 18:10:30 ubuntu postfix/smtpd[3047251]: SSL_accept:SSLv3/TLS write server hello
Nov 8 18:10:30 ubuntu postfix/smtpd[3047251]: SSL_accept:SSLv3/TLS write change cipher spec
Nov 8 18:10:30 ubuntu postfix/smtpd[3047251]: SSL_accept:TLSv1.3 write encrypted extensions
Nov 8 18:10:30 ubuntu postfix/smtpd[3047251]: SSL_accept:SSLv3/TLS write certificate
Nov 8 18:10:30 ubuntu postfix/smtpd[3047251]: SSL_accept:TLSv1.3 write server certificate verify
Nov 8 18:10:30 ubuntu postfix/smtpd[3047251]: SSL_accept:SSLv3/TLS write finished
Nov 8 18:10:30 ubuntu postfix/smtpd[3047251]: SSL_accept:TLSv1.3 early data
Nov 8 18:10:30 ubuntu postfix/smtpd[3047251]: SSL_accept:TLSv1.3 early data
Nov 8 18:10:30 ubuntu postfix/smtpd[3047251]: SSL_accept:SSLv3/TLS read finished
Nov 8 18:10:30 ubuntu postfix/smtpd[3047251]: e234-8.smtp-out.ap-northeast-1.amazonses.com[23.251.234.8]: Issuing session ticket, key expiration: 1731058829
Nov 8 18:10:30 ubuntu postfix/smtpd[3047251]: SSL_accept:SSLv3/TLS write session ticket
Nov 8 18:10:30 ubuntu postfix/smtpd[3047251]: Anonymous TLS connection established from e234-8.smtp-out.ap-northeast-1.amazonses.com[23.251.234.8]: TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256
Nov 8 18:10:30 ubuntu postfix/smtpd[3047251]: 284EBB8012A: client=e234-8.smtp-out.ap-northeast-1.amazonses.com[23.251.234.8]
Nov 8 18:10:45 ubuntu postfix/smtpd[3047251]: disconnect from e234-8.smtp-out.ap-northeast-1.amazonses.com[23.251.234.8] ehlo=2 starttls=1 mail=1 rcpt=1 data=1 quit=1 commands=7
smtpd_tls_security_level = none
で受信した場合
Nov 8 18:15:43 ubuntu postfix/smtpd[3047754]: connect from e234-8.smtp-out.ap-northeast-1.amazonses.com[23.251.234.8]
Nov 8 18:15:43 ubuntu postfix/smtpd[3047754]: lost connection after EHLO from e234-8.smtp-out.ap-northeast-1.amazonses.com[23.251.234.8]
Nov 8 18:15:43 ubuntu postfix/smtpd[3047754]: disconnect from e234-8.smtp-out.ap-northeast-1.amazonses.com[23.251.234.8] ehlo=1 commands=1
Nov 8 18:15:43 ubuntu postfix/smtpd[3047754]: connect from e234-8.smtp-out.ap-northeast-1.amazonses.com[23.251.234.8]
Nov 8 18:15:43 ubuntu postfix/smtpd[3047754]: C1CB0B8012A: client=e234-8.smtp-out.ap-northeast-1.amazonses.com[23.251.234.8]
Nov 8 18:15:58 ubuntu postfix/smtpd[3047754]: disconnect from e234-8.smtp-out.ap-northeast-1.amazonses.com[23.251.234.8] ehlo=1 mail=1 rcpt=1 data=1 quit=1 commands=5
終わりに
今回Amazon SESへのTLS利用状況ではなくAmazon SESから受信サーバ向けのTLSの利用状況を確認してみました。
特に追加設定も必要もなくログもJSONなので、S3に保存している場合はAthenaを利用すれば楽に集計できるのも良い感じです。なんならテキストベースかつ設定次第ではTLSのバージョンすら出ていない生Postfixよりよっぽど便利ではあります。
今現在ではこの辺りの通信の暗号化ははHTTP程言われはしないものの、時世が進めば暗号化せざるを得なくなる、TLSが使われるようになればTLSの最低バージョンの話の影響を受けるようになってくるというのは将来的にあり得る話で永遠とそのままというわけにはいかない部分かと思います。
せっかくイベントログ保存していれば勝手に追加されるような形ではありますので、一度見て将来への心構えをしておくのも良さそうです。