請先閱讀之前的篇章
這篇文章是「在Linux上搭建郵件伺服器」系列的第七篇文章。
在之前的篇章中,我們探討了如何將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。)
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