Skip to content

Nuface Blog

隨意隨手記 Casual Notes

Menu
  • Home
  • About
  • Services
  • Blog
  • Contact
  • Privacy Policy
  • Login
Menu

MariaDB + PostfixAdmin:虛擬網域與信箱帳號管理核心

Posted on 2025-11-202025-11-21 by Rico

【Mail Server 系列文:第 3 篇】

在上一回(第 2 篇)我們完成了 架構導入動機 與 整體架構佈局 的說明。
從這一篇開始,我們將逐步進入實作,本篇將介紹本郵件系統的核心管理組件:

  • MariaDB(資料庫)
  • PostfixAdmin(網頁化帳號管理介面)

這兩個元件負責管理:

  • 虛擬網域(virtual domains)
  • 信箱帳號(mailbox)
  • 別名信箱(alias)
  • 網域別名(alias domain)
  • 密碼修改
  • 管理者後台

也就是 Postfix + Dovecot 完整運作不可或缺的基礎。


🧩 一、架構角色說明

元件作用為什麼需要?
MariaDB儲存網域、帳號、密碼、轉寄設定讓 Postfix / Dovecot 以「虛擬帳號」模式運作,不依賴系統帳號
PostfixAdmin一個 PHP Web 介面,讓管理者新增/刪除帳號、重設密碼不需要手動管理 SQL,不需登入主機即可管理

這一層建立之後,任何帳號/密碼/轉寄設定都在 Web UI 進行,安全又直覺。


🏗 二、MariaDB 容器建置

建立資料目錄:

mkdir -p /opt/docker/mail/maildb/data
mkdir -p /opt/docker/mail/maildb/log

啟動 MariaDB 容器(含每日備份):

docker run -dit --name maildb \
  --restart=always \
  --network intranet-net \
  -e MARIADB_ROOT_PASSWORD=123456 \
  -e MARIADB_DATABASE=postfix \
  -e MARIADB_USER=postfix \
  -e MARIADB_PASSWORD=postfix1230 \
  -v $PWD/data:/var/lib/mysql \
  -v $PWD/log:/var/log/mysql \
  mariadb:10.11

MariaDB 啟動後,建立 postfix 所需的資料表:

USE postfix;

SOURCE /opt/docker/mail/maildb/sql/create_mysql.sql;
SOURCE /opt/docker/mail/maildb/sql/addition_mysql.sql;

這兩個 SQL 檔負責建立:

  • domains
  • mailboxes
  • aliases
  • alias_domains
  • quota tables

🖥 三、部署 PostfixAdmin 容器

建立必要目錄:

mkdir -p /opt/docker/mail/mailsetup/config
mkdir -p /opt/docker/mail/mailsetup/log

下載 PostfixAdmin image:

docker pull postfixadmin

第一次啟動(含 setup.php):

docker run -dit --name mailsetup \
  --restart=always \
  --network intranet-net \
  -e TZ=Asia/Taipei \
  -e VIRTUAL_HOST=mailsetup.it.demo.tw \
  -p 8082:80 \
  -v $PWD/config:/var/www/html/config \
  postfixadmin

然而 PostfixAdmin 的「初始化流程」需要:

  • 執行 setup.php
  • 產生 $config['setup_password']
  • 完成後 必須移除 setup.php
  • 避免暴露後門

因此第一次啟動流程如下:


🛠 四、PostfixAdmin 初始設定流程(安全版)

➤ 第 1 步:產生 setup_password

編輯 config.local.php:

$CONF['setup_password'] = '請填入 setup.php 產生結果';
$CONF['default_aliases'] = array();
$CONF['encrypt'] = 'dovecot:SHA512-CRYPT';

前往瀏覽器開啟:

http://mailsetup.it.demo.tw/setup.php

輸入一組密碼,取得 $CONF['setup_password'] 的 hash。

➤ 第 2 步:建立 PostfixAdmin 管理員

在 setup.php 介面建立 admin 帳號,例如:

admin@it.demo.tw

接著登入後即可管理:

  • domain
  • mailbox
  • alias
  • alias domain
  • quota

➤ 第 3 步:移除 setup.php(強制)

非常重要:

docker exec -it mailsetup rm -f /var/www/html/setup.php

