LNMP网站域名配置Google企业邮箱的MTA-STS

MTA-STS就是SMTP MTA Strict Transport Security (MTA-STS) ,IETF以及其它邮件服务商共同达成的一种通过SMTP发送邮件时一种安全传输标准。严格来讲,如果一个邮件服务商支持MTA-STS,那么它代表两个维度,第一会严格根据标准发送邮件,第二就是根据标准接收邮件。

为什么要配置Google企业邮箱的MTA-STS?

当我们以自有域名,特别是企业注册的域名作为邮箱@后缀使用的时候,发出去的邮件很容易进入到对方的垃圾邮件箱,在对方邮件服务器无法验证这个企业域名邮箱发出的邮件是否符合安全传输(TLS)的合规性之前,通常把这些邮件当作垃圾邮件来处理。但是如果这个企业域名已经配置MTA-STS标准,也就符合安全传输TLS的规范,验证了邮件来源的安全性,发出来的邮件自然被当作正常邮件进行处理。

以下方法是结合LNMP服务器来配置谷歌Google workspace的企业邮箱的MTA-STS,官方档案请参考:MTA-STS and TLS reporting 官方解释得相当详细,下面只是简述操作步骤,以下MTA-STS配置方法要满足以下条件:

  • LNMP服务器,因为涉及到NGINX的配置文件conf的改写
  • 谷歌Google workspace企业邮箱,不是免费的Gmail
  • 可访问的企业域名网站或目录
  • 企业域名开启了HTTPS安全链接,并支持TLS1.2以上
  • 建议企业域名DNS中配置好:SPF,DKIM,DMARC,非强制性

检查当前域名的MTA-STS的状态

在进入到Google workspace企业邮箱后台后,找到一下位置, 就可以查询到MTA-STS当前的配置情况
Apps > Google Workspace > Settings for Gmail > Compliance > MTA-STS

在查询结果中主要有三个值要配置

  • MTA-STS TXT Record Diagnostic (_mta-sts)
  • MTA-STS Policy Diagnostic
  • Reporting Policy Diagnostic (_smtp._tls)

如果无配置,或错误,MTA-STS Configuration - Valid 或 Error 两种状态。而在三个值最右边会给出建议配置值。这里我们可以提前将_mta-sts和_smtp._tls配置到企业域名的DNS中

增加企业域名DNS的_mta-sts和_smtp._tls

在企业域名的管理操作界面中,打开DNS管理,分别增加两个TXT值,主机host分别填写_mta-sts和_smtp._tls,而对应的值填写在上一步查询中得到的建议配置值。

MTA STS配置1
MTA STS配置1

增加一个二级域名

在企业域名的DNS管理界面中,增加一个A记录的二级域,主机填写为mta-sts,对应值仍为主域名IP

创建一个MTA-STS策略

也是在Google Workspace后台 找到 Apps > Google Workspace > Settings for Gmail > Compliance 并配置 Secure transport (TLS) compliance

配置完成后,在电脑本地新建文件mta-sts.txt,并将配置查询到的MTA-STS Policy Diagnostic建议值保存在此文件中,以下建议值。

version: STSv1
mode: testing
mx: aspmx.l.google.com
mx: alt1.aspmx.l.google.com
mx: alt2.aspmx.l.google.com
mx: alt3.aspmx.l.google.com
mx: alt4.aspmx.l.google.com
max_age: 604800

改写LNMP的域名配置文件conf

在改写文件之前,先在企业域名的根目录下新建文件夹/mta-sts/.well-known/并将mta-sts.txt上传到此目录中,并更改文件夹及文件的所属权限chown www:www -R ../mta-sts

找到LNMP服务器下nginx的域名配置文件conf,在conf内容中最后一行添加以下内容

server  {
        listen 80;
        listen [::]:80;
		
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
        server_name  mta-sts.domain.com;
		root  /home/wwwroot/www.domain.com/mta-sts;

		ssl_certificate /usr/local/ssl/domain.com/fullchain.cer;
		ssl_certificate_key /usr/local/ssl/domain.com/domain.com.key;
		if ($ssl_protocol = "") { return 301 https://$server_name$request_uri; }
		
		ssl_session_timeout 1d;
		ssl_session_tickets off;
		ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
		ssl_prefer_server_ciphers on;
		ssl_ciphers "TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";        	
		ssl_session_cache builtin:1000 shared:SSL:10m;
		ssl_dhparam /usr/local/ssl/dh4096.pem;

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root  /home/wwwroot/www.domain.com;
        }
}

并重启服务lnmp restart生效即可

再重新回到第一步 检查当前域名的MTA-STS的状态,MTA-STS Configuration - Valid 即为成功。

以上在英文状态设置,如是中文语言类同。

以此记录!

Previous/Next

Say Something!

Leave a Reply