请先阅读前一篇
这篇文章是"在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
可以用mysql:
代替pgsql:
。💡 在大流量环境下,使用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访问)
password
→ PostgreSQL账户密码 (预先创建的DB用户 mailadmin
的密码)
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认证 (即将发布!)
댓글이 없습니다.