方案概述
我们将采用业界公认的经典组合,这个组合稳定、功能强大且文档丰富:

- Postfix: 用于发送和接收邮件的邮件传输代理。
- Dovecot: 用于处理 IMAP 和 POP3 协议,让用户可以从邮件客户端(如 Outlook, Thunderbird)或手机上收邮件的邮件代理服务器。
- MariaDB (MySQL): 存储用户信息、域名和邮件路由规则的数据库。
- SpamAssassin: 用于过滤垃圾邮件的强大工具。
- Amavisd-new: 一个接口程序,用于将 Postfix 和反病毒/反垃圾邮件工具(如 SpamAssassin, ClamAV)连接起来。
- ClamAV: 开源的反病毒引擎。
- Let's Encrypt / Certbot: 为邮件服务器提供免费的 TLS/SSL 证书,加密邮件传输,这是现代邮件服务的必需项。
第一步:准备工作
-
一台干净的 Ubuntu 服务器:
- 推荐使用 Ubuntu 22.04 LTS。
- 最低配置: 1核CPU, 1GB RAM, 20GB 硬盘空间。
- 公网静态IP地址: 这是绝对必需的,因为邮件服务器需要固定的IP进行DNS解析和信誉管理。
- 完整的域名:
mail.yourdomain.com,我们将使用这个域名来配置邮件服务器。
-
更新系统:
sudo apt update && sudo apt upgrade -y
-
设置主机名: 邮件服务器的主机名必须是其完全限定域名,如果你的邮件域名是
mail.yourdomain.com,那么主机名也应该设置为这个。sudo hostnamectl set-hostname mail.yourdomain.com
-
配置防火墙:
(图片来源网络,侵删)sudo ufw allow OpenSSH sudo ufw allow 25,587,143,993,465,110,995/tcp sudo ufw enable
25: SMTP (邮件传输)587: SMTPS (带TLS的邮件传输,用于客户端提交)465: SMTPS (另一个端口,有时也用)143: IMAP (非加密)993: IMAPS (带TLS的IMAP)110: POP3 (非加密)995: POP3S (带TLS的POP3)
第二步:安装和配置 Postfix (MTA)
Postfix 负责处理邮件的接收和发送。
-
安装 Postfix 和相关工具:
sudo apt install postfix postfix-mysql -y
安装过程中会出现一个配置界面:
- General type of mail configuration: 选择 "Internet Site"。
- System mail name: 输入你的主域名,
yourdomain.com。不是mail.yourdomain.com。
-
配置 Postfix: 编辑主配置文件:
(图片来源网络,侵删)sudo nano /etc/postfix/main.cf
在文件末尾添加或修改以下内容:
# 设置主机名和域名 myhostname = mail.yourdomain.com mydomain = yourdomain.com myorigin = $mydomain # 设置 inet_interfaces 为 all,监听所有网络接口 inet_interfaces = all # 设置 mydestination,只接收发给本域的邮件 mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain # 设置邮件存放目录 home_mailbox = Maildir/ # --- 下面是与数据库相关的配置,稍后会用到 --- # 设置虚拟域和虚拟邮箱的映射文件 virtual_mailbox_domains = mysql:/etc/postfix/mysql/virtual_mailbox_domains.cf virtual_mailbox_base = /var/vmail virtual_mailbox_maps = mysql:/etc/postfix/mysql/virtual_mailbox_maps.cf virtual_minimum_uid = 1000 virtual_uid_maps = static:5000 virtual_gid_maps = static:5000 virtual_transport = lmtp:unix:private/dovecot-lmtp # 设置 SASL 认证,用于客户端发送邮件 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
-
创建 Postfix 与数据库的连接文件: 我们需要为 Postfix 创建几个配置文件,让它知道如何从 MariaDB 数据库中查找信息。
-
创建目录:
sudo mkdir /etc/postfix/mysql
-
创建虚拟域映射文件
virtual_mailbox_domains.cf:sudo nano /etc/postfix/mysql/virtual_mailbox_domains.cf
user = mail_admin password = your_strong_password hosts = 127.0.0.1 dbname = mailserver query = SELECT 1 FROM domains WHERE domain='%s'
-
创建虚拟邮箱映射文件
virtual_mailbox_maps.cf:sudo nano /etc/postfix/mysql/virtual_mailbox_maps.cf
user = mail_admin password = your_strong_password hosts = 127.0.0.1 dbname = mailserver query = SELECT 1 FROM mailboxes WHERE username='%s'
注意: 请务必将
your_strong_password替换为你自己设置的强密码。 -
-
重启 Postfix 使配置生效:
sudo systemctl restart postfix
第三步:安装和配置 MariaDB
我们需要数据库来存储用户和域名信息。
-
安装 MariaDB:
sudo apt install mariadb-server mariadb-client -y
-
安全配置 MariaDB:
sudo mysql_secure_installation
按照提示操作,设置 root 密码,移除匿名用户,禁止 root 远程登录等。
-
创建邮件服务器数据库和用户:
sudo mysql -u root -p
在 MariaDB shell 中执行以下 SQL 语句:
-- 创建数据库 CREATE DATABASE mailserver; -- 创建专用用户并授权 CREATE USER 'mail_admin'@'localhost' IDENTIFIED BY 'your_strong_password'; GRANT ALL PRIVILEGES ON mailserver.* TO 'mail_admin'@'localhost'; FLUSH PRIVILEGES; -- 创建存放域名的表 USE mailserver; CREATE TABLE domains ( id INT NOT NULL AUTO_INCREMENT, domain VARCHAR(255) NOT NULL, PRIMARY KEY (id) ); -- 创建存放邮箱的表 CREATE TABLE mailboxes ( id INT NOT NULL AUTO_INCREMENT, username VARCHAR(255) NOT NULL, password VARCHAR(255) NOT NULL, domain_id INT NOT NULL, PRIMARY KEY (id), UNIQUE (username), FOREIGN KEY (domain_id) REFERENCES domains(id) ON DELETE CASCADE ); -- 创建存放别名(转发)的表 CREATE TABLE aliases ( id INT NOT NULL AUTO_INCREMENT, source_address VARCHAR(255) NOT NULL, destination_address VARCHAR(255) NOT NULL, domain_id INT NOT NULL, PRIMARY KEY (id), UNIQUE (source_address), FOREIGN KEY (domain_id) REFERENCES domains(id) ON DELETE CASCADE ); EXIT; -
添加你的域名到数据库:
sudo mysql -u mail_admin -p mailserver
在 MariaDB shell 中:
INSERT INTO domains (domain) VALUES ('yourdomain.com'); -- 如果你还有其他域名,也添加进来 -- INSERT INTO domains (domain) VALUES ('anotherdomain.com'); EXIT;
第四步:安装和配置 Dovecot
Dovecot 负责用户认证和邮件的存储/访问。
-
安装 Dovecot:
sudo apt install dovecot-imapd dovecot-pop3d dovecot-mysql dovecot-lmtpd -y
-
配置 Dovecot: Dovecot 的配置文件在
/etc/dovecot/目录下。-
编辑
10-mail.conf:sudo nano /etc/dovecot/conf.d/10-mail.conf
确保以下配置正确:
mail_location = maildir:/var/vmail/%d/%n mail_privileged_group = mail
-
编辑
10-auth.conf:sudo nano /etc/dovecot/conf.d/10-auth.conf
启用 SQL 认证:
!include auth-sql.conf.ext # 禁用不安全的认证方式 disable_plaintext_auth = yes
-
创建 SQL 认证配置文件
auth-sql.conf.ext:sudo nano /etc/dovecot/conf.d/auth-sql.conf.ext
passdb { driver = sql args = /etc/dovecot/dovecot-sql.conf.ext } userdb { driver = static args = uid=vmail gid=vmail home=/var/vmail/%d/%n } -
创建 Dovecot SQL 配置文件
dovecot-sql.conf.ext:sudo nano /etc/dovecot/dovecot-sql.conf.ext
driver = mysql connect = host=127.0.0.1 dbname=mailserver user=mail_admin password=your_strong_password default_pass_scheme = SHA512-CRYPT password_query = SELECT username AS user, password FROM mailboxes WHERE username = '%u';
-
-
配置 SSL/TLS:
- 编辑
10-ssl.conf:sudo nano /etc/dovecot/conf.d/10-ssl.conf
启用 SSL 并指定证书路径(稍后我们会用 Certbot 填充):
ssl = required ssl_cert = </etc/letsencrypt/live/mail.yourdomain.com/fullchain.pem ssl_key = </etc/letsencrypt/live/mail.yourdomain.com/privkey.pem
- 编辑
-
创建系统用户和目录:
sudo groupadd -g 5000 vmail sudo useradd -g vmail -u 5000 vmail -d /var/vmail -s /sbin/nologin sudo mkdir -p /var/vmail sudo chown -R vmail:vmail /var/vmail
-
重启 Dovecot:
sudo systemctl restart dovecot
第五步:配置 SPF, DKIM, DMARC (防止邮件被当作垃圾邮件)
这是邮件服务器能否成功发送邮件的关键一步,这些记录需要添加到你域名的 DNS 设置中。
-
SPF (Sender Policy Framework): 在 DNS 中添加一条 TXT 记录,指定哪些服务器可以代表你的域名发送邮件。
Type: TXT Name: @ Value: "v=spf1 mx -all"v=spf1 mx表示只有你域名的 MX 记录指向的服务器才能发邮件。-all表示拒绝所有其他服务器的邮件。 -
DKIM (DomainKeys Identified Mail): DKIM 为你的邮件添加数字签名,接收方可以验证邮件是否真的来自你且未被篡改。
- 安装 OpenDKIM:
sudo apt install opendkim opendkim-tools -y
- 配置 OpenDKIM:
这部分比较复杂,需要生成密钥对,配置 Postfix 和 OpenDKIM 的集成,过程略,但核心是:
- 生成公钥和私钥。
- 将公钥添加到 DNS 的 TXT 记录中。
- 配置 OpenDKIM 服务。
- 配置 Postfix 通过 OpenDKIM 签名邮件。
- 安装 OpenDKIM:
-
DMARC (Domain-based Message Authentication, Reporting & Conformance): DMARC 基于 SPF 和 DKIM 的结果,告诉接收方如何处理未通过验证的邮件。 在 DNS 中添加一条 TXT 记录:
Type: TXT Name: _dmarc Value: "v=DMARC1; p=quarantine; rua=mailto:admin@yourdomain.com"p=quarantine表示将未通过验证的邮件放入垃圾箱。rua是接收 DMARC 报告的邮箱。
第六步:配置反垃圾邮件和反病毒
-
安装 Amavisd-new, SpamAssassin, ClamAV:
sudo apt install amavisd-new spamassassin clamav clamav-daemon -y
安装后,ClamAV 需要更新病毒库:
sudo freshclam
-
配置 Postfix 与 Amavisd-new 的连接: 编辑 Postfix 的主配置文件
main.cf,在master.cf中添加内容,使邮件流经过 Amavisd-new,这部分配置比较繁琐,请参考官方文档或详细的教程。
第七步:获取并配置 SSL/TLS 证书
使用 Certbot 免费获取 Let's Encrypt 证书。
-
安装 Certbot:
sudo apt install certbot python3-certbot-postfix -y
-
获取证书:
sudo certbot certonly --standalone -d mail.yourdomain.com
按照提示操作,输入你的邮箱地址并同意条款,证书会存放在
/etc/letsencrypt/live/mail.yourdomain.com/。 -
配置自动续期: Certbot 会自动设置续期任务,你可以测试一下:
sudo certbot renew --dry-run
-
重启 Postfix 和 Dovecot:
sudo systemctl restart postfix dovecot
第八步:创建一个测试邮箱
回到 MariaDB shell:
sudo mysql -u mail_admin -p mailserver
执行 SQL 创建一个邮箱,user@yourdomain.com,密码会自动进行 SHA512 加密:
-- 首先获取 yourdomain.com 的 domain_id
SELECT id FROM domains WHERE domain = 'yourdomain.com';
-- 假设返回的 id 是 1
-- 然后创建邮箱
INSERT INTO mailboxes (username, password, domain_id) VALUES ('user@yourdomain.com', '{SHA512-CRYPT}$6$...', 1);
-- 注意:密码需要是加密后的,你可以使用 `doveadm pw` 命令生成加密后的密码:
-- sudo doveadm pw -s SHA512-CRYPT -p 'your_plain_text_password'
-- 将输出的加密字符串替换掉上面的 $6$... 部分
EXIT;
第九步:测试你的邮件服务器
-
测试发送和接收:
- 使用邮件客户端(如 Thunderbird)配置 IMAP/SMTP 服务器。
- 服务器:
mail.yourdomain.com - 端口: IMAPS (993), SMTPS (587)
- 加密: SSL/TLS
- 认证: 密码
- 服务器:
- 或者使用命令行工具
telnet或swaks进行测试。
- 使用邮件客户端(如 Thunderbird)配置 IMAP/SMTP 服务器。
-
检查邮件日志:
- Postfix 日志:
tail -f /var/log/mail.log - Dovecot 日志:
tail -f /var/log/mail.log(Dovecot 的日志通常也在这里) 或/var/log/dovecot.log
- Postfix 日志:
-
使用在线工具检查: 访问 https://www.mail-tester.com/,他们会给你一个特殊的邮箱地址,发送一封邮件到这个地址,然后网站会给你一个详细的评分和改进建议,这是优化你服务器配置的最好方法。
总结与后续
恭喜!你已经成功搭建了一个功能齐全的邮件服务器,后续工作包括:
- 监控: 定期检查日志,监控系统资源。
- 备份: 定期备份 MariaDB 数据库和
/var/vmail目录。 - 优化: 根据邮件服务器的负载和需求,调整 Postfix 和 Dovecot 的配置参数。
- 安全: 保持系统和所有软件包为最新版本。
这个过程非常漫长且容易出错,请务必耐心,并仔细阅读每个软件的官方文档,祝你成功!
