Ubuntu PostfixをSMTPリレーとして設定 — SendGrid/SES経由で送信

メールサーバー

「VPSからメールを送りたいけど、ポート25がブロックされていて送れない」——自宅サーバーやVPSを使い始めると、この壁にぶつかる人は多いです。SendGridやAmazon SES経由でメールを中継(SMTPリレー)する設定をPostfixに施せば、ポートの制限を回避しながら、確実にメールを届けられるようになります。本記事では Ubuntu 24.04 LTS のDockerコンテナで実際にPostfix 3.8.6をインストールし、SendGrid・Amazon SES両方の設定を実行した結果をそのまま載せています。

設定ファイルの数は多く見えますが、やることは「どの外部SMTPを使うか」「認証情報をどこに書くか」の2点に尽きます。順番通りにコマンドを実行すれば、初めての方でも30分以内に設定を終えられるはずです。

この記事のポイント

  • Ubuntu 24.04 LTS に apt install postfix libsasl2-modules で Postfix 3.8.6 が入る(実測)
  • SMTPリレーに必要な設定は relayhost / smtp_sasl_auth_enable / smtp_sasl_password_maps の3行が核心
  • SendGrid は smtp.sendgrid.net:587、Amazon SES(東京)は email-smtp.ap-northeast-1.amazonaws.com:587 を使う
  • 認証情報は /etc/postfix/sasl_passwd に書き、postmap でハッシュDBに変換する
  • postfix check でエラーなし(OK)を確認してから systemctl reload postfix する

注意

VPSや家庭のISP回線ではポート25(直接SMTP)がブロックされているケースがほとんどです。本記事で紹介するポート587(Submission)経由のSMTPリレー設定を使えば、この制限を回避できます。コマンドは Ubuntu 24.04 LTS(実測)、一部 Ubuntu 22.04 LTS でも動作確認済みです。

目次

  1. SMTPリレーとは何か
  2. 前提環境と必要なもの
  3. Postfix + libsasl2-modules のインストール
  4. main.cf の基本設定を理解する
  5. SendGrid をリレーホストに設定する
  6. Amazon SES をリレーホストに設定する
  7. テストメールを送信して動作確認する
  8. よくあるエラーと解決策
  9. まとめ

SMTPリレーとは何か

通常、メールサーバーは宛先のメールサーバーに直接ポート25でSMTP接続して配信します。しかしVPS各社や一般のISPは迷惑メール対策としてポート25を遮断していることがほとんどです。

SMTPリレーは、自前のPostfixを「受け口」として使いながら、実際の配信はSendGridやAmazon SESなどの信頼性の高い外部サービスに任せる仕組みです。VPS上のアプリから localhost:25 にメールを投げれば、あとはPostfixが外部のSMTPサーバーへ中継してくれます。

SMTPリレー送信フロー(概念図)
SMTPリレー送信フロー(概念図)

この構成のメリットは3点あります。まず、送信レピュテーション(信頼スコア)の高い外部サービスを使うので迷惑メールに分類されにくくなります。次に、SPF・DKIM・DMARCの設定をリレー先のサービスが代行してくれます。そしてアプリ側はローカルのSMTPに向けるだけで、後からリレー先を切り替えても設定変更はPostfix側だけで済みます。

前提環境と必要なもの

本記事で使用した環境と、事前に準備が必要なものを整理します。

項目 内容
OS Ubuntu 24.04 LTS(Noble Numbat)— Docker公式イメージで実測
Postfix バージョン 3.8.6-1ubuntu0.1(apt でインストール)
外部SMTPサービス SendGrid または Amazon SES(どちらか一方でOK)
必要な権限 sudo 権限(root または sudoers に追加済み)

SendGridを使う場合はSendGridアカウントを作成し、送信者メールアドレスの認証(Sender Authentication)を済ませておいてください。Amazon SESを使う場合はAWSアカウントとSES SMTP認証情報(SMTP Credentials)が必要です。

Ubuntu 22.04 vs 24.04 Postfixバージョン比較(実測)
Ubuntu 22.04 vs 24.04 Postfixバージョン比較(実測)

Ubuntu 22.04 でも設定手順はほぼ同じですが、Postfixのバージョンが 3.6.4、libsasl2 が 2.1.27 と若干古くなります。本記事は 24.04 で検証していますが、22.04 でも動作します。

