配置 SPF、MX 和 Postfix 以从 SMTP 中继发送电子邮件
Configure SPF, MX and Postfix for sending email from SMTP relay
在搜索了一段时间并阅读了很多示例、案例 and/or 在 Google 和 Whosebug 上的回答之后,我没有找到解决问题的方法。我对 SPF 和中继的概念越来越困惑,所以我在这里问我的问题希望得到正确的答案并永远理解一次!
总结:
- 我有一个当前的主服务器,上面安装了一个邮件服务器(postfix + dovecot + vimbadmin),在域 exampleA.com.
- 我有一个用于新网站的新服务器,有一个新域 exampleB.com。
我的目标是新网站 (XXXX[AT]exampleB.com) 的所有电子邮件都必须使用主服务器发送和接收。
知道主服务器必须发送exampleB.com的邮件,我修改了exampleB.com的SPF条目以允许主服务器发送exampleB.com的邮件。
邮件发送正常,我收到邮件也正常,但是当我在 Gmail 中查看电子邮件的原始来源时:
Return-Path: <root@FQDN_NEW_SERVER>
Received: from mail.exampleA.com (FQDN_MAIN_SERVER [IP_MAIN_SERVER])
by mx.google.com with ESMTPS id f64si6392532wma.52.2016.05.20.04.59.06
for <xxxxxxx@gmail.com>
(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
Fri, 20 May 2016 04:59:06 -0700 (PDT)
Received-SPF: neutral (google.com: IP_MAIN_SERVER is neither permitted nor denied by best guess record for domain of root@FQDN NEW SERVER) client-ip=IP MAIN SERVER;
Authentication-Results: mx.google.com;
spf=neutral (google.com: IP MAIN SERVER is neither permitted nor denied by best guess record for domain of root@FQDN NEW SERVER) smtp.mailfrom=root@IP MAIN SERVER
Received: from FQDN NEW SERVER (REVERSEDNS_NEW_SERVER [IP_NEW_SERVER])
by mail.exampleA.com (Postfix) with ESMTPA id 67C8C60421;
Fri, 20 May 2016 13:59:06 +0200 (CEST)
Received: by FQDN_NEW_SERVER (Postfix, from userid 0)
id A1949A07AB; Fri, 20 May 2016 13:58:57 +0200 (CEST)
我越来越困惑我必须修改哪个 SPF,哪个 MX 指向谁..
编辑:当我的主服务器尝试连接到端口 25 上的新服务器时,我的连接似乎超时了,但是使用 telnet 似乎没问题..
Edit2:我知道我的 DNS 和我的反向 DNS 不一样。我的服务器是 public 云中的一个实例,我无法更改我的反向,因为它是在虚拟中配置的路由器。
Edit3:我在主服务器后缀日志中有这个错误:
May 20 16:25:40 ns33rgdrg4 postfix/smtpd[2956]: NOQUEUE: reject_warning: RCPT from csikxdqzdqzdqzdqzdqzress.com[IP_NEW_SERV]: 450 4.1.7 <root@FQDN_NEW_SERVER>: Sender address rejected: unverified address: connect to FQDN_NEW_SERV[IP_NEW_SERV]:25: Connection timed out; from=<root@FQDN_NEW_SERV> to=<myownmail@owndomain.com> proto=ESMTP helo=<FQDN_NEW_SERV>
这是服务器的当前配置:
主服务器
Dovecot + Postfix configured
Domain : exampleA.com
DNS :
- exampleA.com. MX mail.exampleA.com
- mail.exampleA.com A IP_MAIN_SERVER
- exampleA.com. SPF "v=spf1 a mx ptr include:spf4.newsletterpartner.net ~all"
新服务器
已安装 Postfix,通常为什么 relayhost = mail。exampleA.com
Domain : exampleB.com
DNS :
- exampleB.com. MX mail.exampleA.com
- exampleB.com. SPF "v=spf1 mx:mail.exampleA.com mx:exampleA.com include:mail.exampleA.com include:exampleA.com ~all"
我的新域的 MX 指向我的主服务器的 MX(我不知道这样做是否好)
这是新服务器的一部分 /etc/postfix/main.cf :
myhostname = FQDN_NEW_SERVER
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
relayhost = mail.exampleA.com
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options =
我们可以看到新服务器有他的postfix relayhost 指向我主服务器的MX。
不知道我的新服务器的MX是必须指向自己(知道自己的postfix配置了relayhost),还是必须直接配置到主服务器,由主服务器发送电子邮件。
注意:我有这个错误:No SPF records found for mail.exampleA.com
当我检查一个网站寻找 MX 和 SPF 时,但是 exampleA.com 有一个 MX,而不是邮件。exampleA.com
这几天让我发疯了...在此先感谢您的小帮助:)
此致,
朱利安 Q.
我想你打错了,请你确认一下..
Domain : exampleB.com
DNS :
- exampleB.com. MX mail.exampleA.com
- exampleA.com. SPF "v=spf1 mx:mail.exampleA.com mx:exampleA.com include:mail.exampleA.com include:exampleA.com ~all"
我认为在底部ExampleA.com。应该读作 ExampleB.com.
你的 SPF 记录应该是
"v=spf1 mx ~all"
由于您的 MX 记录是 mail.exampleA.com,您只需在 SPF 中指定即可。
我认为您的超时问题可能与 DoveCot 有关,DoveCot 的连接时间很长,超过 18 秒。我不是 linux 人,所以我真的不能告诉你在哪里寻找超时设置。
您可以通过向 mailtest@unlockthienbox.com
发送电子邮件来测试,而不是使用 gmail 进行测试,所有基本身份验证结果都会显示(SPF、DKIM 等)
好的,我想终于解决了,谢谢你@henry!
在文件 /etc/postfix/main.cf 中,myorigin
是 /etc/mailname,这是我的 FQDN。
正如他所说,由于 Google 正在检查 "record for domain of root@FQDN_NEW_SERVER",我认为他必须检查 root@DOMAIN,而不是 FQDN。 Google 也说 "IP_MAIN_SERVER is neither permitted nor denied by guest" 所以我没有将 MX 主服务器放在我的新服务器 SPF 中,而是将主服务器 IP 放在 IPV4 中。
我将 myorigin
从 FQDN_NEW_SERVER 更改为 DOMAIN_NEW_SERVER,并在我的新服务器 SPF 中指定了我的中继主机 IPV4。在检查了您的方法和 gmail 后,现在一切似乎都正常了!
这是我的基础设施的最终配置。
主服务器,中继 SMTP
Dovecot + Postfix configured
Domain : exampleA.com
DNS :
- exampleA.com. MX mail.exampleA.com
- mail.exampleA.com A IP_MAIN_SERVER
- exampleA.com. SPF "v=spf1 a mx ptr include:spf4.newsletterpartner.net ~all"
新服务器,转发邮件到主服务器
Domain : exampleB.com
DNS :
- exampleB.com. MX mail.exampleA.com
- exampleB.com. SPF "v=spf1 ip4:IP_MAIN_SERVER -all"
新服务器/etc/postfix/main.cf
myhostname = FQDN_NEW_SERVER
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
#myorigin = /etc/mailname <-- OLD CONF with FQDN_NEW_SERVER in
myorigin = exampleB.com
mydestination =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
relayhost = mail.exampleA.com
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options =
Gmail 原始来源
Received: from MX_MAIN_SERVER (FQDN_MAIN_SERVER [IP_MAIN_SERVER])
by mx.google.com with ESMTPS id s5si18916426wme.105.2016.05.16.02.06.09
for <FROM_EMAIL_ADDRESS>
(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
Mon, 16 May 2016 02:06:09 -0700 (PDT)
Received-SPF: pass (google.com: domain of RECEIVER_EMAIL_ADDRESS designates IP_MAIN_SERVER as permitted sender) client-ip=IP_MAIN_SERVER;
Authentication-Results: mx.google.com;
spf=pass (google.com: domain of RECEIVER_EMAIL_ADDRESS designates IP_MAIN_SERVER as permitted sender) smtp.mailfrom=FROM_EMAIL_ADDRESS
希望它能对我以外的人有所帮助。
再次感谢大家!
朱利安 Q
在搜索了一段时间并阅读了很多示例、案例 and/or 在 Google 和 Whosebug 上的回答之后,我没有找到解决问题的方法。我对 SPF 和中继的概念越来越困惑,所以我在这里问我的问题希望得到正确的答案并永远理解一次!
总结:
- 我有一个当前的主服务器,上面安装了一个邮件服务器(postfix + dovecot + vimbadmin),在域 exampleA.com.
- 我有一个用于新网站的新服务器,有一个新域 exampleB.com。
我的目标是新网站 (XXXX[AT]exampleB.com) 的所有电子邮件都必须使用主服务器发送和接收。
知道主服务器必须发送exampleB.com的邮件,我修改了exampleB.com的SPF条目以允许主服务器发送exampleB.com的邮件。
邮件发送正常,我收到邮件也正常,但是当我在 Gmail 中查看电子邮件的原始来源时:
Return-Path: <root@FQDN_NEW_SERVER>
Received: from mail.exampleA.com (FQDN_MAIN_SERVER [IP_MAIN_SERVER])
by mx.google.com with ESMTPS id f64si6392532wma.52.2016.05.20.04.59.06
for <xxxxxxx@gmail.com>
(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
Fri, 20 May 2016 04:59:06 -0700 (PDT)
Received-SPF: neutral (google.com: IP_MAIN_SERVER is neither permitted nor denied by best guess record for domain of root@FQDN NEW SERVER) client-ip=IP MAIN SERVER;
Authentication-Results: mx.google.com;
spf=neutral (google.com: IP MAIN SERVER is neither permitted nor denied by best guess record for domain of root@FQDN NEW SERVER) smtp.mailfrom=root@IP MAIN SERVER
Received: from FQDN NEW SERVER (REVERSEDNS_NEW_SERVER [IP_NEW_SERVER])
by mail.exampleA.com (Postfix) with ESMTPA id 67C8C60421;
Fri, 20 May 2016 13:59:06 +0200 (CEST)
Received: by FQDN_NEW_SERVER (Postfix, from userid 0)
id A1949A07AB; Fri, 20 May 2016 13:58:57 +0200 (CEST)
我越来越困惑我必须修改哪个 SPF,哪个 MX 指向谁..
编辑:当我的主服务器尝试连接到端口 25 上的新服务器时,我的连接似乎超时了,但是使用 telnet 似乎没问题..
Edit2:我知道我的 DNS 和我的反向 DNS 不一样。我的服务器是 public 云中的一个实例,我无法更改我的反向,因为它是在虚拟中配置的路由器。
Edit3:我在主服务器后缀日志中有这个错误:
May 20 16:25:40 ns33rgdrg4 postfix/smtpd[2956]: NOQUEUE: reject_warning: RCPT from csikxdqzdqzdqzdqzdqzress.com[IP_NEW_SERV]: 450 4.1.7 <root@FQDN_NEW_SERVER>: Sender address rejected: unverified address: connect to FQDN_NEW_SERV[IP_NEW_SERV]:25: Connection timed out; from=<root@FQDN_NEW_SERV> to=<myownmail@owndomain.com> proto=ESMTP helo=<FQDN_NEW_SERV>
这是服务器的当前配置:
主服务器
Dovecot + Postfix configured
Domain : exampleA.com
DNS :
- exampleA.com. MX mail.exampleA.com
- mail.exampleA.com A IP_MAIN_SERVER
- exampleA.com. SPF "v=spf1 a mx ptr include:spf4.newsletterpartner.net ~all"
新服务器
已安装 Postfix,通常为什么 relayhost = mail。exampleA.com
Domain : exampleB.com
DNS :
- exampleB.com. MX mail.exampleA.com
- exampleB.com. SPF "v=spf1 mx:mail.exampleA.com mx:exampleA.com include:mail.exampleA.com include:exampleA.com ~all"
我的新域的 MX 指向我的主服务器的 MX(我不知道这样做是否好)
这是新服务器的一部分 /etc/postfix/main.cf :
myhostname = FQDN_NEW_SERVER
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
relayhost = mail.exampleA.com
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options =
我们可以看到新服务器有他的postfix relayhost 指向我主服务器的MX。
不知道我的新服务器的MX是必须指向自己(知道自己的postfix配置了relayhost),还是必须直接配置到主服务器,由主服务器发送电子邮件。
注意:我有这个错误:No SPF records found for mail.exampleA.com
当我检查一个网站寻找 MX 和 SPF 时,但是 exampleA.com 有一个 MX,而不是邮件。exampleA.com
这几天让我发疯了...在此先感谢您的小帮助:)
此致,
朱利安 Q.
我想你打错了,请你确认一下..
Domain : exampleB.com DNS : - exampleB.com. MX mail.exampleA.com - exampleA.com. SPF "v=spf1 mx:mail.exampleA.com mx:exampleA.com include:mail.exampleA.com include:exampleA.com ~all"
我认为在底部ExampleA.com。应该读作 ExampleB.com.
你的 SPF 记录应该是
"v=spf1 mx ~all"
由于您的 MX 记录是 mail.exampleA.com,您只需在 SPF 中指定即可。
我认为您的超时问题可能与 DoveCot 有关,DoveCot 的连接时间很长,超过 18 秒。我不是 linux 人,所以我真的不能告诉你在哪里寻找超时设置。
您可以通过向 mailtest@unlockthienbox.com
发送电子邮件来测试,而不是使用 gmail 进行测试,所有基本身份验证结果都会显示(SPF、DKIM 等)
好的,我想终于解决了,谢谢你@henry!
在文件 /etc/postfix/main.cf 中,myorigin
是 /etc/mailname,这是我的 FQDN。
正如他所说,由于 Google 正在检查 "record for domain of root@FQDN_NEW_SERVER",我认为他必须检查 root@DOMAIN,而不是 FQDN。 Google 也说 "IP_MAIN_SERVER is neither permitted nor denied by guest" 所以我没有将 MX 主服务器放在我的新服务器 SPF 中,而是将主服务器 IP 放在 IPV4 中。
我将 myorigin
从 FQDN_NEW_SERVER 更改为 DOMAIN_NEW_SERVER,并在我的新服务器 SPF 中指定了我的中继主机 IPV4。在检查了您的方法和 gmail 后,现在一切似乎都正常了!
这是我的基础设施的最终配置。
主服务器,中继 SMTP
Dovecot + Postfix configured
Domain : exampleA.com
DNS :
- exampleA.com. MX mail.exampleA.com
- mail.exampleA.com A IP_MAIN_SERVER
- exampleA.com. SPF "v=spf1 a mx ptr include:spf4.newsletterpartner.net ~all"
新服务器,转发邮件到主服务器
Domain : exampleB.com
DNS :
- exampleB.com. MX mail.exampleA.com
- exampleB.com. SPF "v=spf1 ip4:IP_MAIN_SERVER -all"
新服务器/etc/postfix/main.cf
myhostname = FQDN_NEW_SERVER
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
#myorigin = /etc/mailname <-- OLD CONF with FQDN_NEW_SERVER in
myorigin = exampleB.com
mydestination =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
relayhost = mail.exampleA.com
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options =
Gmail 原始来源
Received: from MX_MAIN_SERVER (FQDN_MAIN_SERVER [IP_MAIN_SERVER])
by mx.google.com with ESMTPS id s5si18916426wme.105.2016.05.16.02.06.09
for <FROM_EMAIL_ADDRESS>
(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
Mon, 16 May 2016 02:06:09 -0700 (PDT)
Received-SPF: pass (google.com: domain of RECEIVER_EMAIL_ADDRESS designates IP_MAIN_SERVER as permitted sender) client-ip=IP_MAIN_SERVER;
Authentication-Results: mx.google.com;
spf=pass (google.com: domain of RECEIVER_EMAIL_ADDRESS designates IP_MAIN_SERVER as permitted sender) smtp.mailfrom=FROM_EMAIL_ADDRESS
希望它能对我以外的人有所帮助。
再次感谢大家!
朱利安 Q