2026年5月29日
2026年5月29日
UbuntuにPostfixをインストールする方法(送信専用・外部SMTPリレーの設定)
Postfix は、Ubuntu で標準的に使われるメール転送エージェント(MTA)です。Web サーバーに入れると、WordPress のお問い合わせフォームやパスワードリセットのメールを、PHP の mail()(WordPress の wp_mail() が既定で使う方法)から送れるようになります。
この記事では、Ubuntu 24.04 LTS / 26.04 LTS を例に、Postfix をサーバーから外へ送るだけの用途で設定する手順を説明します(2026年11月時点。Postfix のバージョンは 24.04 が 3.8、26.04 が 3.10)。メールボックスを持って受信する本格的なメールサーバーには、ほかに Dovecot や TLS 証明書、受信側のスパム対策などが必要になり、この記事の範囲を超えます。
送り方を決める
| 方式 | 仕組み | 向いている場合 |
|---|---|---|
| 直接送信 | Postfix が宛先のメールサーバーへ直接届ける | 自分でドメインの DNS(SPF・逆引き)を整えられ、送信ポート 25 が使える |
| 外部 SMTP へのリレー | 契約しているメールサービスの SMTP サーバーに認証して預ける | 迷惑メール扱いを避けたい、ポート 25 が制限されている |
多くのクラウドや VPS では、迷惑メール対策として外向きの TCP 25 番ポートが制限されていることがあります。直接送信を考えている場合は、先に確認します。
nc -vz -w 5 gmail-smtp-in.l.google.com 25
succeeded と出れば接続できます。タイムアウトする場合は 25 番が制限されているので、外部 SMTP へのリレー(ポート 587)を使うか、事業者の解除手続きを確認してください。
Postfix をインストールする
sudo apt update
sudo apt install postfix
インストール中に設定画面が表示されます。最初の「General type of mail configuration」で、次の中から選びます。
| 選択肢 | 内容 |
|---|---|
| No configuration | 設定ファイルを作らない |
| Internet Site | 直接送受信する |
| Internet with smarthost | 外へのメールは指定した SMTP サーバー(スマートホスト)経由で送り、ローカル宛ては自分で配送する |
| Satellite system | すべてのメールをスマートホストへ送り、自分では配送しない |
| Local only | サーバー内のユーザー間だけでやり取りする |
- 直接送信なら Internet Site を選びます。
- 外部 SMTP へリレーするなら Internet with smarthost を選びます。続けてリレー先のホストを聞かれますが、この記事ではあとで
relayhostを設定するので、そのままで進めてかまいません。認証の設定もあとで追加します。
次の「System mail name」には、送信元のドメイン名(例:example.com)を入力します。この値は /etc/mailname に保存され、ドメインを省いた宛先や送信者に補われます。
選び直したいときは、いつでも次のコマンドで同じ画面を開けます。
sudo dpkg-reconfigure postfix
main.cf の主な項目を確認する
設定は /etc/postfix/main.cf にあります。手で編集してもかまいませんが、postconf -e を使うと既存の行を書き換えるので、同じ項目が重複しません。
# 既定値から変更されている項目だけを表示
sudo postconf -n
送信専用のサーバーでは、外部からの SMTP 接続を受け付ける必要がありません。待ち受けをローカルだけにします。
sudo postconf -e 'inet_interfaces = loopback-only'
sudo postconf -e 'myhostname = web1.example.com'
sudo postconf -e 'mydestination = localhost.localdomain, localhost'
sudo systemctl restart postfix
インストール直後の mydestination には、「System mail name」で入力したドメインが含まれています。上のように localhost 系だけにしないと、そのドメイン宛てのメールが外に出ません。
| 項目 | 意味 |
|---|---|
myhostname |
このサーバーのホスト名(FQDN)。送信時の名乗りに使われる |
myorigin |
送信者のドメインを補うときの値。Ubuntu の既定は /etc/mailname |
mydestination |
自分宛てとして受け取るドメイン。サイトのドメインが入っていると、そのドメイン宛て(例:管理者のアドレス)が外へ出ずサーバー内に配送されるため、送信専用なら localhost 系だけにしておく |
inet_interfaces |
待ち受けるアドレス。loopback-only でローカルからのみ |
relayhost |
外部 SMTP にリレーする場合の宛先 |
inet_interfaces を変えたときは reload ではなく restart が必要です。
外部 SMTP にリレーする(認証あり)
契約しているメールサービスの SMTP サーバーに、ユーザー名とパスワードで認証して送る設定です。ホスト名・ポート・認証情報は利用するサービスの案内に従ってください。
認証用のモジュールを入れる
Ubuntu の postfix パッケージは、SMTP 認証に使う libsasl2-modules を「推奨」ではなく「提案」扱いにしているため、自動では入らないことがあります。入っていないと、認証で no mechanism available のようなエラーになります。
sudo apt install libsasl2-modules
認証情報のファイルを作る
/etc/postfix/sasl_passwd を作成します。左側は、次に設定する relayhost と同じ書き方にします。
[smtp.example.net]:587 username:password
sudo chmod 600 /etc/postfix/sasl_passwd
sudo postmap /etc/postfix/sasl_passwd
postmap で検索用の sasl_passwd.db が作られます。ファイルを変更したら、そのたびに postmap を実行し直します。
main.cf に追加する
sudo postconf -e 'relayhost = [smtp.example.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_sasl_tls_security_options = noanonymous'
sudo postconf -e 'smtp_tls_security_level = encrypt'
sudo systemctl reload postfix
- ホスト名を
[ ]で囲むと、MX レコードを引かずにそのホストへ直接接続します。 smtp_tls_security_level = encryptで、リレー先との通信に TLS を必須にし、パスワードが暗号化されずに送られるのを防ぎます。- 465 番ポート(接続直後から TLS)を指定された場合は、
relayhost = [smtp.example.net]:465に加えてsmtp_tls_wrappermode = yesが必要です。
送信をテストする
Postfix に含まれる sendmail コマンドで送ります。追加のパッケージは要りません。
printf 'Subject: Postfix test\n\nThis is a test.\n' | sudo /usr/sbin/sendmail -f wordpress@example.com you@example.net
ログで配送の結果を確認します。
sudo tail -f /var/log/mail.log
/var/log/mail.log が無い環境では、journal から確認します。
sudo journalctl -u 'postfix*' -f
| ログの表示 | 意味 |
|---|---|
status=sent (250 ...) |
相手のサーバーが受け取った |
status=deferred |
一時的な失敗。キューに残り、あとで再送される |
status=bounced |
恒久的な失敗。理由が続けて表示される |
SASL authentication failed |
リレー先の認証に失敗した(ユーザー名・パスワード・sasl_passwd の左側を確認) |
キューに残ったメールは postqueue -p で一覧を、sudo postqueue -f で再送を試せます。キューの操作は Postfixのメールキューを管理する方法 で詳しく説明しています。
設定の文法やファイルの権限は、次のコマンドで確認できます。問題が無ければ何も表示されません。
sudo postfix check
WordPress から送れるようにする
WordPress の wp_mail() は既定で PHP の mail() を使い、Ubuntu の PHP は /usr/sbin/sendmail を呼び出します。Postfix を入れれば、追加の設定なしで WordPress からメールが送られます。
管理画面の「ユーザー」→「新規追加」でテスト用ユーザーを作る、パスワードリセットを試すなどして、メールが届くか確認します。WordPress の送信者アドレスは既定で wordpress@サイトのドメイン です。
迷惑メール扱いを避けるために
送信者のドメインに SPF・DKIM・DMARC を設定していないと、Gmail などでは迷惑メールに振り分けられたり、受け取りを拒否されたりします。
- 直接送信する場合:送信元サーバーの IP アドレスを SPF に含め、逆引き(PTR)をホスト名に合わせます。DKIM の署名には OpenDKIM などの追加設定が必要です。
- 外部 SMTP にリレーする場合:利用するサービスの案内に従って SPF と DKIM の DNS レコードを登録します。
設定の確認方法は SPF・DKIM・DMARCの設定を確認する方法 で説明しています。
注意点
inet_interfaces = allのままmynetworksを広げると、第三者に中継される「オープンリレー」になるおそれがあります。送信専用のサーバーではloopback-onlyにしておきます。sasl_passwdとsasl_passwd.dbにはパスワードが入ります。権限は600にし、バックアップなどで外に出さないようにします。- ファイアウォール(ufw など)で 25 番ポートの受信を開ける必要はありません。送信専用なら閉じたままにします。