欢迎光临
我们一直在努力

自建邮件服务器:如何发一封不进垃圾箱的邮件

在之前我已经配置好了Postfix+Dovecot+Rspamd,可以正常收发邮件也可以有效拦截SPAM邮件,现在还剩最后一个问题:

我如何把邮件发进对方的收件箱?

对于个人自建的邮件服务器来说,这其实是一个很复杂的问题,解决起来的话要做的事情很多,我们自身能做的大概是以下几点:

1.DNS这方面需要添加SPF/DKIM/DMARC记录。

2.发信服务器的hostname要和MX记录的值对应。

3.发信支持TLS加密。

4.服务器要支持rDNS(PTR记录)并且记录要和MX记录的值对应。

5.你的服务器IP没有被列入各类黑名单系统。

6.邮件内容,对你没看错,哪怕就是你做好了上面5点,你发的邮件内容其实也很重要,现在大厂的邮件服务器都有一套自己的方案,有些包含敏感词的邮件你多发几封可能就发不出去了。

这篇文章的配置是基于:

Debian10使用Postfix+Dovecot+Roundcube搭建邮件服务器

以及

Rspamd与Postfix以及Dovecot的集成配置

如果你没有完成上述的配置,还请先按照这两篇文章把“前置任务”做一下。。

首先来添加SPF记录,这个记录要说的话,可配置项太多了,那不是一两句话能够说清楚的,我只说一下我目前用的记录值是:

记录类型:TXT
名称:@
内容:v=spf1 mx ip4:172.105.201.241/32 ip6:2400:8902::f03c:92ff:fe7a:5f01/128 -all

意思是让收件服务器查询我的MX记录是否与发信服务器的IP地址相同,不是我上述配置的2个IP地址发出的邮件全部拒绝。

其次是DKIM记录,DKIM简单点说就是给你的邮件签名,防止你的邮件内容被篡改。这里需要借助Rspamd来生成密匙对。

创建一个用于存放私钥的目录:

mkdir -p /var/lib/rspamd/dkim

使用rspamadm生成密匙对:

rspamadm dkim_keygen -d 233.fi -s imlala -k /var/lib/rspamd/dkim/233.fi.dkim.key

注:-d指定你的域名,-s指定selector名称。

执行完上述命令之后私钥会保存到目录内,而公钥和你需要添加的解析记录会有类似如下回显:

现在你应该按照下面的格式来添加DKIM记录:

记录类型:TXT
名称:imlala._domainkey
内容:v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2lejVfHCIn4XRKG8d7XZzMKXBucdoHY52vU9Wr8zQ+zjhkM/eYg4ppeE3pq1PDk/+ExrWhdWKFx/7BIsXo/rsOXB/67qhIcstvXFF/h6XTJpDZ30fVWqfvNIwHqhJAUv7EcqhoqkbvYuiS+mwS/+EGPy2jstWEaOJORqjufpzSQIDAQAB

注:记录的内容你应该去掉“括号”和“引号”以及保证每个“分号”后面有一个空格。

接着编辑dkim_signing.conf:

nano /etc/rspamd/local.d/dkim_signing.conf

写入如下配置:

domain {
    233.fi {
        selector = "imlala";
        path = "/var/lib/rspamd/dkim/233.fi.dkim.key";
    }
}
allow_hdrfrom_mismatch = true;
allow_hdrfrom_mismatch_sign_networks = true;
allow_username_mismatch = true;
use_esld = false;

完成之后重启Rspamd:

systemctl restart rspamd

最后再来添加DMARC记录,配置它的前提是你应该保证你的SPF和DKIM记录能够正常工作,因为DMARC更像是一个策略,它通过验证SPF/DKIM记录的结果来告知收信服务器这封邮件要如何处理。

例如某一封邮件SPF和DKIM验证失败,我们就可以用DMARC告知收信服务器直接拒收这封邮件,或者什么都不做。同时还可以利用DMARC定期给我们发送相关的报告。

以下是我记录值:

记录类型:TXT
名称:_dmarc
内容:v=DMARC1; p=none; rua=mailto:[email protected]

注:

1.DMARC的DNS记录,名称必须以_dmarc开头。

2.p=none是告知收信服务器如果SPF和DKIM验证失败,则什么都不做。一开始我们应该使用p=none,等到整个邮件服务器都能正常工作后,我们可以将这个值改为p=reject,告知收信服务器直接拒收。

