この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:8
ページ更新者:guest
更新日時:2026-06-11 07:12:00

タイトル: 設定
SEOタイトル: Postfix 基本設定完全ガイド

この記事の要点
  • インストールは sudo apt install postfix、初期ウィザードで Internet Site / Internet with smarthost を選択
  • 最重要パラメータ: myhostname / mydomain / myorigin / inet_interfaces / mydestination
  • 設定値は postconf -e "param=value" で安全に編集(直接エディタ編集も可)
  • ハッシュ DB は postmap filefile.db 生成、aliases は newaliases
  • バーチャルドメイン対応は virtual_alias_domains + virtual_alias_maps

インストール

# 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このサーバの FQDNmail.example.com
mydomain所属ドメインexample.com
myorigin送信元 From のドメイン$mydomain
mydestination自サーバが受信するドメイン$myhostname, localhost
relayhostリレー先 SMTP[smtp.gmail.com]:587
inet_interfaces待受 IFall / loopback-only
inet_protocolsIPv4/v6ipv4 / 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 <<EOF
[smtp.sendgrid.net]:587 apikey:SG.xxxxxxxxxx
EOF

# 3. ハッシュ DB 化
sudo postmap /etc/postfix/sasl_passwd
sudo chmod 600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db

# 4. リロード
sudo postfix reload

# 5. テスト送信
echo "Body" | mail -s "Test" you@example.com
sudo tail -f /var/log/mail.log

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 <<EOF
info@example.org   admin@example.com
sales@example.org  admin@example.com
@example.net       admin@example.com
EOF

sudo postmap /etc/postfix/virtual
sudo postfix reload

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:<a@example.com>
RCPT TO:<root@example.com>
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 でローカル限定に。