最近,我开始收到来自 Gmail 的错误:
主机 gmail-smtp-in.l.google.com[142.250.110.27] 表示:550-5.7.25 [XXXX] 发送此邮件的 IP 地址未设置 550-5.7.25 PTR 记录,或者相应的正向 DNS 条目未指向发送 IP。根据政策,Gmail 不接受来自缺少 PTR 记录的 IP 的邮件 550-5.7.25。有关更多信息,请转到 550-5.7.25 https://support.google.com/mail/answer/81126#ip-practices 550-5.7.25 要了解有关 Gmail 发件人政策的更多信息,请转到 550 5.7.25 https://support.google.com/mail/answer/81126. r9-20020a0560001b8900b0033b09244271si4920918wru.914 - gsmtp(回复DATA命令结束)
我查看了这一点,意识到运行在 IP YYYY 上的邮件服务器实际上是从 IP 地址 XXXX 发送电子邮件。我的服务器有两个面向公众的 IP 地址。其中一个 - YYYY - 是配置了 PTR 记录和反向 DNS 和 A 记录的 IP 地址。XXXX 用于不相关的服务。
现在 PTR 记录和反向 DNS 都已正确设置。我想知道的是,为什么 postfix 选择在 IP XXXX 上发送大多数电子邮件,而它实际上应该在 YYYY 上发送?这将解决 Gmail 报告的错误。
我之前看过这个问题 -如何让 Postfix 使用另一个 IP 地址?- 我已经按照说明设置了绑定地址,但这似乎并没有解决问题。Postfix 当然听在这个 IP 上,但它似乎并不影响电子邮件的发送地址。
此邮箱会向各种虚拟域发送电子邮件,而不仅仅是分配给该邮箱的域。例如,该邮箱本身有域名 abc.com 和电子邮件,例如[电子邮件保护]发送成功。但是,邮件服务器也会发送邮件[电子邮件保护]。这些电子邮件通过 IP 地址 XXXX 发出,这导致了所有麻烦。我怀疑 postfix 出于某种原因认为这一定是 def.com 的正确 IP。
我正在尝试让 postfix 始终在 YYYY ip 上发送。我查看了 sender_dependent_default_transport_maps 以了解不同域的不同选项。这似乎也不起作用。
这是我的master.cf
smtp unix - - n - - smtpd
-o smtp_bind_address=Y.Y.Y.Y
-o myhostname=mail.abc.com
Y.Y.Y.Y:smtp inet n - n - - smtpd
-o smtp_bind_address=Y.Y.Y.Y
-o myhostname=mail.abc.com
domain3 unix - - n - - smtp
-o smtp_bind_address=Y.Y.Y.Y
-o smtp_helo_name=mail.abc.com
submission inet n - n - - smtpd
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtp_bind_address=Y.Y.Y.Y
-o smtp_helo_name=abc.com
-o myhostname=abc.com
pickup unix n - n 60 1 pickup
cleanup unix n - n - 0 cleanup
qmgr unix n - n 300 1 qmgr
tlsmgr unix - - n 1000? 1 tlsmgr
rewrite unix - - n - - trivial-rewrite
bounce unix - - n - 0 bounce
defer unix - - n - 0 bounce
trace unix - - n - 0 bounce
verify unix - - n - 1 verify
flush unix n - n 1000? 0 flush
proxymap unix - - n - - proxymap
proxywrite unix - - n - 1 proxymap
smtp unix - - n - - smtp
relay unix - - n - - smtp
showq unix n - n - - showq
error unix - - n - - error
retry unix - - n - - error
discard unix - - n - - discard
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - n - - lmtp
anvil unix - - n - 1 anvil
scache unix - - n - 1 scache
spamassassin unix - n n - - pipe
user=spamd argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/bin/spamc -f -u spamd -e /usr/lib/dovecot/dovecot-lda -f ${sender} -d ${recipient}
policy-spf unix - n n - 0 spawn
user=nobody argv=/usr/bin/policyd-spf
domain3 在 /etc/postfix/sender_transport 中设置
@def.com domain3:
在 main.cf 中我们有以下内容:
sender_dependent_default_transport_maps = hash:/etc/postfix/sender_transport
由于某种原因,来自[电子邮件保护]没问题 - 它选择了正确的 IP YYYY 此 IP 地址也恰好与盒子的 A 记录匹配。第二个 IP XXXX 用于其他不相关的服务,那么为什么 postfix 坚持选择 XXXX 来发送任何非 abc.com 域名的电子邮件?我显然错过了一些关于虚拟邮箱和别名的重要信息?我应该注意到,在添加第二个公共 IP 之前,一切都运行良好。
我也尝试过设置 smtp 绑定地址
http://www.postfix.org/postconf.5.html#smtp_bind_address
smtp_bind_address = Y.Y.Y.Y
inet_interfaces = all
我尝试将 inet_interfaces 设置为各种设置,但都无济于事。
我如何才能强制 postfix 在 YYYY 上发送电子邮件,并且只在那个 IP 地址上发送电子邮件。谢谢大家!:)
答案1
好的,我找到了问题。事实证明,smtp_bind_address 和 inet_interfaces 字段中的单个 IP 地址确实有效。
问题在于 wireguard 接口设置的 iptables 规则不正确,同样在该盒子上,使用了 XXXX ip。删除该规则后,postfix 会通过正确的 IP 发送出去。
谢谢评论 :)