Postfixをインストールして最初に開くmain.cf。そこに並ぶmyhostnameとmydomainは、一見似ているようで役割がまったく異なります。「どっちに何を書けばいいの?」と迷った経験はないでしょうか。
この記事では、Postfixの基本設定パラメータであるmyhostnameとmydomainの違いを、実際のSMTP通信やヘッダの例を交えて解説します。さらに、実務で見落としがちなDNS逆引き・SPF・TLS証明書との整合性についても取り上げます。
この記事のポイント
- myhostname = SMTPのEHLO/Receivedヘッダで使う「サーバーの識別名」
- mydomain = myorigin経由でシステムメールの@以降を補完する設定
- バーチャルドメイン運用では mydomain の影響範囲は限定的
- DNS逆引き(PTR)・SPF・TLS証明書は myhostname と整合させることが重要
コピペ用 main.cf テンプレート
以下は本記事で解説したパラメータをまとめた設定テンプレートです。example.jp を自分のドメインに置き換えて、main.cf にそのまま貼り付けできます。数ヶ月後に見返しても各パラメータの意味がわかるよう、コメントで解説を付けています。
##################################################
#ホスト名・ドメイン基本設定
##################################################
#--- myhostname ---
#SMTPのEHLO/HELOで相手サーバーに名乗るFQDN(サーバーの名刺)
#Receivedヘッダの「by ○○○」にも記録される
#DNS逆引き(PTR)の結果と必ず一致させること(不一致だとGmail等でスパム判定)
#TLS証明書のSAN(Subject Alternative Name)にもこのFQDNを含めること
#省略すると gethostname() の値が使われるが、VPS/クラウドでは意図しない値になりがち
myhostname = mail.example.jp
#--- mydomain ---
#サーバーが所属するドメイン名
#省略すると myhostname からホスト部分を除去した値が自動設定される
#(mail.example.jp → example.jp)
#myorigin や mydestination から $mydomain で参照される
mydomain = example.jp
#--- myorigin ---
#このサーバーから送信するメールの@以降を何にするか
#$myhostname → [email protected](サーバー名が付く)
#$mydomain → [email protected](ドメイン名が付く・推奨)
#cronやバウンスメールの差出人アドレスに影響する
#SPFレコードはこのドメインに対して設定すること
myorigin = $mydomain
#--- mydestination ---
#このサーバーがローカル配送(UNIXユーザーのメールボックスに直接配送)するドメインの一覧
#ここに書いたドメイン宛のメールは local(8) で配送される
#【重要】virtual_mailbox_domains と同じドメインを絶対に書かないこと(エラーになる)
mydestination = $myhostname, localhost.$mydomain, localhost
##################################################
#ネットワーク設定
##################################################
#--- inet_interfaces ---
#Postfixが待ち受けるネットワークインターフェース
#all = 全インターフェースでSMTP受信(外部からメールを受ける場合)
#loopback-only = localhost のみ(送信専用サーバーの場合)
inet_interfaces = all
#--- mynetworks_style ---
#リレーを許可する「信頼するネットワーク」の範囲
#host = 自分自身(127.0.0.1)のみ(最も安全・推奨)
#subnet = 同一サブネット(社内LAN等)
#class = 同一IPクラス(非推奨・オープンリレーの危険)
mynetworks_style = host
##################################################
#バーチャルドメイン設定(複数ドメインでメール受信する場合)
##################################################
#--- virtual_mailbox_domains ---
#仮想メールボックスで受信するドメイン(複数指定可)
#UNIXアカウント不要でメール受信できる
#mydestination に入れたドメインはここに書かないこと
#virtual_mailbox_domains = example.jp, example.com
#--- virtual_mailbox_maps ---
#仮想メールボックスの一覧(どのアドレスを受け付けるか)
#virtual_mailbox_maps = hash:/etc/postfix/vmailbox
#--- virtual_transport ---
#仮想メールボックス宛メールの配送先(Dovecot等のIMAPサーバー)
#virtual_transport = lmtp:unix:private/dovecot-lmtp
##################################################
#TLS設定(メール通信の暗号化)
##################################################
#--- smtpd_tls_cert_file / smtpd_tls_key_file ---
#受信時TLSに使うサーバー証明書と秘密鍵
#証明書のSAN(Subject Alternative Name)に myhostname のFQDNが含まれていること
#Let's Encryptの場合: certbot certonly -d mail.example.jp
smtpd_tls_cert_file = /etc/pki/tls/certs/mail.example.jp.pem
smtpd_tls_key_file = /etc/pki/tls/private/mail.example.jp.key
#--- smtpd_tls_security_level ---
#受信時のTLSポリシー
#may = クライアントがSTARTTLS対応ならTLSを使用(推奨)
#encrypt = TLS必須(非対応クライアントからのメールを拒否)
#none = TLS無効(非推奨)
smtpd_tls_security_level = may
#--- smtp_tls_security_level ---
#送信時のTLSポリシー(外部サーバーへの接続)
#may = 相手がSTARTTLS対応ならTLSを使用(推奨)
smtp_tls_security_level = may
使い方:
- 上記をコピーして
/etc/postfix/main.cfに貼り付け example.jp→ 自分のドメインに置換- バーチャルドメインが必要なら
#を外して有効化 postfix checkで構文チェック →systemctl reload postfixで反映
myhostnameとは ─ SMTPの「名刺」
myhostnameは、PostfixがSMTP通信で自分自身を名乗るときに使うFQDNです。具体的には以下の場面で使われます。
使われる場面
1. EHLO/HELOコマンド
外部サーバーにメールを送信する際、SMTP接続の冒頭で自分の名前を名乗ります。
220 mx.example.com ESMTP
EHLO mail.example.jp ← ここにmyhostnameの値が使われる
250 mx.example.com Hello mail.example.jp
2. Receivedヘッダ
メールを受信・中継すると、Postfixは自動的にReceivedヘッダを付与します。
Received: from sender.example.com (sender.example.com [192.0.2.1])
by mail.example.jp (Postfix) ← myhostnameの値
with ESMTPS id XXXXXXXX
for <[email protected]>; Mon, 2 Mar 2026 10:00:00 +0900 (JST)
3. バウンスメールの差出人
配送に失敗した場合のバウンス通知は MAILER-DAEMON@myhostname から送信されます。
設定例
myhostname = mail.example.jp
設定しない場合、gethostname()の結果(通常は/etc/hostnameの値)が使われます。クラウドやVPS環境ではデフォルト値が意図しない名前になることが多いため、必ず明示的に設定しましょう。
mydomainとは ─ メールアドレスの「@以降」を決める
mydomainは、サーバーが所属するドメイン名を定義するパラメータです。直接SMTP通信に使われることは少なく、他のパラメータから参照される形で間接的に機能します。
デフォルト値
mydomain = myhostnameからホスト名部分を除いたもの
例えば myhostname = mail.example.jp の場合、mydomain = example.jp が自動的に設定されます。
最も重要な使われ方: myorigin
myoriginは「このサーバーから発信されるメールの@以降」を決めるパラメータです。デフォルトでは:
myorigin = $myhostname # ← Postfixのデフォルト
多くの運用では以下のように変更します:
myorigin = $mydomain # 推奨設定
この設定の違いを見てみましょう。cronやシステムからのメール(ユーザー名だけで@がない宛先)がどう補完されるかが変わります。
| 設定 | cronメールの差出人 | 説明 |
|---|---|---|
myorigin = $myhostname |
[email protected] |
サーバー名が付く |
myorigin = $mydomain |
[email protected] |
ドメイン名が付く |
複数のサーバーがある環境では、myorigin = $mydomainにしておくと、どのサーバーから送られたメールも統一されたドメインで送信されます。
mydomainが使われるその他の場面
mydestination = $myhostname, localhost.$mydomain, localhost
mydestinationは「このサーバーがローカル配送する宛先ドメイン」のリストです。ここに$mydomainを追加すると、[email protected]宛のメールもローカル配送されます。
両者の関係を図で整理
myhostname、mydomain、myorigin、mydestinationの関係を整理します。
myhostname = mail.example.jp
│
├──→ EHLO mail.example.jp(SMTP通信で名乗る)
├──→ Received: by mail.example.jp(ヘッダに記録)
│
└── mydomain = example.jp(ホスト名部分を除去して自動設定)
│
├──→ myorigin = $mydomain
│ └──→ 送信メールの@以降: [email protected]
│
└──→ mydestination に追加可能
└──→ [email protected] をローカル配送
まとめると:
| パラメータ | 役割 | 例 |
|---|---|---|
myhostname |
SMTPで名乗るFQDN | mail.example.jp |
mydomain |
サーバーのドメイン名 | example.jp |
myorigin |
送信メールの@以降 | $mydomain → example.jp |
mydestination |
ローカル配送する宛先 | $myhostname, localhost |
バーチャルドメインとの使い分け
実際のメールサーバー運用では、複数のドメインのメールを1台のサーバーで扱うことが一般的です。ここでmydomainとvirtual_mailbox_domainsの使い分けが重要になります。
mydomain(ローカル配送)
- サーバー自身のシステムメール用(1つだけ)
- UNIXユーザーアカウントに配送
- root, postmaster等のシステムアカウント向け
virtual_mailbox_domains(仮想配送)
- ユーザーメール受信用(複数ドメイン可)
- UNIXアカウント不要
- Dovecot等と連携した仮想メールボックスに配送
myhostname = mail.example.jp
mydomain = example.jp
myorigin = $mydomain
virtual_mailbox_domains = example.jp, example.com, example.net
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_transport = lmtp:unix:private/dovecot-lmtp
注意: mydestinationとvirtual_mailbox_domainsに同じドメインを入れてはいけません。Postfixはドメインの所属を一意に判定するため、重複するとエラーになります。
実務で押さえるべき5つの注意点
1. DNS逆引き(PTR)をmyhostnameと一致させる
多くのメールサーバーは、接続元IPの逆引き結果とEHLOで名乗ったホスト名が一致するかを検証します(FCrDNS: Forward-Confirmed Reverse DNS)。
IPアドレス: 203.0.113.10
逆引き(PTR): mail.example.jp ← myhostnameと一致させる
正引き(A): mail.example.jp → 203.0.113.10
不一致の場合: Gmail等の主要プロバイダでスパム判定されるリスクが高まります。VPSやクラウドでは逆引き設定をコントロールパネルから変更できることが多いので、必ず確認しましょう。
2. SPFレコードにmyhostnameのIPを含める
SPF(Sender Policy Framework)は、ドメインからの送信を許可するIPアドレスを宣言するDNS TXTレコードです。
; example.jp のDNS TXTレコード
example.jp. IN TXT "v=spf1 a:mail.example.jp -all"
myorigin = $mydomainで[email protected]としてメールを送る場合、example.jpのSPFレコードにmail.example.jpのIPが含まれている必要があります。
3. TLS証明書のSANにmyhostnameを含める
Postfixでsmtpd_tls_cert_fileに指定する証明書は、myhostnameと一致するSAN(Subject Alternative Name)を持つ必要があります。
openssl x509 -in /etc/pki/tls/certs/mail.pem -noout -ext subjectAltName
Let’s Encryptを使う場合:
certbot certonly -d mail.example.jp
4. /etc/hostname と myhostname の不一致に注意
/etc/hostnameとmyhostnameが異なると、ログの追跡が困難になります。syslogのホスト名は/etc/hostnameベースですが、Postfixのログはmyhostnameを使います。
hostname -f # /etc/hostname ベース
postconf myhostname # Postfix設定
運用上は両者を一致させておくのがベストプラクティスです。
5. Docker/クラウド環境では必ず明示的に指定
コンテナ環境やクラウドVMでは、hostnameコマンドの結果がランダムなID(例: d4e5f6a7b8c9)になることがあります。
myhostname = mail.example.jp
mydomain = example.jp
設定を省略すると、EHLOで意味不明なホスト名を名乗ることになり、受信側で即座に拒否される可能性があります。
設定の確認コマンド
設定後は以下のコマンドで確認しましょう。
Postfix設定の確認
postconf myhostname mydomain myorigin mydestination
postfix check
postconf -n
DNS設定の確認
dig -x 203.0.113.10 +short
dig mail.example.jp A +short
dig example.jp TXT +short
SMTP動作の確認
telnet localhost 25
EHLO test
まとめ
| パラメータ | 一言で言うと | 典型的な値 |
|---|---|---|
myhostname |
SMTP通信の名刺 | mail.example.jp |
mydomain |
サーバーの所属ドメイン | example.jp |
myorigin |
送信メールの@以降 | $mydomain |
mydestination |
ローカル配送先ドメイン | $myhostname, localhost |
設定のベストプラクティス:
myhostnameを明示的にFQDNで設定するmyorigin = $mydomainで送信アドレスを統一する- DNS逆引き・SPF・TLS証明書をmyhostnameと整合させる
- バーチャルドメインでユーザーメールを管理し、mydestinationはシステム用に限定する
次回は「Postfixのバーチャルドメイン設定 ─ 複数ドメインを1台で運用する方法」を解説予定です。


コメント