前の話を先に読んでください
この記事は「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認証(近日公開!)
Add a New Comment