Amazon Linux 2023 の EC2 インスタンスで Postfix から Amazon SES 経由のメール送信を試してみた

Amazon Linux 2023 の EC2 インスタンスで Postfix から Amazon SES 経由のメール送信を試してみた

2026.04.02

はじめに

テクニカルサポートの 片方 です。
前回の記事では、Amazon Linux 2023 の EC2 インスタンスに Postfix と Dovecot を構築し、localhost 宛ての確認までを実施しました。

https://dev.classmethod.jp/articles/ec2-amazon-linux-2023-postfix-user-data/

ただ、メールサーバーとして動作確認ができても、そのままでは外部宛てメール送信までうまくいくとは限りません。
特に Amazon EC2 では 25 番ポートの制限があるため、外部メールサーバーへの直接配送ではなく、Amazon SES を SMTP リレーとして利用する構成が選択肢になります。

https://repost.aws/ja/knowledge-center/ec2-port-25-throttle

そこで今回は、前回構築した EC2 インスタンスをベースに、Postfix から Amazon SES 経由でメール送信する構成を試してみました。

追加の準備

今回は、前回構築した EC2 + Postfix 環境をベースに、Amazon SES を SMTP リレーとして利用したメール送信を確認します。

前提

  • ドメインは取得済みであること
  • EC2 インスタンス上で Postfix の基本構成が完了していること
  • Amazon SES を利用するリージョンをあらかじめ決めておくこと(今回は ap-northeast-1 を利用)
  • EC2 へのログインは AWS Systems Manager Session Manager を利用すること

セキュリティグループ

今回は、以下のポートを開放したセキュリティグループで検証しました。

  • インバウンドルール
    25, 110, 143, 587 (0.0.0.0/0)

  • アウトバウンドルール
    443, 587 (0.0.0.0/0)

443/TCP は Session Manager やパッケージ取得で利用し、587/TCP は Amazon SES の SMTP エンドポイントへ接続するために利用します。
また、今回は Postfix / Dovecot の待受確認や接続確認も行うため、25/TCP110/TCP143/TCP587/TCP をインバウンドで許可しています。

やってみた

https://docs.aws.amazon.com/ja_jp/ses/latest/dg/postfix.html

ドキュメントを参考に、以下の流れで実装します。

  1. DNS (Route 53) ホストゾーン作成、レコード登録
  2. SES でドメイン ID を検証
  3. SMTP 認証情報を作成
  4. Postfix 設定
  5. テスト送信

DNS (Route 53) ホストゾーン作成、レコード登録

今回は権限移譲したサブドメイン用の hosted zone を利用して構築しました。
この場合はレコード登録の記載方法が異なります。xx.aa.bb.cc. には各種設定を実施した自身の EC2 インスタンス パブリック IPv4 アドレスを 記載してください。EC2 インスタンスは停止・起動によりパブリック IPv4 アドレスが変わることがあるため、運用を見据える場合は Elastic IP の利用を検討します。
MXレコードは「どのサーバーがそのドメイン宛メールを受け取るか」を基に設定します。つまりメールを受信するサーバーの FQDN を記載します。

設定例)

  • A レコード
    (空欄) → xx.aa.bb.cc.

  • MX レコード
    (空欄) → 10 xxxxxxxx.test.xxxx.xxxxxx.info.

TXT (SPF) レコード
v=spf1 include:amazonses.com -all

SES でドメイン ID を検証

  1. AWSコンソール → SES
  2. 左メニュー「ID」
  3. 「IDの作成」
  4. 設定
  • タイプ:ドメイン

  • ドメイン名:設定しているサブドメインを記載
    例)xxxxxx.test.xx.xxxxxxx.info

  • Easy DKIM:有効

  • DKIM キー長:RSA_2048

  • Route53 自動発行:ON

001

数分待ち、ステータス「検証済み」になることを確認します。
Route 53 で対象ドメインを管理しており、自動公開を有効にした場合は、Amazon SES が必要な CNAME レコードを自動追加できます。

002

SMTP 認証情報を作成

  1. SES → 「SMTP設定」
  2. 「SMTP認証情報の作成」

取得する:

  • SMTP Username
  • SMTP Password(保存必須)

認証ファイル作成で使用するので必ずどこかにメモしてください。