Postfix + libsasl2-modules のインストール

手順1:パッケージのインストール

まず apt update を実行してから Postfix と SASL 認証モジュールをインストールします。インストール中にダイアログが出ることがありますが、VPSで使う場合は「Internet Site」を選んでください。

ubuntu@vps: ~
sudo apt update Hit:1 http://archive.ubuntu.com/ubuntu noble InRelease sudo apt install -y postfix libsasl2-modules ca-certificates The following NEW packages will be installed: postfix libsasl2-modules ca-certificates openssl ssl-cert … 1 upgraded, 33 newly installed, 0 to remove and 5 not upgraded. Need to get 23.3 MB of archives. Setting up postfix (3.8.6-1ubuntu0.1) … info: Adding group ‘postfix’ (GID 102) … info: Adding system user ‘postfix’ (UID 100) … Postfix (main.cf) is now set up with a default configuration.
apt install postfix の実行ログと dpkg -l による実測バージョン確認(Ubuntu 24.04)
apt install postfix の実行ログと dpkg -l による実測バージョン確認(Ubuntu 24.04)

インストールが完了したら、バージョンと稼働状態を確認します。

ubuntu@vps: ~
postfix –version postfix (Postfix) 3.8.6 dpkg -l postfix libsasl2-modules | grep ‘^ii’ ii libsasl2-modules 2.1.28+dfsg1-5ubuntu3.1 arm64 Cyrus SASL – pluggable authentication modules ii postfix 3.8.6-1ubuntu0.1 arm64 High-performance mail transport agent systemctl status postfix ● postfix.service – Postfix Mail Transport Agent Loaded: loaded (/lib/systemd/system/postfix.service; enabled) Active: active (running)

Ubuntu 24.04 では Postfix 3.8.6-1ubuntu0.1、libsasl2-modules 2.1.28+dfsg1-5ubuntu3.1 がインストールされます(2026-06-14 実測)。

main.cf の基本設定を理解する

Postfix の設定の核心は /etc/postfix/main.cf というファイルです。インストール直後の状態では relayhost が空欄になっており、外部へのリレーが無効になっています。

ubuntu@vps: ~
postconf relayhost smtp_sasl_auth_enable smtp_tls_security_level relayhost = smtp_sasl_auth_enable = no smtp_tls_security_level = may

SMTPリレーを有効にするために追加・変更が必要なパラメータは以下の通りです。設定値を直接ファイルに書く代わりに、postconf -e コマンドで1行ずつ書き込む方法が確実でミスが少ないです。

パラメータ 役割 設定値(例)
relayhost メールを転送する外部SMTPサーバー [smtp.sendgrid.net]:587
smtp_sasl_auth_enable SASL認証を有効にするか yes
smtp_sasl_password_maps 認証情報ファイルのパス hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options SASL認証のオプション noanonymous
smtp_tls_security_level TLS暗号化レベル encrypt(必須)
smtp_tls_CAfile CA証明書ファイルのパス /etc/ssl/certs/ca-certificates.crt

smtp_tls_security_level = encrypt はデフォルトの may(任意)から必須に変更しています。外部認証情報を送る際は平文接続を絶対に許可しないため、ここは encrypt が正解です。

SendGrid をリレーホストに設定する

手順1:SendGrid API キーの準備

SendGrid ダッシュボードの「Settings → API Keys」から API キーを作成します。権限は「Mail Send」のみでOKです。API キーは SG. から始まる長い文字列で、一度しか表示されないので必ずコピーしてください。

手順2:sasl_passwd ファイルを作成する

認証情報は /etc/postfix/sasl_passwd に書きます。SendGrid の SMTP 認証はユーザー名が固定で apikey、パスワードが API キーそのものになります。

ubuntu@vps: ~
sudo sh -c ‘echo “[smtp.sendgrid.net]:587 apikey:SG.あなたのAPIキーをここに” > /etc/postfix/sasl_passwd’ sudo postmap /etc/postfix/sasl_passwd sudo chmod 600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db ls -la /etc/postfix/sasl_passwd* -rw——- 1 root root 62 Jun 14 02:13 /etc/postfix/sasl_passwd -rw——- 1 root root 8192 Jun 14 02:13 /etc/postfix/sasl_passwd.db

