邮件优化:避免发信被当做垃圾邮件

1,173 阅读2分钟

之前使用postfix + dovecot自建了邮件服务器,可以做到正常收发,但只是这样远远不够,测试发信时发现给163、QQ邮箱发信都能在收件箱中正常接收邮件,但是gamail、yahoo邮箱收到的邮件都在垃圾邮件箱中。若要使各大邮箱(或者大部分邮箱)都能正常接收我们的邮件还需要做到以下几点:

1.SPF记录
2.DKIM签名
3.IP地址反向解析

一、SPF记录

SPF是为了防范垃圾邮件而提出来的一种DNS记录类型,它是一种TXT类型的记录,它用于登记某个域名拥有的用来外发邮件的所有IP地址。

向你的邮件域名添加一条 TXT 记录:

v=spf1 a mx ip4:发信服务器的IP ~all

主机记录填 @

详细配置方法见:www.renfei.org/blog/introd…

二、DKIM签名

首先,向你的 CentOS 添加 EPEL 库 , fedoraproject.org/wiki/EPEL 可以在这里寻找适合你操作系统的库。

我的服务器使用的是 CentOS 6.9 所以下载 EPEL 6 ( 由于 EPEL 所提供的镜像是 IPV6 地址,请确保你的服务器已经开启 IPV6 )

添加成功后,安装opendkim

yum install opendkim

编辑opendkim配置文件

nano /etc/opendkim.conf

#添加以下内容
Canonicalization        relaxed/relaxed
ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts
InternalHosts           refile:/etc/opendkim/TrustedHosts
KeyTable                refile:/etc/opendkim/KeyTable
LogWhy                  Yes
MinimumKeyBits          1024
Mode                    sv
PidFile                 /var/run/opendkim/opendkim.pid
SigningTable            refile:/etc/opendkim/SigningTable
Socket                  inet:8891@127.0.0.1
Syslog                  Yes
SyslogSuccess           Yes
TemporaryDirectory      /var/tmp
UMask                   022
UserID                  opendkim:opendkim

#创建秘钥
cd /etc/opendkim/keys
opendkim-genkey -D /etc/opendkim/keys/ -d YourDomain.com -s default
#创建完毕后可以看到keys文件夹下生成了两个文件:
#default.private    //秘钥
#default.txt        //公钥

#打开default.txt
nano /etc/opendkim/keys/default.txt

default._domainkey	IN	TXT     ( "v=DKIM1; k=rsa; "
      "p=MIGfMA0GCSqGSIb3DQ***********************n0z/HbQHwIDAQAB" )  ; ----$

#给你的邮件域名添加一条 TXT 记录:
#主机记录填入 default._domainkey
#记录内容就是default.txt中从 v=DKIM1;开始的内容,去掉换行符和双引号

#秘钥创建完成后,将其添加到 /etc/opendkim/KeyTable 中
nano /etc/opendkim/KeyTable
default._domainkey.YourDomain.com YourDomain.com:default:/etc/opendkim/keys/YourDomain.com/default.private

#然后添加 /etc/opendkim/SigningTable
nano /etc/opendkim/SigningTable
*@YourDomain.com default._domainkey.YourDomain.com

#设置允许进行签名的主机 /etc/opendkim/TrustedHosts
nano /etc/opendkim/TrustedHosts
127.0.0.1   //默认就有的

#如果使用邮件客户端来发送邮件,查看 /var/log/maillog 日志会有以下错误展示:
Jul  2 15:50:50 CB061403 opendkim[3448]: 6D6E5900467: [xxx.115.253.60] [xxx.115.253.60] not internal
Jul  2 15:50:50 CB061403 opendkim[3448]: 6D6E5900467: not authenticated
Jul  2 15:50:50 CB061403 opendkim[3448]: 6D6E5900467: no signature data

#xxx.115.253.60这个IP是我本机的IP地址,如果我将其添加到TrustedHosts,则opendkim开始签署从此IP发送的消息,此时maillog日志显示如下:
Jul  2 16:08:15 CB061403 opendkim[4411]: 5D83F900467: DKIM-Signature field added (s=default, d=YourDomain.com)
这样做当然不是解决方案,不能每次从新网络发送消息时添加IP地址

解决办法是在TrustedHosts中添加0.0.0.0/0将信任所有IP(但这样做是否有安全隐患尚未确认)。

编辑 /etc/postfix/main.cf 文件

nano /etc/postfix/main.cf
#在文档末尾添加以下内容

milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:8891
non_smtpd_milters = inet:8891

#重启 opendkim 和 postfix
service opendkim restart
service postfix restart

三、IP地址反向解析

首先确认是否安装dns服务:named

yum install named

#编辑配置文件
nano /etc/named.conf
listen-on port 53 { localhost; };   //监听本机udp和tcp的53端口,提供域名查询及主从同步
allow-query     { any; };           //允许任意主机进行域名查询

#编辑/etc/named.rfc1912.zones
nano /etc/named.rfc1912.zones

zone "62.99.111.in-addr.arpa" IN {  //这里的62.99.111是由正常的IP地址倒着写的,并且去掉最后一组数字
    type master;
    file "YourDomain.com.local";   //YourDomain.com.local是域名的反向解析文件
}

#编辑YourDomain.com.local
nano /var/named/YourDomain.com.local

$TTL 1D
@	IN SOA  YourDomain.com admin.YourDomain.com. (
                                        0	; serial
                                        1D	; refresh
                                        1H	; retry
                                        1W	; expire
                                        3H )    ; minimum
        IN	NS	dns.YourDomain.com.
46	IN	PTR     mail.YourDomain.com.

#重启dns服务
service named restart

测试反向解析:

dig -x 你的服务器IP地址 @你的服务器IP地址

内容如下: ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.3 <<>> -x 111.99.62.00 @111.99.62.00 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43652 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;00.62.99.111.in-addr.arpa.	IN	PTR

;; ANSWER SECTION:
00.62.99.111.in-addr.arpa. 86400 IN	PTR	YourDomain.com.

;; AUTHORITY SECTION:
62.99.111.in-addr.arpa.	86400	IN	NS	dns.YourDomain.com.

;; Query time: 0 msec
;; SERVER: 111.99.62.00#53(111.99.62.00)
;; WHEN: Tue Jul  2 17:39:55 2019
;; MSG SIZE  rcvd: 90

出现以上信息则说明反向解析已配置完成。

详情见:

blog.51cto.com/tanxw/13760…

blog.csdn.net/zkkdcs1/art…

最后推荐一个邮件测试网址:

www.mail-tester.com/

通过这个网站测试邮件发送,可以知道自己的邮件服务器存在哪些问题,按照提示挨个解决,尽量打满分就行。