タイトル: 設定
SEOタイトル: Postfix 基本設定完全ガイド
| この記事の要点 |
|
インストール
# Ubuntu / Debian
sudo apt update
sudo apt install -y postfix mailutils
# RHEL / Rocky / AlmaLinux
sudo dnf install -y postfix mailx
sudo systemctl enable --now postfix
# インストール時の対話
# General type of mail configuration:
# No configuration 何もしない
# Internet Site 直接 SMTP で配送 (本物のメールサーバ)
# Internet with smarthost プロバイダ/SES 経由でリレー (送信専用)
# Satellite system 上流に全て委ねるクライアント
# Local only ローカル配送のみ
選び方
| 用途 | 選択 |
|---|---|
| 本格メールサーバ (受信もする) | Internet Site |
| Web アプリの通知メール送信専用 | Internet with smarthost (Gmail/SES へリレー) |
| cron 結果を root へ届けたいだけ | Internet with smarthost or Satellite |
| テスト・開発機 | Local only |
初期 main.cf テンプレート
Ubuntu パッケージのインストール直後は概ね次のような状態になります:
# /etc/postfix/main.cf (Ubuntu 既定)
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
append_dot_mydomain = no
readme_directory = no
compatibility_level = 3.6
# TLS
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_security_level=may
smtp_tls_security_level=may
# 主要設定
myhostname = mail.example.com
mydomain = example.com
myorigin = /etc/mailname
mydestination = $myhostname, localhost.$mydomain, localhost
relayhost =
mynetworks = 127.0.0.0/8 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
必須パラメータの意味
| パラメータ | 意味 | 典型値 |
|---|---|---|
myhostname | このサーバの FQDN | mail.example.com |
mydomain | 所属ドメイン | example.com |
myorigin | 送信元 From のドメイン | $mydomain |
mydestination | 自サーバが受信するドメイン | $myhostname, localhost |
relayhost | リレー先 SMTP | [smtp.gmail.com]:587 |
inet_interfaces | 待受 IF | all / loopback-only |
inet_protocols | IPv4/v6 | ipv4 / all |
mynetworks | 無条件で送信許可するネット | 127.0.0.0/8 |
home_mailbox | 個人メールボックス形式 | Maildir/ |
postconf による安全な編集
main.cf を直接 vi 編集するより、postconf -e を使う方が誤字防止になります:
# 現在の有効値
postconf myhostname
# myhostname = mail.example.com
# 設定変更 (差分のみ書き換え)
sudo postconf -e "myhostname=mail.example.com"
sudo postconf -e "mydomain=example.com"
sudo postconf -e "myorigin=\$mydomain"
sudo postconf -e "inet_interfaces=all"
sudo postconf -e "mydestination=\$myhostname, localhost.\$mydomain, localhost, \$mydomain"
# デフォルトから変更されたパラメータのみ表示
postconf -n
# パラメータ削除 (=既定に戻す)
sudo postconf -X smtpd_tls_loglevel
# 検証して反映
sudo postfix check
sudo postfix reload
SMTP リレー設定 (Internet with smarthost)
# 1. リレー先を設定
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"
# 2. 認証ファイル作成
sudo tee /etc/postfix/sasl_passwd <
aliases (ローカル別名)
cron や system が root に送るメールを管理者の Gmail へ転送する、よくある運用:
# /etc/aliases
postmaster: root
root: admin@example.com
webmaster: admin@example.com
# DB 化 (必須)
sudo newaliases
# = sudo postalias /etc/aliases
# 確認
postmap -q root hash:/etc/aliases.db
# admin@example.com
バーチャルドメイン (複数ドメイン受信)
# main.cf
virtual_alias_domains = example.org example.net
virtual_alias_maps = hash:/etc/postfix/virtual# /etc/postfix/virtual
sudo tee /etc/postfix/virtual <
user@host 形式の確認 (アドレス展開)
# 受信ドメインに入っているか
postmap -q example.com hash:/etc/postfix/transport
postmap -q user@example.com hash:/etc/postfix/virtual
# どこに配送されるか trace
sudo postmap -q user@example.com hash:/etc/aliases.db
# 完全な配送経路シミュレーション
sendmail -bv user@example.com
動作確認
# 設定構文チェック
sudo postfix check
# 状態
sudo systemctl status postfix
ss -lntp | grep ':25\|:587\|:465'
# telnet で SMTP 直接叩く
telnet localhost 25
# 220 mail.example.com ESMTP Postfix
EHLO test
MAIL FROM:
RCPT TO:
DATA
Subject: test
.
QUIT
FAQ
Q: ホスト名を後から変えたい
A: sudo postconf -e "myhostname=新FQDN" && sudo postfix reload。/etc/mailname も合わせて更新。
Q: dpkg-reconfigure postfix で再ウィザード
A: 設定方針を変えたい場合 sudo dpkg-reconfigure postfix で初期ウィザードに戻れます。
Q: 内部だけで使うので外からのアクセスを禁じたい
A: inet_interfaces = loopback-only + mynetworks = 127.0.0.0/8 でローカル限定に。