PostfixAdmin 只是一个记账的账本,真正干活的是 Postfix (MTA) 和 Dovecot (MDA)。本篇的目标是让这两兄弟通过 MySQL 数据库实现“心意相通”:Postfix 负责对外收发,Dovecot 负责对内验证身份和存储邮件。
1. 基础环境准备
1.1 安装软件包
除了 Postfix,我们还需要安装 Dovecot 及其 MySQL 插件(如果你在上一篇解决报错时没装的话)。
# 卸载旧的 sendmail 以免冲突
yum -y remove sendmail
# 安装 Postfix 和 Dovecot 全家桶
yum -y install postfix postfix-mysql dovecot dovecot-mysql1.2 创建邮件存储用户 (vmail)
我们需要一个系统用户来专门管理所有邮件文件。千万不要用 root 运行!
# 创建用户组 vmail (GID 5000) 和用户 vmail (UID 5000)
groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/vmail -m
# 以后所有的邮件都会存在这里
ls -ld /home/vmail2. 配置 SQL 映射文件 (Postfix 读取数据库)
Postfix 需要知道哪些域名是我们的,哪些用户是存在的。我们需要创建 3 个 SQL 查询文件。建议创建目录 /etc/postfix/sql/。
mkdir -p /etc/postfix/sql1. 域名列表:mysql_virtual_domains_maps.cf
user = postfix
password = 你的数据库密码
hosts = 127.0.0.1
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'2. 用户邮箱列表:mysql_virtual_mailbox_maps.cf
user = postfix
password = 你的数据库密码
hosts = 127.0.0.1
dbname = postfix
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'3. 别名与转发列表:mysql_virtual_alias_maps.cf
user = postfix
password = 你的数据库密码
hosts = 127.0.0.1
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'3. 配置 Dovecot (核心难点)
这是最容易出“内部通信错误”的地方。我们需要配置 Dovecot 开启一个“后门”给 Postfix 用来查密码。
3.1 核心配置 dovecot.conf
编辑 /etc/dovecot/dovecot.conf,启用必要的协议:
# 启用 imap (给用户看邮件) 和 lmtp (帮 Postfix 存邮件)
protocols = imap lmtp
listen = *3.2 数据库连接 dovecot-sql.conf.ext
新建或编辑 /etc/dovecot/dovecot-sql.conf.ext。注意:这里的加密方式必须与 PostfixAdmin 里设置的一致!且如果上篇创建数据库时,用户主机填写的localhost,需要创建一个名称与权限相同,但主机为127.0.0.1的用户
driver = mysql
connect = host=127.0.0.1 dbname=postfix user=postfix password=你的数据库密码
default_pass_scheme = SHA512-CRYPT
# 验证密码的查询语句
password_query = SELECT username AS user, password FROM mailbox WHERE username = '%u' AND active='1'
# 以此获取用户目录 uid=5000 gid=5000 即 vmail 用户
user_query = SELECT concat('/home/vmail/', maildir) AS home, 5000 AS uid, 5000 AS gid, 'dirsize' as quota_rule FROM mailbox WHERE username = '%u' AND active='1'3.3 认证与通信 10-auth.conf
编辑 /etc/dovecot/conf.d/10-auth.conf:
disable_plaintext_auth = yes
auth_mechanisms = plain login
!include auth-sql.conf.ext 注意:确保 auth-sql.conf.ext 里引用了上面的 dovecot-sql.conf.ext。
3.4 关键:Master Socket 配置 10-master.conf
编辑 /etc/dovecot/conf.d/10-master.conf。这一步是解决 Postfix 无法连接 Dovecot 的关键!
# 1. 这里的 socket 是给 Postfix 用来进行 SASL 认证的
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
}
# 2. 这里的 lmtp 是给 Postfix 用来投递邮件的
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
mode = 0600
user = postfix
group = postfix
}
}3.5 SSL 配置 (复用上一篇)
确保 /etc/dovecot/conf.d/10-ssl.conf 已指向 acme.sh 的证书:
ssl = required
ssl_cert = </usr/local/apache/conf/ssl/server.crt
ssl_key = </usr/local/apache/conf/ssl/server.key4. 配置 Postfix (集成 Dovecot)
最后,修改 Postfix 的主配置 /etc/postfix/main.cf,让它去连接上面配置好的 Dovecot Socket。
# === 基础信息 ===
myhostname = mail.yourdomain.com
mydomain = yourdomain.com
myorigin = $mydomain
inet_interfaces = all
mydestination = localhost
# === 虚拟域名与用户 (查 SQL) ===
virtual_mailbox_domains = mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf
virtual_alias_maps = mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf
# === 邮件投递 (交给 Dovecot LMTP) ===
virtual_transport = lmtp:unix:private/dovecot-lmtp
# === 身份验证 (SASL - 问 Dovecot) ===
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
# === SSL/TLS 配置 (路径要对) ===
smtpd_tls_cert_file = /usr/local/apache/conf/ssl/server.crt
smtpd_tls_key_file = /usr/local/apache/conf/ssl/server.key
smtpd_tls_security_level = may
smtpd_tls_auth_only = yes
smtpd_tls_protocols = TLSv1.2 TLSv1.3
smtpd_tls_ciphers = high:!aNULL:!MD5:!RC45. 重启与验证
# 重启两兄弟
systemctl restart dovecot
systemctl restart postfix检查日志:这是最重要的一步。
tail -f /var/log/maillog 如果看到 Postfix is running with backwards-compatible default settings 是正常的。如果有 connect to private/auth failed,请检查 3.4 步的权限设置。
至此,你的邮件服务器核心已经搭建完毕!现在你可以配置 Outlook 或 Thunderbird,使用在 PostfixAdmin 里创建的账号进行测试了。
评论已关闭