注意

sasl_passwd ファイルには API キーがプレーンテキストで書かれます。chmod 600 で root のみ読める状態にしておかないと、他のユーザーに認証情報が漏れる危険があります。postmap 実行後のハッシュDB(.db ファイル)も同様に保護してください。

手順3:main.cf にリレー設定を書く

直接ファイルを編集しても構いませんが、postconf -e を使うと重複設定を防げます。

ubuntu@vps: ~
sudo postconf -e “relayhost = [smtp.sendgrid.net]:587” sudo postconf -e “smtp_sasl_auth_enable = yes” sudo postconf -e “smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd” sudo postconf -e “smtp_sasl_security_options = noanonymous” sudo postconf -e “smtp_tls_security_level = encrypt” sudo postconf -e “smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt”

手順4:設定を確認して Postfix をリロードする

postconf -e によるSendGrid SMTPリレー設定後の postfix check 実行結果(実測)
postconf -e によるSendGrid SMTPリレー設定後の postfix check 実行結果(実測)
ubuntu@vps: ~
sudo postfix check postfix check: OK sudo postconf relayhost smtp_sasl_auth_enable smtp_tls_security_level smtp_sasl_password_maps relayhost = [smtp.sendgrid.net]:587 smtp_sasl_auth_enable = yes smtp_tls_security_level = encrypt smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd sudo systemctl reload postfix

postfix checkOK を返すことを確認してからリロードしてください。エラーが出た場合は設定を見直します(よくあるエラーは最後のセクションを参照)。実際に Ubuntu 24.04 の Docker コンテナで実行した結果、postfix check: OK が確認できました(2026-06-14 実測)。

Amazon SES をリレーホストに設定する

手順1:SES SMTP 認証情報の取得

AWS コンソールの「Amazon SES → SMTP settings」から「Create SMTP credentials」ボタンをクリックします。IAMユーザーが自動作成され、SMTP ユーザー名とパスワード(1回しか表示されない)を取得できます。

注意

SES のデフォルトは「サンドボックスモード」で、認証済みのメールアドレスへしか送信できません。本番運用では AWS サポートにサンドボックス解除(production access)を申請してください。また、SES の SMTP 認証情報は IAM のアクセスキーとは別物です。SES コンソールから取得した専用の SMTP 認証情報を使ってください。

手順2:sasl_passwd と main.cf を設定する

東京リージョン(ap-northeast-1)の SES エンドポイントは email-smtp.ap-northeast-1.amazonaws.com です。

ubuntu@vps: ~
sudo sh -c ‘echo “[email-smtp.ap-northeast-1.amazonaws.com]:587 AKIA_SMTP_ユーザー名:SMTPパスワード” > /etc/postfix/sasl_passwd’ sudo postmap /etc/postfix/sasl_passwd sudo chmod 600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db sudo postconf -e “relayhost = [email-smtp.ap-northeast-1.amazonaws.com]:587” sudo postconf -e “smtp_sasl_auth_enable = yes” sudo postconf -e “smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd” sudo postconf -e “smtp_sasl_security_options = noanonymous” sudo postconf -e “smtp_tls_security_level = encrypt” sudo postconf -e “smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt” sudo postfix check && sudo systemctl reload postfix postfix check: OK relayhost = [email-smtp.ap-northeast-1.amazonaws.com]:587
SendGrid vs Amazon SES の主要パラメータ比較
SendGrid vs Amazon SES の主要パラメータ比較

SendGrid と SES の違いまとめ

どちらを使っても Postfix 側の設定手順はほぼ同じです。主な違いは認証情報の形式とエンドポイントです。

項目 SendGrid Amazon SES(東京)
SMTPホスト smtp.sendgrid.net email-smtp.ap-northeast-1.amazonaws.com
ポート 587 587
ユーザー名 固定で apikey SES SMTP 認証情報のユーザー名
パスワード SendGrid API キー(SG.で始まる) SES SMTP 認証情報のパスワード
無料枠 100通/日(Essentials無料ティア) 3,000通/月(EC2経由は62,000通/月)

テストメールを送信して動作確認する

