这个部分我们的目标是让我们的邮件服务器能尽量干净地出现在世界上,并让垃圾邮件发送者们更难以我们的名义发邮件。作为附加效果,这也有助于让我们的邮件能通过其他邮件服务器的垃圾邮件过滤器。
发送者策略框架(SPF)
发送者策略框架(SPF)是你添加到自己服务器区域里的一份记录,声明了整个因特网上哪些邮件服务器能以你的域名发邮件。设置非常简单,使用上的SPF向导来生成你的SPF记录,然后作为一个TXT记录添加到自己的服务器区域里。看上去像这样:
- linuxidc.net.300 IN TXT v=spf1 mx mx:cloud.linuxidc.net -all
反向PTR
我们之前在本文里讨论过这个问题,建议你为自己的服务器正确地设置反向DNS,这样对服务器IP地址的反向查询能返回你服务器的实际名字。
OpenDKIM
当我们激活后,postfix会用密钥为每封发出去的邮件签名。然后我们将把这个密钥存储在DNS域中。这样的话,世界上任意一个邮件服务器都能够检验邮件是否真的是我们发出的,或是由垃圾邮件发送者伪造的。让我们先安装opendkim:
- apt-get install opendkim opendkim-tools
然后按如下方式编辑/etc/opendkim.conf文件的配置:
- ##
- ## opendkim.conf -- configuration file for OpenDKIM filter
- ##
- Canonicalization relaxed/relaxed
- ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
- InternalHosts refile:/etc/opendkim/TrustedHosts
- KeyTable refile:/etc/opendkim/KeyTable
- LogWhyYes
- MinimumKeyBits1024
- Mode sv
- PidFile/var/run/opendkim/opendkim.pid
- SigningTable refile:/etc/opendkim/SigningTable
- Socket inet:8891@localhost
- SyslogYes
- SyslogSuccessYes
- TemporaryDirectory/var/tmp
- UMask022
- UserID opendkim:opendkim
我们还需要几个额外的文件,需保存在目录/etc/opendkim里:
- mkdir -pv /etc/opendkim/
- cd /etc/opendkim/
让我们建立新文件/etc/opendkim/TrustedHosts并写入以下内容:
- 127.0.0.1
建立新文件/etc/opendkim/KeyTable并写入以下内容:
- cloudkey linuxidc.net:mail:/etc/opendkim/mail.private
这会告诉OpenDKIM我们希望使用一个名叫'cloudkey'的加密密钥,它的内容在文件/etc/opendkim/mail.private里。我们建立另一个名叫/etc/opendkim/SigningTable的文件然后写入下面这一行:
- *@linuxidc.net cloudkey
这会告诉OpenDKIM每封从linuxidc.net域发出的邮件都应该用'cloudkey'密钥签名。如果我们还有其他域希望也能签名,我们也可以在这里添加。
下一步是生成密钥并修改OpenDKIM配置文件的权限。
- opendkim-genkey -r -s mail [-t]
- chown -Rv opendkim:opendkim /etc/opendkim
- chmod 0600/etc/opendkim/*
- chmod 0700 /etc/opendkim
一开始,最好使用-t开关,这样会通知其他邮件服务器你只是在测试模式下,这样他们就不会丢弃基于你的OpenDKIM签名的邮件(目前来说)。你可以从mail.txt文件里看到OpenDKIM密钥:
- cat mail.txt
然后把它作为一个TXT记录添加到区域文件里,应该是类似这样的:
- mail._domainkey.cloud1984.net.300 IN TXT v=DKIM1; k=rsa; p=MIGfMA0GCSqG...
最后,我们需要告诉postfix来为发出的邮件签名。在文件/etc/postfix/main.cf末尾,添加:
- # Now for OpenDKIM: we'll sign all outgoing emails
- smtpd_milters = inet:127.0.0.1:8891
- non_smtpd_milters = $smtpd_milters
- milter_default_action = accept
然后重启相关服务:
- service postfix reload
- service opendkim restart
测试
现在让我们测试一下是否能找到我们的OpenDKIM公钥并和私钥匹配:
- opendkim-testkey -d linuxidc.net -s mail -k mail.private-vvv
这个应该返回:
- opendkim-testkey: key OK
这个你可能需要等一会直到域名服务器重新加载该区域(对于Linode,每15分钟会更新一次)。你可以用dig来检查区域是否已经重新加载。
如果这个没问题,让我们测试一下其他服务器能验证我们的OpenDKIM签名和SPF记录。要做这个,我们可以用。发送一封邮件到上提供的测试地址,我们可以在服务器上运行下面的命令
- mail -s CloudCheck ihAdmTBmUH@www.brandonchecketts.com
在Brandon的网页上,我们应该可以在'DKIM Signature'部分里看到result = pass的文字,以及在'SPF Information'部分看到Result: pass的文字。如果我们的邮件通过这个测试,只要不加-t开关重新生成OpenDKIM密钥,上传新的密钥到区域文件里,然后重新测试检查是否仍然可以通过这些测试。如果可以的话,恭喜!你已经在你的服务器上成功配置好OpenDKIM和SPF了!