或封鎖:

Deny from all

🔧 五、PostfixAdmin + MariaDB 完整整合

PostfixAdmin 實際會寫入 MariaDB 的表格包括:

  • domain
  • mailbox
  • alias
  • alias_domain

Postfix / Dovecot 透過 MySQL maps 查詢它們:

Postfix 查詢 mailbox:

SELECT 1 FROM mailbox WHERE username='%s' AND active='1';

Postfix 查詢 alias:

SELECT goto FROM alias WHERE address='%s' AND active='1';

所有查詢由下列設定指向:

/etc/postfix/sql/*.cf

例如:

virtual_mailbox_maps = mysql:/etc/postfix/sql/virtual_mailboxes.cf

這就是帳號可被 Postfix 正確收信的關鍵。


🧪 六、初始化後的完整測試流程

✔ 建立 domain

在 PostfixAdmin 建立:

it.demo.tw

✔ 建立一組信箱:

user1@it.demo.tw

Dovecot 會依 lookup 傳回:

maildir = /var/mail/it.demo.tw/user1/

✔ 使用 Roundcube 登入驗證

Roundcube 透過 IMAP → Dovecot → MySQL → PostfixAdmin 資料。

✔ 寄信驗證

Postfix → (Amavis → SpamAssassin → ClamAV) → Dovecot LMTP
確認 alias、forward 正常。


🧾 七、FAQ / 常見問題

Q1. 信箱無法登入?

  • 檢查 mailbox.active 是否為 1
  • 是否啟動了 alias domain?
  • 密碼是否為 dovecot hash?

Q2. 刪除 domain 後信箱仍存在?

  • PostfixAdmin 不會自動刪信箱目錄,你需自行清除:
rm -rf /var/mail/it.demo.tw/user1/

Q3. 多網域是否共用一套帳號?

  • 不會
  • 每個網域獨立帳號空間

🔚 結語:為後續 Postfix / Dovecot 奠定基礎

本篇完成了集中帳號管理架構:

  • MariaDB
  • PostfixAdmin
  • 虛擬網域
  • 信箱 / 別名
  • 加密密碼
  • 初始 Web UI

1 thought on “MariaDB + PostfixAdmin:虛擬網域與信箱帳號管理核心”

  1. Pingback: 打造企業級郵件系統的完整指南(總綱篇) - Nuface Blog

Comments are closed.

Recent Posts

  • Postfix + Let’s Encrypt + BIND9 + DANE Fully Automated TLSA Update Guide
  • Postfix + Let’s Encrypt + BIND9 + DANE TLSA 指紋自動更新完整教學
  • Deploying DANE in Postfix
  • 如何在 Postfix 中部署 DANE
  • DANE: DNSSEC-Based TLS Protection

Recent Comments

  1. Building a Complete Enterprise-Grade Mail System (Overview) - Nuface Blog on High Availability Architecture, Failover, GeoDNS, Monitoring, and Email Abuse Automation (SOAR)
  2. Building a Complete Enterprise-Grade Mail System (Overview) - Nuface Blog on MariaDB + PostfixAdmin: The Core of Virtual Domain & Mailbox Management
  3. Building a Complete Enterprise-Grade Mail System (Overview) - Nuface Blog on Daily Operations, Monitoring, and Performance Tuning for an Enterprise Mail System
  4. Building a Complete Enterprise-Grade Mail System (Overview) - Nuface Blog on Final Chapter: Complete Troubleshooting Guide & Frequently Asked Questions (FAQ)
  5. Building a Complete Enterprise-Grade Mail System (Overview) - Nuface Blog on Network Architecture, DNS Configuration, TLS Design, and Postfix/Dovecot SNI Explained

Archives

  • December 2025
  • November 2025
  • October 2025

Categories

  • AI
  • Apache
  • Cybersecurity
  • Database
  • DNS
  • Docker
  • Fail2Ban
  • FileSystem
  • Firewall
  • Linux
  • LLM
  • Mail
  • N8N
  • OpenLdap
  • OPNsense
  • PHP
  • QoS
  • Samba
  • Switch
  • Virtualization
  • VPN
  • WordPress
© 2025 Nuface Blog | Powered by Superbs Personal Blog theme