自建邮箱不完全理论指南
1. 开源邮箱项目
- Poste . io官网地址:poste.io
- 免费版:功能基本完全,包括基本的反病毒与反垃圾邮件功能
- 收费版:增加高级可视化统计功能,包括发件、收件等统计
- 后台管理:全英文,无法设置中文;内置nginx,配置反向代理时建议仔细阅读官方文档建议
- 网页邮箱:使用Roundcube作为webmail client,界面UI简洁优雅,有一定的设计感,但部分内容汉化不全;自动显示中文界面;
- Mailu官网地址:mailu.io
- 有网页邮箱,网页及后台均支持中文;
- 配置项复杂繁多,但官网支持通过自定义选项自动生成docker-compose.yaml及.env配置文件,配置上总体来说较方便;
- docker安装镜像位于ghcr . io,国内服务器基本上无法成功拉取;
- Docker Mailserver官网地址:docker-mailserver.github.io
- 没有WebUI,基本所有的设置均需要使用命令行,包括新增用户
- 其余不甚了解
- iRedMail官网地址:iRedMail Documentations
- 官方不提供docker官方镜像,官方文档安装方式为shell脚本
- 安装时需命令行手动设置DMARC及证书
- 同样使用Roundcube作为webmail client,但后台较为丑陋
2. 邮箱服务常用协议及端口
协议 | 端口 | 说明 |
---|---|---|
SMTP | 25/465/587 | - 简单邮件传输协议(Simple Mail Transfer Protocol) - 25端口是向其他邮箱服务器发件的端口 - 465端口SSL加密,可以防止发送者抵赖 - 587端口(TLS)是客户端与服务器交互的推荐端口 |
POP3 | 110/995 | 邮局协议(Post Office Protocol),用于邮件接收,独立工作视图,默认情况下邮件接收后将在服务器端删除,某些客户端可以设置服务器端保留邮件 |
IMAP | 143/993 | 邮件接收协议,客户端与服务器端的双向交互协议,实现所有客户端同一工作视图 |
3. 配置过程
3.1 域名解析设置
类型 | 主机记录 | 记录值 | 说明 |
---|---|---|---|
A | IP address | ||
MX | @ | mail . domain . com | |
CNAME | smtp | mail . domain . com | |
CNAME | pop | mail . domain . com | |
CNAME | imap | mail . domain . com | |
TXT | @ | 详见SPF设置 | SPF |
TXT | ... | 详见DKIM设置 | DKIM |
TXT | _dmarc | 详见DMARC设置 | DMARC |
3.2 服务器准备
- 选购服务器:
- 尽量不选择灰色产业的第三方服务器,IP尽量没有不良建站记录;
- 选择开放25端口,且支持申请rDNS/PTR(反向域名解析)的服务商;
- 常见ISP服务器特点:
- 腾讯云轻量云服务器开放25端口,但不支持PTR;
- 阿里云服务器网传封禁25端口;
- 搬瓦工后台可直接设置PTR;
- 发件地址与宣称地址需一致:
- 若发件IP地址与域名IP地址不一致则影响信誉分,对内网穿透及反向代理方式建站有所限制;
- 若想要使用内网机器等代理服务器发件,可以考虑邮箱服务的25等端口开启代理至域名解析的服务器,或详细配置SPF记录;
- 设置服务器主机名Hostname:
- 修改
/etc/hostname
及/etc/hosts
中的旧主机名为mail.domain.com
,重启后即修改为新的主机名。主机名与域名不一致可能会影响邮箱评分;
- 修改
- 设置服务器时区:
- Ubuntu执行
timedatectl set-timezone Asia/Shanghai
设置时区为上海,保证邮件系统记录时间正常; - 其它非Debian系的系统请自行修改时区;
- Ubuntu执行
- 测试服务器25端口是否连通
- 25端口是不同邮箱服务器之间发件使用的端口,若25端口不开放,将导致仅能接收邮件,不能向其他邮箱发送邮件
- 通过命令行测试25端口连通性代码如下:
#测试服务器是否开启25端口 telnet smtp.qq.com 25 #若端口通畅,则显示如下 Trying 183.47.101.192... Connected to smtp.qq.com. Escape character is '^]'. 220 newxmesmtplogicsvrszb6-0.qq.com XMail Esmtp QQ Mail Server. #按CTRL+]中断连接,再输入quit可退出telnet #若端口关闭,则一直阻塞 Trying 183.47.101.192... #按CTRL+C中断连接
3.3 邮箱服务程序安装
- 安装docker环境,DockerCE官方安装步骤(非docker则跳过)
- 参照各项目官方安装步骤完成安装:
- 访问web进入后台,完成相关设置。
3.4 设置SPF记录
3.4.1 设置方式
在域名解析添加一条TXT的@记录,记录值为v=spf1 mx a:mail.domain.com ~all
,具体含义如下文:
常见最简单的SPF记录为v=spf1 mx ~all
。根据上述网站对于SPF定义的说明,v=spf1意为声明这是一条SPF记录,mx是定义的一条规则,意为所有域的MX记录对应的A记录按照MX优先级进行验证;如果客户端IP在这些记录中,那么该机制匹配;如果没有指定域,则使用当前域。~all表示在前方规则作用范围外的所有情况,全部拒绝。
上述记录会授权该域名下所有邮箱,即发件域名为*.domain.com的邮件均在许可范围。若想限定在某个域,则可设置为v=spf1 mx a:mail.domain.com ~all
,意为只有mail.domain.com下的邮件在许可范围,许可范围相对较窄。
若想将发件许可限制在某个具体IP地址,则可设置为v=spf1 mx ip4:x.x.x.x ~all
。即仅有该IP地址下发出的邮件在SPF记录的声明许可范围内。
3.4.2 SPF的由来
当前 Email 通信,还是在使用 SMTP 这个协议。SMTP 的全称为 Simple Mail Transfer Protocol,即简单邮件传输协议。正如它的名字锁暗示的,SMTP ,本身并没有很好的安全措施,发件人的邮箱地址是可以由发信方任意声明的,在垃圾和诈骗邮件横行的今天,这显然是极不安全的。发件人策略框架(Sender Policy Framework, SPF)出现的目的,就是为了防止随意伪造发件人[1]。
SPF记录是DNS中的TXT记录,当在DNS中定义了域名的SPF记录后,为了确认邮件声称发件人不是伪造的,邮件接收方首先检查邮件域名的SPF记录,来确定发件人的IP地址是否被包含在SPF记录中,若包含,则认为是一封正确的邮件,否则认为是一封伪造的邮件并退回,或将其标记为垃圾/仿冒邮件。 设置正确的SPF记录可以提高邮件系统发送外域邮件的成功率,也可以一定程度上防止被假冒域名发送邮件[2]。
SPF结构及各标记含义的完整定义在SPF官方网站 (open-spf.org)[3]中有详尽阐述(英文);而在《邮件伪造之SPF防范全解析》一文[2]中,作者nwatch将官方网站上的大部分内容翻译成了中文。
3.5 设置DKIM
3.5.1 设置方式
现代邮箱框架安装完成后,在管理员后台大多能找到DKIM相关设置,点击生成DKIM密钥后,按照提示将密钥配置到域名TXT类型解析中。若为无web管理后台的邮箱服务程序,请按照官方文档通过命令行设置
3.5.2 DKIM概述
域名密钥识别邮件标准(DomainKeys Identified Mail,DKIM)同样是为了防止假冒域名发邮件而诞生的一种邮件认证标准。DKIM 的基本工作原理是基于传统的非对称密钥认证方式,公钥将会存放在 DNS 中,而私钥会存放在寄信服务器中。数字签名会自动产生,并依附在邮件头中,发送到寄信者的服务器里。公钥则放在DNS服务器上,供自动获得。收信的服务器,将会收到夹带在邮件头中的签名和在DNS上自己获取公钥,然后进行比对,比较寄信者的域名是否合法,如果不合法,则判定为垃圾邮件[4]。
3.6 设置反向域名解析
3.6.1 设置方式
缩写为rDNS或PTR。不同ISP提供的设置方式不一致,常见ISP设置PTR特点如下:
- 腾讯云、阿里云的PTR一般为增值服务,需要付费购买且价格不菲,购买后可在DNS设置面板找到PTR字样的设置界面;
- 徕卡云需要发送工单进行申请;
- 搬瓦工VPS管理后台即可直接设置PTR记录
3.6.2 反向域名解析概述
反向域名解析(Reverse DNS Lookup)是一种通过IP地址查询对应域名的过程。在互联网中,每个设备都有一个唯一的IP地址,而域名则是人们更容易记忆和理解的标识方式。正向域名解析通过域名查找IP地址,而反向域名解析则实现了相反的过程。
通过进行反向域名解析,可以追溯特定IP地址背后的主机名或域名。这对于网络管理、安全监控和故障排查非常重要。例如,在网络安全领域,分析恶意活动时,追溯IP地址的反向解析可揭示与攻击相关的域名,有助于追踪攻击者的行踪和采取相应的防御措施。
在邮箱服务应用中,设置反向域名解析可以大幅度提高邮件的可信度,能很大程度上避免邮件造假。
3.7 设置DMARC
在域名解析设置一条主机记录为_dmarc
、记录值为v=DMARC1; p=none; rua=mailto:dmarc-reports@domain.com
的TXT类型记录,意为若向其他邮箱发件后,上述SPF、DKIM校验失败,怀疑为伪造邮件,则向记录中设置的邮箱(这里设置为dmarc-reports@domain.com
)发送反馈邮件。
4. 邮箱评分测试
完成上述安装配置过程之后,自建的邮箱服务即可正常投入使用。此时应进行邮箱评分测试,以评估该自建邮箱发送的邮件被识别为垃圾邮件的概率。常用的邮箱评分网站为SpamRATS及mail-tester.com。以mail-tester为例,访问测试网站后,按照提示用自建邮箱给指定的地址发送一封邮件(邮件内容及格式要正式)后,点击查看邮件得分,即可查看评分高低,以及改进建议。一般评分>5分即可正常被接收;若评分过低可按照网站建议进行相应优化。
一般而言,设置好hostname、SPF、DKIM、DMARC,即使没有设置反向域名解析,邮箱评分也可以达到8.9分,只要邮箱的顶级域名不是.xyz等较为“奇怪”的顶级域名,即使是Gmail也不会标记为垃圾邮件。
5. 拓展阅读
[1]. MSFTTracyP, etc.Microsoft 365 如何使用发件人策略框架 (SPF) 来防止欺骗[OL].Microsoft Learn.(2023-06-16).https://learn.microsoft.com/zh-cn/microsoft-365/security/office-365-security/email-authentication-spf-configure?view=o365-worldwide
参考文献
[1].Renfei Song.SPF 记录:原理、语法及配置方法简介[OL].Renfei Song’s Blog.(2014-02-17).https://www.renfei.org/blog/introduction-to-spf.html
[2]. nwatch.邮件伪造之SPF防范全解析[OL].知乎.(2020-10-06).https://zhuanlan.zhihu.com/p/262143994
[3].SPF: SPF Record Syntax (open-spf.org)http://www.open-spf.org/SPF_Record_Syntax/
[4].百度百科.DKIM[OL].https://baike.baidu.com/item/DKIM/152526?fr=ge_ala