前言

邮箱,即使在国内完全不会用在社交用途下,但也基本是每个网民都会注册的东西。国内最常见的公共邮箱提供商:QQ 邮箱、163 邮箱等,以及常见的国际公共邮箱提供商:Gmail、Outlook 等。

对于企业、团队、个人工作室等,拥有一个自定义域邮箱可以更加专业、彰显个性、完全掌控邮件系统与数据,自定义邮局的好处:

  • 强化辨识度:用自定义域邮局代替公共邮局,可以为企业反复曝光品牌,提升专业感与可信度。
  • 为个人工作室彰显个性。
  • 可以为各个部门分配专门的邮箱,方便分工。
  • 数据完全由自己管理,可以无数量限制群发邮件。

自定义域邮局也会有诸多限制:

  • 部署和维护成本过大:配置自定义域邮局需要设置DNS、SSL、SMTP、IMAP、SPF、DKIM、DMARC 等多项配置。
  • 云服务商限制:由于自定义域邮局可以无限制发件,极易带来 Abuse 问题,部分云服务提供商会直接屏蔽 25 端口(阿里云、腾讯云),同时自定义域名邮局部署需要配置 PTR,云服务商若提供 RDNS 服务还需要租用或者自搭建权威 DNS 服务,对于极易引发 Abuse 问题的邮箱服务来说,小规模的云服务商直接不提供 RDNS 服务。
  • IP 要求严格:同样由于自定义域邮局极易带来的Abuse 问题,导致不少 IP 被列入公共邮箱提供商的黑名单,即使自定义邮局部署完成,发出的邮件也会被扔进垃圾箱甚至拒收。
  • 需要持续的维护:自部署邮局意味着数据完全由自己掌控,所以一切的更新、维护、备份均需要自己亲自进行,一旦域名忘记续费,或者数据库损坏等,会直接导致自定义邮局注册的各种服务后续无法接收邮件,比如最常见的用邮箱重置密码等。

一些公共邮箱提供商也会提供自定义域名邮箱服务,比如Google Workspace、Microsoft 365、Amazon WorkMail等,对于有自定义域名邮局需求的,对数据隐私不敏感的,优先还是托管给公共邮局提供商更适合,公有云比私有云稳定可靠太多了。

自定义域邮局部署过程

前置条件

域名:作者下文将使用自己的博客域名(mail.gaorkang.cn)来完成自定义域名的部署,域名解析托管在华为云。

开放 25 端口和提供 PTR 设置的云服务器:国内云服务商对 25 端口基本都做了限制,作者使用 Hetzner 的一个拍卖机作为邮箱服务器,因为服务器位于德国,加上.cn的域名无法解析到 cloudflare,所以国内访问注定不会快,同时会暴露源 IPv4。

Proxmox VE 网络配置

作者目前使用的 Hetzner 拍卖机仅分配了一个公网 IPv4 地址和一个 /64 段的 IPv6 子网。
虽然 Hetzner 支持为 IPv6 地址配置 RDNS(反向解析),理论上完全可以使用 IPv6 来部署邮件服务器,但考虑到当前全球范围内 IPv6 的实际普及程度,最终还是选择以 IPv4 来部署邮局服务器。

Hetzner 的拍卖机,作为一台独立服务器,肯定不会只用来部署邮局,只能宿主机安装Proxmox VE,然后在 PVE 中安装虚拟机来部署各个服务,但是考虑到只有一个 ipv4,只能通过 NAT 转发(iptables DNAT) 的方式将iRedMail 需要使用的端口映射到宿主机,实现邮局的正常工作。

Hetzner 宿主机基础的网络拓扑:

1
2
3
[公网] ↔ [宿主机 eno1 (192.0.2.10)]
↓ NAT DNAT 转发
[vmbr0 10.0.0.1] ↔ [iRedMail虚拟机 10.0.0.233]

iRedMail 官方文档详细列出了所需端口,参考:iRedMail Network Ports

但是真的需要在公网中开放的端口:

邮件相关

端口 协议 服务 说明
25 TCP SMTP 邮件传输(对外收发邮件)
587 TCP Submission (SMTP AUTH) 客户端(Thunderbird)发信用
465 TCP SMTPS 加密的邮件提交端口(部分客户端仍用)
143 TCP IMAP 邮件读取(未加密)
993 TCP IMAPS 加密的邮件读取
110 TCP POP3 邮件下载(未加密)
995 TCP POP3S 加密的邮件下载

