

EC2のPostfixからAmazon SES経由でメール送信する設定
この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。
EC2上のPostfixから、直接送信ではなくAmazon SESのSMTPエンドポイントへリレーする設定をした。以下その手順。
構成
flowchart LR
App[アプリ/OS] --> Postfix
Postfix -->|SMTP 587 STARTTLS| SES[Amazon SES SMTPエンドポイント]
SES --> Recipient[宛先メールサーバー]
Postfixは直接インターネットへ25番で送るのではなく、SESのSMTP認証情報を使って587番でリレーする形。
main.cfの変更
/etc/postfix/main.cf に以下を追加。
relayhost = [email-smtp.us-east-1.amazonaws.com]:587smtp_tls_note_starttls_offer = yessmtp_tls_security_level = encryptsmtp_sasl_password_maps = hash:/etc/postfix/sasl_passwdsmtp_sasl_security_options = noanonymoussmtp_sasl_auth_enable = yessmtp_use_tls = yessmtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crtsmtp_tls_CAfile のパスはディストリによって違う。Debian/Ubuntu系は /etc/ssl/certs/ca-bundle.crt だが、Amazon Linux系だと /etc/pki/tls/certs/ca-bundle.crt になっているはず(未確認、要環境確認)。
SASL認証情報ファイルの作成
smtp_sasl_password_maps で指定したパスと、実際に作るファイルのパスは一致させる必要がある。今回は /etc/postfix/sasl_passwd で統一した。
echo "[email-smtp.us-east-1.amazonaws.com]:587 SMTP-USERNAME:SMTP-PASSWORD" > /etc/postfix/sasl_passwd中身にSMTP認証情報が平文で入るので、パーミッションは絞っておく。
chmod 600 /etc/postfix/sasl_passwdハッシュDBの生成
postmap hash:/etc/postfix/sasl_passwdこれで /etc/postfix/sasl_passwd.db が生成される。main.cf 側の hash: の指定と実ファイル名がズレていると、ここまで手順通りに進めても認証で落ちるので注意。
master.cfの変更
/etc/postfix/master.cf の、実際にメール送信で使うエントリ(smtp もしくは submission)の下にある smtp_fallback_relay= のコメントアウトを外す。
# -o smtp_fallback_relay= -o smtp_fallback_relay=どのエントリの下かはmaster.cfの構成次第なので、複数エントリがある場合はどこに入れたか記録しておいた方がいい。
反映
設定ファイルを変更したら、postmapの再実行とpostfixのreloadを忘れずに。
postmap hash:/etc/postfix/sasl_passwdsystemctl reload postfix