Postfix 設定

Session Manager などで EC2 インスタンスに接続し、Postfix に Amazon SES の SMTP リレー設定を追加します。なお、Amazon SES の SMTP 接続は TLS 必須です。
今回は、Amazon SES の SMTP エンドポイントとして ap-northeast-1 を利用しました。
そのため、relayhost には東京リージョンの SMTP エンドポイントを設定します。

まずは postconf を利用して main.cf に必要な設定を投入します。

sudo postconf -e \
  "relayhost = [email-smtp.ap-northeast-1.amazonaws.com]:587" \
  "smtp_sasl_auth_enable = yes" \
  "smtp_sasl_security_options = noanonymous" \
  "smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd" \
  "smtp_use_tls = yes" \
  "smtp_tls_security_level = secure" \
  "smtp_tls_note_starttls_offer = yes"

主な設定の意味は以下のとおりです。

  • relayhost
    外部宛てメールを直接配送せず、Amazon SES に中継させます
  • smtp_sasl_auth_enable
    Amazon SES に対する SMTP 認証を有効化します
  • smtp_sasl_password_maps
    SMTP 認証情報を保存したファイルを参照します
  • smtp_use_tls
    TLS を利用して接続します
  • smtp_tls_security_level = secure
    TLS を必須にし、サーバー証明書の検証も行います

続いて、Amazon SES の SMTP 認証情報を保存するファイルを作成します。

sudo nano /etc/postfix/sasl_passwd

内容は以下のように記載します。

[email-smtp.ap-northeast-1.amazonaws.com]:587 SMTP_USERNAME:SMTP_PASSWORD
  • SMTP_USERNAME
    Amazon SES で作成した SMTP Username
  • SMTP_PASSWORD
    Amazon SES で作成した SMTP Password

https://docs.aws.amazon.com/ja_jp/ses/latest/dg/smtp-credentials.html

ファイル保存後、postmap でハッシュ化します。

sudo postmap hash:/etc/postfix/sasl_passwd

あわせて、認証情報ファイルの権限を制限しておきます。

sudo chown root:root /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
sudo chmod 0600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db

Amazon Linux 2023 では、CA バンドルのパスとして /etc/ssl/certs/ca-bundle.crt を指定できます。これにより、Amazon SES 側のサーバー証明書を検証できるようになります。

sudo postconf -e 'smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt'

最後に、Postfix を再読込します。

sudo postfix check
sudo systemctl restart postfix

003

Mail 送信してみた

準備は完了したので、mail コマンドをインストールし、EC2 インスタンス + Postfix + SES リレー構成で Mail 送信可能か確認します。

sudo dnf install mailx -y
コマンド例
echo "This is a test mail via SES." | mail -r <user>@xxxxxxx.test.xx.xxxxxx.info -s "SES test" xxxxxxxx@gmail.com 

004

正常に送信されることを確認できました!

まとめ

今回は、EC2 上の Postfix から Amazon SES を SMTP リレーとして利用し、外部宛てメール送信を試してみました。
Postfix と Amazon SES を組み合わせることで、EC2 の 25 番ポート制限を回避しつつ、587 番ポートで Amazon SES に中継してメール送信できることを確認できました。
実際に試してみると、Postfix 側の設定だけでなく、Amazon SES 側で検証済みの identity と実際の送信元アドレスが一致していることも重要でした。構成自体はシンプルですが、送信元ドメインや SMTP 認証情報の扱いは事前に整理しておくとスムーズに進められそうです。
前回の Postfix 構築に続き、今回は Amazon SES リレーによる送信確認まで進められたので、同様の構成を検証したい場合の参考になれば幸いです。

参考資料

クラスメソッドオペレーションズ株式会社について

クラスメソッドグループのオペレーション企業です。
運用・保守開発・サポート・情シス・バックオフィスの専門チームが、IT・AIをフル活用した「しくみ」を通じて、お客様の業務代行から課題解決や高付加価値サービスまでを提供するエキスパート集団です。
当社は様々な職種でメンバーを募集しています。
「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、クラスメソッドオペレーションズ株式会社 コーポレートサイト をぜひご覧ください。※2026年1月 アノテーション㈱から社名変更しました

この記事をシェアする

関連記事