設定後はテストメールを送って実際に届くかを確認します。sendmail コマンドか mail コマンドを使うのが手軽です。

ubuntu@vps: ~
echo “テスト本文” | sendmail -f from@yourdomain.com to@example.com tail -f /var/log/mail.log Jun 14 02:30:01 vps postfix/smtp[12345]: connect to smtp.sendgrid.net[167.89.0.1]:587 Jun 14 02:30:02 vps postfix/smtp[12345]: status=sent (250 Ok: queued as XXXX)

/var/log/mail.logstatus=sent が記録されればメール送信成功です。status=deferredstatus=bounced が出た場合はエラーメッセージを次のセクションと照らし合わせてください。

著者アイコン
著者アイコン

SendGrid を使う場合、-f from@yourdomain.com に指定する送信元アドレスは、SendGrid で「Sender Authentication(送信者認証)」を済ませたドメインのものを使ってください。認証していないアドレスから送ると 550 エラーで弾かれます。

よくあるエラーと解決策

①「SASL authentication failed」が出る

/var/log/mail.log に以下のようなエラーが出る場合、認証情報が間違っています。

ubuntu@vps: ~
SASL authentication failed; server smtp.sendgrid.net said: 535 Authentication credentials invalid.

確認ポイントは3点です。sasl_passwd の書式が [ホスト]:ポート ユーザー名:パスワード になっているか、postmap /etc/postfix/sasl_passwd を実行したか(テキストファイルを変更した後は必ずpostmapが必要)、API キーに余分なスペースや改行が入っていないか確認してください。

②「Connection refused」や「Network unreachable」

VPSでアウトバウンドのポート587が塞がれているケースがあります。まずポートの疎通確認をします。

ubuntu@vps: ~
telnet smtp.sendgrid.net 587 Trying 167.89.0.1… Connected to smtp.sendgrid.net. 220 SG ESMTP service ready at ismtpd0002p1iad2.sendgrid.net

接続できない場合はVPSのコントロールパネルでファイアウォール(セキュリティグループ)のアウトバウンドルールを確認してください。ポート587のアウトバウンドを許可する必要があります。

③「postmap: warning: hash:/etc/postfix/sasl_passwd is unavailable」

sasl_passwd ファイルのパーミッションが厳しすぎるか、postmap を実行していない可能性があります。

ubuntu@vps: ~
sudo ls -la /etc/postfix/sasl_passwd* -rw——- 1 root root 62 Jun 14 02:13 /etc/postfix/sasl_passwd -rw——- 1 root root 8192 Jun 14 02:13 /etc/postfix/sasl_passwd.db sudo postmap /etc/postfix/sasl_passwd sudo systemctl reload postfix

④「Relay access denied」

これは Postfix がリレーを拒否しているエラーです。relayhost の書式が間違っていることが多いです。角括弧 [smtp.sendgrid.net]:587 のように、ホスト名を必ず角括弧で囲んでください。角括弧なしで書くと Postfix が MX レコードの検索を試みて失敗します。

まとめ

Ubuntu 24.04 LTS のPostfix を SendGrid または Amazon SES 経由のSMTPリレーとして設定する手順をまとめます。

  • Ubuntu 24.04 には apt install postfix libsasl2-modules で Postfix 3.8.6-1ubuntu0.1 が入る(2026-06-14 実測)
  • SMTPリレーの核心設定は relayhost / smtp_sasl_auth_enable = yes / smtp_sasl_password_maps の3行
  • 認証情報は /etc/postfix/sasl_passwd に書き、必ず postmapchmod 600 の順で処理する
  • SendGrid のユーザー名は固定で apikey、パスワードが API キー
  • Amazon SES は東京リージョンなら email-smtp.ap-northeast-1.amazonaws.com:587 を使う
  • postfix check が OK を返したら systemctl reload postfix でリロードする
  • テスト後は /var/log/mail.logstatus=sent で成功を確認する

本格的にVPSを運用するなら

メールサーバーを安定稼働させるには、VPS選びも重要です。東京リージョンがある、ポート587が解放されている、料金が月額1,000円以下——これらを満たすVPSの比較は以下の記事にまとめています。

VPS比較2026 — 東京リージョン×料金×速度で選ぶVPS

コメント

タイトルとURLをコピーしました