在上一篇文章中,我们解决了最棘手的 SSL 证书与 Cloudflare 架构问题。现在,基础环境已经就绪,我们需要一个图形化界面来管理我们的邮箱域名和用户,而不是去手撸复杂的数据库。PostfixAdmin 就是这样一个基于 Web 的管理工具。

        本篇将讲解如何部署 PostfixAdmin,并解决安装过程中常见的加密后端报错问题。

1. 邮件系统的基本工作流

        在开始部署前,我们先复习一下邮件是如何发送和接收的,这有助于理解后面 Postfix 和 Dovecot 的关系。

  1. 编写与发送:用户登录 [email protected],在本地客户端(MUA,如 Thunderbird)编写邮件,通过 SMTP 协议 发送到自己的服务器(MTA,如 Postfix)。
  2. 中转与投递:发件服务器通过 DNS 查询目标地址,通过 SMTP 协议 将邮件投递到 b.com 的服务器。
  3. 接收与存储:目标服务器收到邮件后,交给投递代理(MDA,如 Dovecot)存入硬盘。
  4. 拉取阅读:目标用户通过 IMAP/POP3 协议 连接 Dovecot,读取新邮件。

mail_2

架构提示:虽然我们可以只部署 SMTP 发信,收信走 Cloudflare 转发,但为了拥有完整的收发能力,本系列将带你搭建一套完整的邮件系统。

2. 准备工作:域名与软件下载

2.1 域名解析

        前往 DNS 服务商(如 Cloudflare),添加一条 A 记录:

  • Type: A
  • Name: mail
  • Content: 你的 VPS IP 地址
  • Proxy Status: DNS Only (灰云) —— 注意:如前文所述,邮件域名必须关闭 CDN。

2.2 下载并解压

        进入 Web 目录下载 PostfixAdmin 源码(请根据实际 Web 目录调整路径):

# 下载软件包
wget https://github.com/postfixadmin/postfixadmin/archive/refs/tags/postfixadmin-3.3.15.zip -P /apache/htdocs

# 解压
unzip /apache/htdocs/postfixadmin-3.3.15.zip -d /apache/htdocs

# 重命名为 mail 目录,方便访问
mv /apache/htdocs/postfixadmin-postfixadmin-3.3.15 /apache/htdocs/mail

# 创建必要的缓存目录
mkdir -p /apache/htdocs/mail/templates_c

# 修改权限 (确保 Web 服务器用户有权写入)
chown -R apache:apache /apache/htdocs/mail
chmod 777 -R /apache/htdocs/mail/templates_c

2.3 配置 Apache 虚拟主机

        修改 Apache 的 SSL 配置文件,新增一个 VirtualHost 指向 /apache/htdocs/mail/public 目录。注意要复用我们在上一篇教程中申请的 Let's Encrypt 证书。

mail_3

3. 数据库创建

        PostfixAdmin 需要一个独立的数据库来存储域名和用户数据。你可以通过 SSH 命令行或 phpMyAdmin 创建。

  1. 数据库名:例如 postfix
  2. 用户名:例如 postfix
  3. 权限:授予该用户对该数据库的所有权限。

mail_4
mail_5

4. 核心配置与加密报错修复

4.1 修改 config.inc.php

        复制配置文件模板:

cd /apache/htdocs/mail
cp config.inc.php config.inc.php.bak

        编辑 config.inc.php,修改以下关键项:

// 1. 启用配置
$CONF['configured'] = true;

// 2. 数据库信息 (填入第3步创建的信息)
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = '你的数据库密码';
$CONF['database_name'] = 'postfix';

// 3. 关键:更改加密方式为 Dovecot SHA512
// 这样 PostfixAdmin 生成的密码才能被 Dovecot 正确识别
$CONF['encrypt'] = 'dovecot:SHA512';

mail_6

4.2 解决 Dovecot 依赖报错与权限修正

        当你配置完上述加密方式后,访问 setup.php 可能会遇到 doveadm pw failed 报错,或者在登录时提示 Your email address or password are not correct

        原因:PostfixAdmin(运行在 Web 用户下)调用 doveadm 加密密码时,需要读取 Dovecot 的 SSL 配置。而 SSL 私钥文件(server.key)默认权限极高(仅 root 可读),导致 Web 用户因“Permission denied”无法读取,进而加密失败。

        解决方案(执行以下 4 步):

  1. 安装 Dovecot

    yum install -y dovecot dovecot-mysql
  2. 配置 Dovecot SSL
    编辑 /etc/dovecot/conf.d/10-ssl.conf,指向上一篇教程生成的证书:
    注意:路径前必须加 < 符号

    ssl = required
    ssl_cert = </usr/local/apache/conf/ssl/server.crt
    ssl_key = </usr/local/apache/conf/ssl/server.key
  3. 关键:赋予权限
    我们需要将 Web 用户(apache)加入 dovecot 组,并且允许该组读取 SSL 私钥。

    # 1. 将 apache 加入 dovecot 用户组
    usermod -aG dovecot apache
    
    # 2. 修改私钥文件的所属组为 dovecot
    chgrp dovecot /usr/local/apache/conf/ssl/server.key
    
    # 3. 赋予组读取权限 (640: 只有拥有者和组员可读)
    chmod 640 /usr/local/apache/conf/ssl/server.key
  4. 重启生效
    修改权限和组后,必须重启服务才能生效。

    systemctl restart dovecot
    systemctl restart httpd   # 或 /usr/local/apache/bin/apachectl -k graceful

        小技巧:你可以运行 sudo -u apache doveadm pw -s SHA512 -p 'test' 来测试权限是否配置正确。如果能输出哈希值,说明一切正常。

5. 完成安装与管理员设置

        解决了报错后,再次刷新 setup.php 页面,应该全绿通过检查。系统会自动在数据库中创建所需的数据表。

5.1 设置 Setup 密码

        页面会要求你设置一个 setup_password。输入一个强密码,点击 Generate。系统会生成一串哈希值。

mail_7

        将这串哈希值复制回 config.inc.php

$CONF['setup_password'] = 'sha512:......'; 

5.2 创建超级管理员

        回到网页刷新,填写刚才的 Setup 密码,然后创建第一个管理员账号(例如 [email protected])。

mail_8

5.3 登录验证

        访问 login.php,使用刚才创建的管理员账号登录。

mail_9

        至此,PostfixAdmin 面板已部署完成!你可以在这里添加虚拟域名(Virtual Domain)和邮箱用户了。但请注意,此时邮件服务还未生效,因为核心的 Postfix 和 Dovecot 尚未配置。我们将在下一篇教程中完成这最后也是最核心的一步。