之前提到过使用cloudflare的电子邮件路由,根据向导能自动创建身份验证记录,但是仅针对通过cloudflare的邮件路由服务来发送的邮件有效,如果你在自己的服务器上直接发送邮件,需要修改记录通过SPF、DMARC与DKIM验证。
SPF
域名DNS记录,用于指定哪些邮件服务器有权代表域名发送邮件,记录名为example.com或子域名。SPF的匹配过程是从前往后依次检查,一旦匹配到某个机制并确定结果,就不会继续检查后面的机制。主要记录为"v=spf1 [<修饰符><指令>:<参数>]",多个完整记录之间空格隔开。
- v=spf1:版本号,表示这是SPF版本1
修饰符:指定指令的行为
+
:允许发送邮件,接受邮件标记为可信,默认-
:拒绝发送邮件,拒绝邮件可能直接丢弃或退回~
:软拒绝发送邮件,接受邮件,但可能放入垃圾邮件或标记为可疑?
:不明确表态,通常接受邮件,不做特别处理
指令:指定该记录的操作
a
:允许域名解析到的IP,默认解析SPF记录对应域名,后可跟其他域名,消耗一次A/AAAA记录解析mx
:允许MX记录的IP发送邮件(MX记录是邮件接收过程中决定哪个服务器接收邮件)ip4
:允许指定的IPv4地址或网段发送邮件ip6
:允许指定的IPv6地址或网段发送邮件include
:引入其他域名的SPF记录,消耗一次SPF查询all
:所有
因为最简化,该服务器postfix只用于发送,不用于接收,无论是外域邮件的接收,还是自建邮件的转发接收,不需要调整postfix相关配置。
DKIM
域名DNS记录,邮件发送方基于邮件的部分内容使用私钥进行数字签名,附加到邮件头部,接收方使用公钥验证邮件是否篡改。Postfix的核心职责是处理邮件的传输,签名需要其他软件配合,本例使用OpenDKIM,默认生成RSA密钥加密和SHA-256哈希算法签名。
- 安装OpenDKIM:
yum install opendkim opendkim-tools -y
生成DKIM密钥:单独存放,否则启动时会因为权限问题导致无法启动,mkdir -p /etc/opendkim/example.com && cd /etc/opendkim/example.com
,生成密钥命令
opendkim-genkey`,有参数如下- -d + 域名:指定DKIM签名使用的域名,即邮件From头部的域名
- -s + 标识名:在记录中名称为<标识名._domainkey>,用以区分不同密钥
- -b + 1024/2048:指定密钥位数,默认2048
- -t:生成测试密钥
- 限定权限:
groupadd opendkim && useradd -r -g opendkim -s /sbin/nologin opendkim
和chown -R opendkim:opendkim /etc/opendkim/example.com && chmod 600 /etc/opendkim/example.com/default.private
- 添加DKIM记录:执行后生成标识名.private的私钥和标识名.txt的公钥,打开txt文本复制引号内容,添加DNS记录
配置OpenDKIM:复制备份并编辑配置文件
/etc/opendkim.conf
# 日志 Syslog yes SyslogSuccess yes LogWhy yes # 用户和权限 UserID opendkim:opendkim Umask 002 # 通信 Socket inet:8891@localhost PidFile /run/opendkim/opendkim.pid # 签名 OversignHeaders From,Subject,Date,To #强制签名部分字段 Canonicalization relaxed/relaxed #签发和验证时规范化空格、换行符等 Mode s #s仅发送时添加签名,v仅接收时验证签名 # 指定密钥和映射文件 Domain example.com #指定域名生成签名 KeyFile /opendkim/default.private #指定私钥路径 Selector default #指定选择器
配置Postfix:编辑
/etc/postfix/main.cf
,文件末尾加上milter_default_action = accept milter_protocol = 6 smtpd_milters = inet:127.0.0.1:8891 non_smtpd_milters = inet:127.0.0.1:8891
- 重启OpenDKIM与Postfix:
systemctl restart opendkim && systemctl enable opendkim && systemctl restart postfix
- 使用PostfixAdmin登录管理员账户,向测试网站发送测试邮件https://www.mail-tester.com/或https://dkimvalidator.com/
DMARC
域名DNS记录,用于接收方处理未通过SPF或DKIM验证的邮件,记录名为_dmarc.example.com或 _dmarc.子域名。主要记录为"v=DMARC1;p=策略;sp=策略;pct=百分比;rua=mailto:聚合报告邮箱;ruf=mailto:取证报告邮箱;fo=取证报告生成控制;adkim=DKIM策略;aspf=SPF策略"
- v=DMARC1:版本号,表示这是DMARC版本1
p=策略:
none
:邮件照常投递,但接收方会将认证结果反馈给域名所有者quarantine
:邮件被标记为可疑,可能会被投递到垃圾邮件文件夹reject
:邮件被直接拒绝,发送方会收到退信通知
- sp=策略:子域名策略,当子域名未单独配置时生效,与p参数相同
pct=百分比:0-100,有多大的概率应用策略处理未通过的邮件
pct=0
:不会对任何邮件应用策略,等价于p=nonepct=100
:对所有未通过验证的邮件强制应用DMARC策略,默认
- rua=mailto:聚合报告邮箱:指定接收DMARC聚合报告的邮箱,报告为XML格式,仅包含统计数据,每日或定期统计数据汇总,显示验证通过/失败比例
- ruf=mailto:取证报告邮箱:指定接收未通过DMARC验证的具体邮件样本和详细信息的邮箱,每封未通过验证的邮件都会触发
fo=取证报告生成频率:
fo=0
:仅在SPF和DKIM都失败,且不通过DMARC(域名对齐或p=none)时生成取证报告,默认fo=1
:任何一次SPF或DKIM失败都会生成取证报告fo=d
:DKIM失败时生成取证报告fo=s
:SPF失败时生成取证报告
adkim=DKIM策略:控制DKIM认证过程中,发件人域名与认证域名DKIM签名域之间的匹配严格程度
adkim=r
:宽松,允许DKIM签名域与邮件头部域名对其,例如子域名与主域名匹配,默认adkim=s
:严格,须完全匹配域名,子域不被接受
aspf=SPF策略:控制SPF认证过程中,发件人域名与认证域名SPF的Return-Path域之间的匹配严格程度,发件人为FROM,实际发件人为Return-Path,若中转则可能不一致
adkim=r
:宽松,支持子域名与主域名匹配,默认adkim=s
:严格,须完全匹配域名,子域不被接受
全部设置完成后,可以向Gmail邮箱发送邮件,点击接收邮件的显示原始邮件,如下内容则配置完成,对于一些要求不严格的例如qq邮箱已经能正常放入收件箱了,但对于严格的还是会放入垃圾信箱,如果还需更进一步,就需要配置反向DNS解析了……
评论已关闭