前の話を先に読んでください
この記事は「Linuxでメールサーバーを構築する」シリーズの第7弾です。
前の話ではDovecotとPostgreSQLを連携させてユーザー認証を設定する方法を扱いました。
まだ確認していない場合は、先にお読みになることをおすすめします。
👉 前の話: Dovecotのauth-sql.conf.ext設定とパスワードハッシュ
Postfix設定ファイルの構造
Postfixはメール送信を担当するSMTPサーバーで、さまざまな設定ファイルを使用して動作を調整します。
この記事ではPostfixの設定ファイル構造と主要な役割を説明します。

Postfix主要設定ファイル
| ファイル名 | 役割 |
|---|---|
| /etc/postfix/main.cf | Postfixの主要設定ファイル(メール送信、ネットワーク設定など) |
| /etc/postfix/master.cf | Postfixサービス管理(SMTP、LMTP、SASL認証など) |
| /etc/postfix/virtual | 仮想ユーザー(ドメイン)マッピング |
| /etc/postfix/aliases | システムユーザーのメールエイリアス管理 |
| /etc/postfix/transport | 特定のドメイン/アドレスに対するメール送信経路指定 |
| /etc/postfix/relay_domains | リレー許可ドメイン設定 |
| /etc/postfix/sasl_passwd | SMTPリレーサーバー認証情報保存 |
| /etc/postfix/sql/*.cf | データベース連携設定ファイル(PostgreSQL) |
Postfix主要設定項目 (main.cf)
Postfixの動作を定義する主要設定を見ていきましょう。
ファイルの場所は/etc/postfix/main.cfです。
1️⃣ 基本的なメールサーバー設定
myhostname = mail.example.com
mydomain = example.com
myorigin = $mydomain
inet_interfaces = all
inet_protocols = ipv4
myhostname→ メールサーバーのホスト名mydomain→ 基本ドメイン設定inet_interfaces→ すべてのネットワークインターフェースでメールを受信するように設定inet_protocols→ IPv4のみ使用(IPv6無効化可能)
2️⃣ メールリレー制限
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
permit_mynetworks→ 信頼できるネットワークからのリレーを許可permit_sasl_authenticated→ SASL認証されたユーザーのみメールリレー可能defer_unauth_destination→ 認証されていない外部リレーをブロック
3️⃣ 仮想ユーザーとデータベース連携
PostfixがPostgreSQLを使用して仮想ドメインとメールボックスを管理するには、以下の設定を追加する必要があります。
virtual_mailbox_domains = pgsql:/etc/postfix/sql/virtual_domains.cf
virtual_mailbox_maps = pgsql:/etc/postfix/sql/virtual_mailboxes.cf
virtual_alias_maps = pgsql:/etc/postfix/sql/virtual_aliases.cf
🔹 説明
- virtual_mailbox_domains → 受信可能な仮想ドメインをデータベースから取得
- virtual_mailbox_maps → ユーザーメールボックス情報をデータベースから取得
- virtual_alias_maps → メールエイリアスをデータベースから取得
💡 MySQLを使用する場合
pgsql:の代わりにmysql:を使用します。💡 大規模トラフィック環境ではproxy:pgsql:を使用することが性能面で有利ですが、一般的な環境ではproxy:なしでも十分に動作します。
Postfixがデータベースを使用するように設定する
PostfixがPostgreSQLを使用するには関連パッケージをインストールする必要があります。
sudo apt update
sudo apt install postfix postfix-pgsql
postfix→ 基本的なPostfix SMTPサーバーpostfix-pgsql→ PostfixがPostgreSQLと連携できるようにするパッケージ
インストールが完了したら、PostfixがPostgreSQLからユーザー情報を取得できるように設定ファイルを作成する必要があります。
Postfixデータベース連携設定 (virtual_*.cfファイル作成)
Postfixはvirtual_domains.cf、virtual_mailboxes.cf、virtual_aliases.cfファイルを使用してデータベースから情報を取得します。
これらのファイルは直接作成する必要があり、以下の内容を参考にして作成すれば良いです。
1️⃣ /etc/postfix/sql/virtual_domains.cf (ドメイン取得設定)
user = mailadmin
password = yourpassword
dbname = mail
hosts = 127.0.0.1
query = SELECT domain_name FROM mail_domain WHERE domain_name='%s' AND active=true
説明
user → PostgreSQLユーザーアカウント(postfixがDBにアクセスできるように、DBにユーザーを事前に作成してください)
password → PostgreSQLアカウントパスワード(事前に作成したDBユーザーmailadminのDBアカウントパスワード)
dbname → データベース名
hosts → データベースサーバーアドレス(ローカルサーバー使用)
query → mail_domainテーブルから受信可能ドメインを取得
2️⃣ /etc/postfix/sql/virtual_mailboxes.cf (メールボックス取得設定)
user = mailadmin
password = yourpassword
dbname = mail
hosts = 127.0.0.1
query = SELECT home_directory FROM mail_users WHERE email='%s'
説明
query → ユーザーのメール保存パスを取得(mail_usersテーブルでhome_directoryフィールドを返します)
Postfixがユーザーのメールを正しいディレクトリに保存するためのパスを返します。
3️⃣ /etc/postfix/sql/virtual_aliases.cf (メールエイリアス取得設定)
user = mailadmin
password = yourpassword
dbname = mail
hosts = 127.0.0.1
query = SELECT destination_email FROM mail_alias WHERE source_email='%s'
説明
query → エイリアスがある場合、実際にメールが転送される対象メールを取得
mail_aliasテーブルを参照してエイリアスが登録されているメールを見つけて返します。
セキュリティ設定
これらの設定ファイルはパスワードが含まれているため、権限を制限する必要があります。
sudo chmod 640 /etc/postfix/sql/virtual_*.cf
sudo chown root:postfix /etc/postfix/sql/virtual_*.cf
🔒 セキュリティ注意事項:
パスワードが含まれている設定ファイルのため、他のユーザーが読めないように権限を制限する必要があります。 chmod 640を適用してPostfixプロセス(postfixグループ)のみアクセス可能に設定します。
Postfix設定を再ロード
設定が完了したらPostfixを再ロードして変更を反映する必要があります。
sudo systemctl restart postfix
まとめと次のステップ
✅ Postfix設定ファイルの構造および役割の説明
✅ Postfixのmain.cfに主要設定を追加
✅ PostfixがPostgreSQLと連携するようにvirtual_*.cfファイルを設定
次回の話ではPostfixとDovecotを連携させてSMTP認証を構成する方法を扱う予定です。
これを通じてメールサーバーが送受信機能を完全に備える設定を行うつもりです。
👉 次回: PostfixとDovecotの連携およびSMTP認証(近日公開!)
コメントはありません。