如何阻止 Sendmail 从 IPv6 而不是 IPv4 发送邮件

如何阻止 Sendmail 从 IPv6 而不是 IPv4 发送邮件

今天我注意到 Gmail 将从我的服务器收到的所有邮件发送到垃圾邮件文件夹。我检查了邮件标题,发现以下内容:

Authentication-Results: mx.google.com;
       spf=neutral (google.com: 2001:4ba0:cafe:........ is neither permitted nor denied by best guess record for domain of [email protected]) [email protected]

因此,看起来 Sendmail 是从 IP6 地址而不是 IPv4 地址发送邮件,并且 IPv6 没有 SPF 和 PTR 记录。如何强制 Sendmail 从 IPv4 发送邮件?

谢谢。

答案1

不要禁用 IPv6。它不再是可选的,如果没有它,您将无法与某些人通信。

相反,修复您的 SPF 记录,以便它传递来自您的 IPv6 地址的邮件。

答案2

在您的 sendmail.mc 中添加:

CLIENT_OPTIONS(`Family=inet')dnl

然后重建 sendmail.cf 并重新启动 sendmail。在 Debian 中,您可以通过运行 >sendmailconfig 来执行此操作。在 CentOS 中,您可以运行 /etc/mail/make,然后运行 ​​service sendmail restart。其他系统有其他方法可以执行此操作。

感谢您发布此信息,这确实让我走上了正确的道路。但是,我尝试了这种方法,但仍然没有用。顺便说一句,我们收到了来自 Google 邮件服务器的拒绝,因为我们没有 IPv6 的反向 DNS 条目。这肯定与我们的 VPS 配置有关,而不是我们的 DNS 配置,因为数字反向 DNS 条目必须发送给拥有 IP 地址块的人,也就是我的 VPS。

无论如何,据我所知,没有办法专门关闭使用 IPv6 作为客户端的 sendmail。我想到的一个稍微有点棘手的解决方案是指定 IPv6 选项以使用 IPv4 地址的 IPv6 兼容格式。

例如,如果您的 IPv4 地址是 1.2.3.4,请指定:

CLIENT_OPTIONS(`Family=inet6,Addr=::ffff:1.2.3.4')dnl

对我来说很有魅力,而且据我所知,这还没有在任何地方记录过。

答案3

在您的sendmail.mc添加中:

CLIENT_OPTIONS(`Family=inet')dnl

然后重建sendmail.cf并重新启动 sendmail。在 Debian 中,您可以通过运行 来执行此操作sendmailconfig。在 CentOS 中,您运行/etc/mail/make后跟service sendmail restart。其他系统有其他方法来执行此操作。

答案4

只是想分享一下,对我来说(现在是 2018 年),有效的方法是在我的本地绑定的 named.conf 中指定 filter-aaaa-on-v4 yes;https://kb.isc.org/docs/aa-00576(除了那里提到的 filter-aaaa-on-v6 指令在我看来并不存在)。可能命名 -4 也可以工作。这是在 centos7[.5.1804] 上使用 sendmail 和 bind 的。

我尝试了所有其他方法,包括这里的答案,gmail 都退回了我的邮件,并显示可怕的“此消息不符合 IPv6 发送指南”,因为事实上,我的 ipv6 地址没有反向地址(isp 很难)。

其他不起作用的东西:confBIND_OPTS',在 submit.mc 和 sendmail.mc 中定义(-use_inet6')(又名 ResolverOptions),根据https://lists.debian.org/debian-user/2004/09/msg01410.html。我不知道为什么不行。

更改 /etc/gai.conf(根据https://centosfaq.org/centos/etcgaiconf-fails-to-prefer-ipv4-over-ipv6-for-nfs/),大概是因为 sendmail 使用的是 gethostbyname/addr,而不是 getaddrinfo,而 gai.conf 只影响后者。

哦,我确实有另一个解决方案:从源代码编译 sendmail 并在该级别禁用 v6。不幸的是,似乎没有等效的运行时指令。

相关内容