设置发信 SPF
发信的 SPF 记录不需要 Postfix 设置,而完全在 DNS 上。
为自己的域名添加一条 TXT 记录:
example.com IN TXT "v=spf1 mx ~all"
这条记录表示域名自身 MX 记录指向的主机为可信主机,~all 表示除此以外的主机为软拒绝。
SPF 记录的语法规则可以查阅 http://www.openspf.org/SPF_Record_Syntax 。
校验来信 SPF
Postfix 需要安装一个组件以支持 SPF 校验。
# apt-get install postfix-policyd-spf-perl
添加 Postfix policy:
# postfix-add-policy spfcheck nobody /usr/sbin/postfix-policyd-spf-perl
在 /etc/postfix/main.cf 添加以下内容:
# SPF
smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated check_policy_service unix:private/spfcheck
spfcheck_time_limit = 3600
重载配置:
# service postfix reload
现在 Postfix 每收到一封邮件都会进行 SPF 校验,然后在邮件头部加入类似 Received-SPF: pass 的信息。
DKIM 签名
DKIM 是另一种验证邮件有效性的方法。跟 SPF 不同,DKIM 在 DNS 公开一个公钥,然后用私钥对自己的邮件进行签名。收信者查询发信方域名获得公钥,然后校验签名是否有效。
为 Postfix 添加 DKIM 支持需要用到 opendkim 这个包。
安装 opendkim
# apt-get install opendkim opendkim-tools
配置 opendkim
打开 /etc/opendkim.conf,添加以下内容:
Domain example.com
KeyFile /etc/mail/dkim.key
Selector mail
Domain 为自己的域名,KeyFile 为域名对于的私钥,Selector 为公钥存放的主机名(这里设置为 mail._domainkey.example.com)。
打开 /etc/default/opendkim,添加以下内容:
SOCKET="inet:8891@localhost" # listen on loopback on port 8891
这里让 opendkim 的守护进程监听 8891 端口,用于和 Postfix 通信。
生成密钥:
# mkdir /etc/mail
# cd /etc/mail
# opendkim-genkey -s mail -d example.com
# cp mail.private dkim.key
查看 mail.txt 文件,里面有 dkim 的公钥,将它添加为 DNS TXT 记录,类似于:
mail._domainkey.example.com. IN TXT "v=DKIM1; k=rsa; p=PpYHdE2tevfEpvL1Tk2dDYv0pF28/f5M..."
重启 opendkim:
# service opendkim restart