3.rua是定期像我们指定的邮箱发送相关报告。其实这里建议单独创建一个邮箱来收这些报告邮件。

DNS这块就配置完成了,接下来是hostname的配置。

你可以看到网上能搜到的用Postfix搭建邮件服务器的教程,大多数第一步都是要你去把系统的hostname改了,我其实是不推荐用这种方法的,其原因是:

1.系统的hostname可能在很多时候是需要固定的,不能随随便便就改了。不能因为我要搭建一个Postfix就把系统的hostname改了这样有一些其他的服务可能会受到影响。

2.系统的hostname改了后不能立即生效,需要重启,这是个硬伤。。

其实Postfix自身就支持定义发信服务器的hostname,只需要下面一条命令即可完成设置:

postconf -e "myhostname = mail.233.fi"

重启Postfix使配置生效:

systemctl restart postfix

其实在你做完上述这些配置后,发一些国内的邮箱,例如QQ邮箱,126邮箱,只要你的邮件内容没什么“敏感词”基本上可以说是稳进收件箱的。

但Gmail这类邮箱就比较严格了,它还需要你的邮件是通过TLS加密发送出去的。所以这里我们需要配置Postfix/Dovecot让其支持发送加密邮件。

Postfix自身是有2个模块的,一个是smtp另一个是smtpd,如果说我们只是要Postfix发出去的邮件支持TLS加密其实可以不配置smtpd相关的东西。

因为smtp是管往外发,smtpd是管本地的,但既然都要配置加密了,那就做事做全套吧。。

默认的Postfix只监听25端口,是没有启用465以及587端口的,我们需要编辑:

nano /etc/postfix/master.cf

将如下的注释去掉支持587:

submission inet n - y - - smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt

将如下的注释去掉支持465:

smtps inet n - y - - smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes

配置SSL证书,这里可以直接用之前Certbot生成给Nginx用的证书:

postconf -e "smtpd_tls_cert_file = /etc/letsencrypt/live/mail.233.fi/fullchain.pem"
postconf -e "smtpd_tls_key_file = /etc/letsencrypt/live/mail.233.fi/privkey.pem"

现在smtpd就可以支持TLS加密了。但smtp还不行,所以执行如下命令开启smtp的支持(不需要重新配置证书之类的东西,Postfix会自动用smtpd的配置去设置smtp):

postconf -e "smtp_tls_security_level = may"

重启Postfix使配置生效:

systemctl restart postfix

接下来是Dovecot的加密支持,默认情况下Dovecot只监听了143端口并没有启用993端口,我们需要编辑下面的配置文件:

nano /etc/dovecot/conf.d/10-ssl.conf

这里还是可以用之前的SSL证书,按照下面的配置去修改即可:

ssl = required
ssl_cert = /etc/letsencrypt/live/mail.233.fi/fullchain.pem
ssl_key = /etc/letsencrypt/live/mail.233.fi/privkey.pem
ssl_dh = /etc/dovecot/dh.pem

注意有一个dh.pem的文件需要我们自己手动生成(生成很慢,大概要10分钟左右)

openssl dhparam 4096 > /etc/dovecot/dh.pem

重启Dovecot使配置生效:

systemctl restart dovecot

最后来设置邮件服务器的rDNS,对于Gmail这类邮箱来说的话,这个也必须得设置,不然你的邮件也很可能会进垃圾箱。

设置rDNS要看你的服务器商家支持不支持,如果是Linode话,可以按下图来设置:

所以在搭建邮件服务器的时候一定要找一个支持rDNS的,并且最好可以轻松换IP的,有些服务器IP买来就进了各个SPAM数据库的黑名单,你就是玩出一朵花来IP在黑名单内你想进收件箱也不可能进的去。。

现在测试一下,经过上面的这些配置后,我的邮件服务器能评个多少分:

测试总归还是测试,能不能发进收件箱才是关键,首先往QQ邮箱发几封kangkang:

我寻思QQ邮箱没问题的话那126邮箱应该也没问题,因为我是同时用QQ也用126的,发现126的反垃圾邮件没有QQ做的好,我的126收件箱里面经常躺着比QQ多几倍的垃圾邮件:

最后往最挑剔的Gmail发一封kangkang,正好也可以测试我们的邮件是否支持TLS加密:

赞(0)
未经允许不得转载:拆东墙 » 自建邮件服务器:如何发一封不进垃圾箱的邮件

评论 抢沙发

登录

找回密码

注册