Web 服务相关

端口 协议 服务 说明
80 TCP HTTP iRedAdmin、Roundcube 初始访问,通常重定向到 HTTPS
443 TCP HTTPS Webmail (Roundcube)、iRedAdmin 管理后台

邮件相关端口通过 iptables DNAT 转发映射至虚拟机,Web 相关端口则通过宿主机 Nginx 反向代理 实现。

那么 PVE 的网络配置文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# network interface settings; autogenerated
# Please do NOT modify this file directly, unless you know what
# you're doing.
#
# If you want to manage parts of the network configuration manually,
# please utilize the 'source' or 'source-directory' directives to do
# so.
# PVE will preserve these directives, but will NOT read its network
# configuration from sourced files, so do not attempt to move any of
# the PVE managed interfaces into external files!

source /etc/network/interfaces.d/*

auto lo
iface lo inet loopback

iface lo inet6 loopback

auto eno1
iface eno1 inet static
address 192.0.2.10/27
gateway 192.0.2.1
up route add -net 192.0.2.0 netmask 255.255.255.224 gw 192.0.2.1 dev eno1
# route 192.0.2.0/27 via 192.0.2.1

iface eno1 inet6 static
address 2001:db8:abcd:1::2/64
gateway fe80::1
up ip -6 route del 2001:db8:abcd:1::/64 dev eno1

auto vmbr0
iface vmbr0 inet static
address 10.0.0.1/24
bridge-ports none
bridge-stp off
bridge-fd 0

iface vmbr0 inet6 static
address 2001:db8:abcd:1::3/64
post-up /sbin/ip -f inet6 neigh add proxy 2001:db8:abcd:1::/64 dev vmbr0
pre-down /sbin/ip -f inet6 neigh del proxy 2001:db8:abcd:1::/64 dev vmbr0

post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -s '10.0.0.0/24' -o eno1 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '10.0.0.0/24' -o eno1 -j MASQUERADE


# RDP 端口映射
post-up iptables -t nat -A PREROUTING -p tcp -i eno1 --dport 3389 -j DNAT --to-destination 10.0.0.100:3389
post-down iptables -t nat -D PREROUTING -p tcp -i eno1 --dport 3389 -j DNAT --to-destination 10.0.0.100:3389

# SMTP - 25 端口映射
post-up iptables -t nat -A PREROUTING -p tcp -i eno1 --dport 25 -j DNAT --to-destination 10.0.0.233:25
post-down iptables -t nat -D PREROUTING -p tcp -i eno1 --dport 25 -j DNAT --to-destination 10.0.0.233:25

# SMTPS - 465 端口映射
post-up iptables -t nat -A PREROUTING -p tcp -i eno1 --dport 465 -j DNAT --to-destination 10.0.0.233:465
post-down iptables -t nat -D PREROUTING -p tcp -i eno1 --dport 465 -j DNAT --to-destination 10.0.0.233:465

# Submission - 587 端口映射
post-up iptables -t nat -A PREROUTING -p tcp -i eno1 --dport 587 -j DNAT --to-destination 10.0.0.233:587
post-down iptables -t nat -D PREROUTING -p tcp -i eno1 --dport 587 -j DNAT --to-destination 10.0.0.233:587

# IMAP - 143 端口映射
post-up iptables -t nat -A PREROUTING -p tcp -i eno1 --dport 143 -j DNAT --to-destination 10.0.0.233:143
post-down iptables -t nat -D PREROUTING -p tcp -i eno1 --dport 143 -j DNAT --to-destination 10.0.0.233:143

# IMAPS - 993 端口映射
post-up iptables -t nat -A PREROUTING -p tcp -i eno1 --dport 993 -j DNAT --to-destination 10.0.0.233:993
post-down iptables -t nat -D PREROUTING -p tcp -i eno1 --dport 993 -j DNAT --to-destination 10.0.0.233:993

# POP3 - 110 端口映射
post-up iptables -t nat -A PREROUTING -p tcp -i eno1 --dport 110 -j DNAT --to-destination 10.0.0.233:110
post-down iptables -t nat -D PREROUTING -p tcp -i eno1 --dport 110 -j DNAT --to-destination 10.0.0.233:110

# POP3S - 995 端口映射
post-up iptables -t nat -A PREROUTING -p tcp -i eno1 --dport 995 -j DNAT --to-destination 10.0.0.233:995
post-down iptables -t nat -D PREROUTING -p tcp -i eno1 --dport 995 -j DNAT --to-destination 10.0.0.233:995

部署 iRedMail 邮件系统

截止到作者部署iRedMail时版本号为1.74,还不支持最新的Debian 13,在PVE里新建好Debian 13虚拟机安装iRedMail会报错,本想修改Debian的版本号强制安装在Debian 13上,但是社区里有人反馈强制安装后Dovecot组件会报错,只好重新部署一遍Debian 12虚拟机。

iRedMail官方安装文档已经很详细了,地址:链接

设置完整域名(FQDN)的主机名

在安装 Debian 虚拟机 时,安装向导会提示输入 hostname(主机名)。
这里直接填写为 mail,例如:

1
Hostname: mail

如果在安装时未填写或想修改,也可以在系统安装完成后手动编辑主机名文件:

1
nano /etc/hostname

修改为:

1
mail


验证主机名:

1
2
$ hostname
mail

/etc/hosts 文件中定义主机名与 IP 地址的对应关系:

1
10.0.0.233    mail.gaorkang.cn mail

验证主机全名(FQDN):

输入以下命令确认主机名解析是否正确:

1
2
root@mail:~# hostname -f
mail.gaorkang.cn

下载和安装 iRedMail

iRedMail 官网下载链接:地址

在服务器 Shell 中执行以下命令拉取安装包(以 1.7.4 为例):

1
wget https://github.com/iredmail/iRedMail/archive/refs/tags/1.7.4.tar.gz

解压缩:

1
2
cd /root/
tar zxf 1.7.4.tar.gz

进入解压后的目录并启动安装程序:

1
2
cd /root/iRedMail-1.7.4
bash iRedMail.sh

使用FinalShell这个shell工具的话,在安装iRedMail时会显示不完整,可以更换一个其他的shell软件来完成安装。

安装过程:

  1. 欢迎界面与使用条款
    直接按 Enter 键继续。

  2. 选择邮件存储路径
    默认路径为 /var/vmail/,一般保持默认即可。

  3. 选择账户存储数据库类型
    可选择:

    • OpenLDAP
    • MariaDB
    • PostgreSQL
      根据自身熟悉的数据库类型进行选择。

  4. 设置数据库管理员密码

  5. 添加第一个邮件域名
    这里应填写你的顶级域名(例如 gaorkang.cn),
    不要使用主机名(如 mail.gaorkang.cn)。

  6. 设置 Webmail 与 iRedAdmin 管理后台登录密码

  7. 选择需要安装的组件
    安装程序会列出可选服务组件(如 Roundcube、SOGo、Fail2ban 等)。

  8. 确认安装
    检查无误后输入 y 并回车开始安装。

安装完成后,所有设置的密码,后台等地址以及系统生成的DKIM 记录,都会保存在/root/iRedMail-1.7.4/iRedMail.tips

配置 DNS 记录

A 记录

1
2
NAME                TTL     TYPE    DATA
mail.gaorkang.cn 1800 A 192.0.2.10

在华为云域名解析管理中将mail.gaorkang.cn 指向 Hetzner 宿主机的公网 IPv4 地址,用于访问 iRedMail 的后台,以及 STMP 服务器地址等。

反向 PTR 记录

反向 PTR 是和 A 记录相反的记录,需要去云服务商处设置,在 Hetzner 后台中 ipv4 里添加 mail.gaorkang.cn 的反向记录。

MX 记录

1
2
3
NAME            PRIORITY    TYPE    DATA

gaorkang.cn 10 mx mail.gaorkang.cn

该记录的最终结果是,发送到的电子邮件[user]@gaorkang.cn将被传送到服务器mail.gaorkang.cn

autodiscover 记录

1
2
3
4
5
NAME            PRIORITY    TYPE    DATA

autodiscover.gaorkang.cn 10 A mail.gaorkang.cn
autoconfig.gaorkang.cn 10 A mail.gaorkang.cn

在某些客户端(Thunderbird)配置收发信服务时,可以自动识别和配置服务器。华为云 DNS解析不支持域名,记录 mail.garkang.cn的 A 记录 IP 地址即可。

SPF 记录

SPF 是一种反垃圾邮件和网络钓鱼方法,它使用 DNS SPF 记录来定义哪些主机有权为某个域名发送电子邮件。

1
gaorkang.cn.   3600    IN  TXT "v=spf1 mx -all"

DKIM 记录

DKIM(DomainKeys Identified Mail)通过给邮件加密签名来验证邮件是否被篡改、是否确实来自你的域名。
系统会自动生成一对密钥,公钥发布在 DNS,私钥存放在服务器中。

在 iRedMail 虚拟机 Shell 里输入以下命令可查看公钥:

1
amavisd showkeys

或在安装日志文件 /root/iRedMail-1.7.4/iRedMail.tips 中查找。

华为云 DNS 不允许单条 TXT 记录超过 255 个字符,请保持引号和空格格式,不要换行。

1
2
3
4
5
6
7
8
9
10
11
12
root@mail:~# amavisd showkeys
; key#1 2048 bits, s=dkim, d=gaorkang.cn, /var/lib/dkim/gaorkang.cn.pem
dkim._domainkey.gaorkang.cn. 3600 TXT (
"v=DKIM1; p="
"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAokPZscmr1QPXkMKtzjqN"
"PsGMDI61uxFpQBvmR4zaNzGdqrPCha7dz1S7vMK/7CbZJlDN/Pw+EJEcqAVAdDVO"
"AxHcNILBL9NF6Bchc2alFuoIvNcShuVp0rf7JgVM+9T/jcTDBRD1LqjH0yMji6wZ"
"c7NxmJp8HceIRZD5U3KZcvI0G8q1HZzew/rvLIoYdXGB12xjJ0DkVljijFyqWOel"
"KsIPMPQURM5EUYGWdE5TqTzQPhVIGU8VPd+f23MJIEVKnuFedWuyk4UyD/qbQbm3"
"nP4ZpQYq7vkN8bsG0qjEf9KPhj943GSawK2o7t/isVifEupzE9Y4ZCl3xC7iCVfp"
"1QIDAQAB")

DMARC 记录

DMARC 严重依赖 SPF 和 DKIM 记录,当收件服务器收到邮件时,它会检查 SPF、DKIM 的验证结果,然后根据你在 DNS 上配置的 DMARC 策略来决定:接受、隔离、拒绝。

1
"v=DMARC1; p=quarantine; rua=mailto:dmarc@gaorkang.cn"

注册Google Postmaster Tools

根据 iRedMail 文档,这是可选的但是强烈建议,操作很简单,在Google Postmaster Tools 网站,添加下邮件域名就好。

作用:给你的邮局加上 Gmail 官方的“送信监控面板”,能看到发信健康度、信誉、垃圾率等核心指标。

宿主机反向代理

在完成 iRedMail 安装和 DNS 解析配置后,为了让公网可以正常访问邮件系统的 Web 界面(Roundcube、iRedAdmin、SOGo 等),需要在 Proxmox VE 宿主机 上安装 Nginx 并通过 ACME 申请 SSL 证书,实现反向代理。

安装 nginx、acme

1
2
apt update
apt install -y nginx
1
2
curl https://get.acme.sh | sh
source ~/.bashrc

通过 Acme 申请域名证书

申请证书

1
~/.acme.sh/acme.sh --issue -d mail.gaorkang.cn --standalone

安装证书到 Nginx 目录

1
2
3
4
~/.acme.sh/acme.sh --install-cert -d mail.gaorkang.cn \
--key-file /etc/nginx/conf.d/mail/privkey.pem \
--fullchain-file /etc/nginx/conf.d/mail/fullchain.pem \
--reloadcmd "systemctl reload nginx"

配置 Nginx

/etc/nginx/conf.d/ 下创建 mail.conf 文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
server {
listen 80;
server_name mail.gaorkang.cn;
# 重定向 HTTP 到 HTTPS
return 301 https://$host$request_uri;
}

server {
listen 443 ssl;
server_name mail.gaorkang.cn;

# SSL 证书配置
ssl_certificate /etc/nginx/conf.d/mail/fullchain.pem;
ssl_certificate_key /etc/nginx/conf.d/mail/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;

# Roundcube
location /mail/ {
proxy_pass https://10.0.0.233/mail/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}

# iRedAdmin
location /iredadmin/ {
proxy_pass https://10.0.0.233/iredadmin/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}

# SOGo
location /SOGo/ {
proxy_pass https://10.0.0.233/SOGo/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}

# 静态文件(如 SOGo 的静态资源)
location /SOGo.woa/WebServerResources/ {
proxy_pass https://10.0.0.233/SOGo.woa/WebServerResources/;
proxy_set_header Host $host;
}

# 其他 SOGo 相关路径
location /Microsoft-Server-ActiveSync {
proxy_pass https://10.0.0.233/Microsoft-Server-ActiveSync;
proxy_set_header Host $host;
}
}

检查Nginx文件是否正确:

1
nginx -t

重新加载Nginx:

1
systemctl reload nginx

完成后,公网访问 https://mail.gaorkang.cn/ 就可以通过 Nginx 反向代理访问 iRedMail 的各个 Web 界面,同时启用 HTTPS 加密。

iRedMail配置验证

1.验证DNS 配置是否正确

可以通过访问 MXToolbox SuperTool 网站,输入自己的邮箱域名(例如 mail.gaorkang.cn),即可快速检测邮箱相关的 DNS 记录 是否配置正确,包括:

  • MX(邮件交换)记录
  • SPF、DKIM、DMARC 等邮件验证记录
  • Autodiscover / Autoconfig 自动配置记录

该工具会自动分析并给出详细的检测结果,方便排查配置错误。

2.检测公网是否可以访问iRedAdmin、Roundcube、SOGo

iRedAdmin 是 iRedMail 自带的 Web 管理后台,用于对邮件系统进行可视化管理。

域名路径: https://mail.gaorkang.cn/iredadmin/

Roundcube Webmail

Roundcube 是一个基于 PHP 开发的网页邮件客户端,用于让普通用户通过浏览器直接收发邮件,不过功能略单一。

域名路径:https://mail.gaorkang.cn/mail/

SOGo Groupware

SOGo 是一个功能强大的 Web 协作平台,除了可以用作 Webmail,还支持邮件、日历、联系人三合一、任务与会议日程管理、兼容 ActiveSync 协议,可与手机原生“邮件/日历/联系人”同步、支持 Outlook、Thunderbird、iOS、Android 等客户端同步,无限接近 Outlook 的工作流。

域名路径:https://mail.gaorkang.cn/SOGo/

3.给常用的公共邮箱发信测试

QQ 邮箱

QQ邮箱算是国内使用很多的了,而且据说 QQ 邮箱审核也比较严格,加上本身部署就在境外的 IP 上,可能会被拦截进垃圾箱。不过实测下来,QQ 邮箱收件正常。

Outlook

微软邮箱审核也是出名的严格,很多自部署域名邮箱,都会被拒收,DNS 配置正确,实测也没问题。

Gmail

Gmail审核策略还是相对来说比较宽松的,DNS 配置正确基本不会退信。

iRedMail使用

Web 使用

在安装完iRedMail 后,系统会生成一个管理员账号,通常是postmaster加域名地址,这个管理员账号既可以作为一个正常邮箱账户,也是iRedAdmin 后台的管理员。

通过该账号登录 iRedAdmin 管理后台,即可执行以下操作:

  • 创建、删除、禁用邮箱账户
  • 分配邮箱存储容量(配额)
  • 管理域名与别名邮箱
  • 查看系统运行状态与日志

创建完成邮箱账户后,用户即可通过 Roundcube Webmail 面板或 SOGo Groupware 面板来登录使用,实现邮件收发与协作。

搭配Thunderbird 使用

Thunderbird 是由 Mozilla 基金会 开发的一款免费、开源的电子邮件客户端,支持 Windows、macOS、Linux、iOS、Android 等多个平台。它以 安全、高效与可扩展性 著称,为用户提供完善的邮件管理解决方案。

只要在域名的 DNS 中正确配置 autodiscover 记录,Thunderbird 在设置邮箱账户时就会自动检测并配置服务器参数。
用户只需输入 邮箱地址和密码,即可快速完成账户配置

总结

以上就是自部署邮件服务器的全过程啦,自建邮件服务器虽能完全掌控数据、自由收发邮件,但部署与维护成本高,对P 要求严格。如果只是日常使用,还是选择选择公共邮箱的自定义域服务吧。