我在 VMWare VM 中运行带有 Sendmail 的 Ubuntu 10.04。在我的 mail.log 文件中,有数千个“连接被拒绝”错误,我想消除它们。每秒都会出现多个错误,我确信这个问题导致我们的一些合法电子邮件无法发送。
例子:
Jul 13 08:20:02 mail sm-msp-queue[28076]: s6C3K6e0008595: to=root, ctladdr=smmsp (115/126), delay=1+08:59:56, xdelay=00:00:00, mailer=relay, pri=8940371, relay=[127.0.0.1] [127.0.0.1], dsn=4.0.0, stat=Deferred: Connection refused by [127.0.0.1]
Jul 13 08:20:02 mail sm-msp-queue[28076]: s6C3K19D008593: to=smmsp, delay=1+08:59:58, xdelay=00:00:00, mailer=relay, pri=8941647, relay=[127.0.0.1] [127.0.0.1], dsn=4.0.0, stat=Deferred: Connection refused by [127.0.0.1]
Jul 13 08:20:02 mail sm-msp-queue[28076]: s6D2K2lX023270: to=postmaster, delay=09:59:56, xdelay=00:00:00, mailer=relay, pri=9331939, relay=[127.0.0.1] [127.0.0.1], dsn=4.0.0, stat=Deferred: Connection refused by [127.0.0.1]
Jul 13 08:20:02 mail sm-msp-queue[28076]: s6C7e3Cp010618: to=postmaster, delay=1+04:39:47, xdelay=00:00:00, mailer=relay, pri=9754324, relay=[127.0.0.1] [127.0.0.1], dsn=4.0.0, stat=Deferred: Connection refused by [127.0.0.1]
Jul 13 08:20:02 mail sm-msp-queue[28076]: s6BNe474006871: to=root, ctladdr=smmsp (115/126), delay=1+12:39:58, xdelay=00:00:00, mailer=relay, pri=9930371, relay=[127.0.0.1] [127.0.0.1], dsn=4.0.0, stat=Deferred: Connection refused by [127.0.0.1]
Jul 13 08:20:02 mail sm-msp-queue[28076]: s6CMK1lb021417: to=root, delay=13:59:57, xdelay=00:00:00, mailer=relay, pri=10410356, relay=[127.0.0.1] [127.0.0.1], dsn=4.0.0, stat=Deferred: Connection refused by [127.0.0.1]
Jul 13 08:20:02 mail sm-msp-queue[28076]: s6BLK2Bk005641: to=postmaster, delay=1+14:59:56, xdelay=00:00:00, mailer=relay, pri=10571717, relay=[127.0.0.1] [127.0.0.1], dsn=4.0.0, stat=Deferred: Connection refused by [127.0.0.1]
Jul 13 08:20:02 mail sm-msp-queue[28076]: s6BK01i9004244: to=postmaster, delay=1+16:20:00, xdelay=00:00:00, mailer=relay, pri=10926911, relay=[127.0.0.1] [127.0.0.1], dsn=4.0.0, stat=Deferred: Connection refused by [127.0.0.1]`
我读到过一个潜在问题是 sendmail 没有监听 25 端口,因此我运行了这个命令
# sudo netstat -a -n -p |grep 0.0.0.0:25
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 1137/sendmail: MTA:`
我也尝试过改变这些线条:
DAEMON_OPTIONS('Name=MTA, Addr=127.0.0.1, Port=smtp')dnl`
DAEMON_OPTIONS('Name=MSP, Addr=127.0.0.1, Port=submission')dnl`
在我的 sendmail.mc 中并重建 sendmail 配置,但是当我这样做时我根本无法发送电子邮件。
我还附加了我的主机文件的副本,因为我不能 100% 确定它是否正确。
127.0.0.1 example.org localhost localhost.localdomain mail.example.org.localdomain`
10.1.1.204 example.org mail.example.org mail.example.ci.oh.us mail-server`
我们的邮件服务器“mail.example.org”处理来自我们的网络服务器“example.org”的所有中继邮件,这部分总是让我感到困惑,但是当我接手管理这些服务器时就是这样设置的。
感谢您的帮助,如果您需要我发布其他内容,请告诉我。我会尽我所能修复这些错误。
答案1
您是否搜索过 sendmail 日志rejecting connections ...
?
当系统平均负载过高时,Sendmail 可能会拒绝接受传入连接。
检查“客户端队列”中的消息数量(mailq -Ac
) - 在某些情况下,此类问题是由客户端队列中的大量垃圾邮件引起的,例如由于托管/黑客入侵的“垃圾邮件友好”网页。
如何以人类格式读取巨大的客户端队列?
您可以在 sendmail.mc 文件中使用以下行将“拒绝平均负载”从默认值 12 增加:
define(`confREFUSE_LA',`20')
Nick Christenson 撰写的“Sendmail 性能调优”(第 139 页)讨论了在专用非 Linux 服务器上将其设置为 12 到 20 之间,在专用 Linux 服务器上将其设置为更高。[Linux 以不同的方式计算平均负载]
Sendmail-8.14.0 引入了将其设置为 DaemonPortOptions 参数的选项。您可以使用它为环回(127.0.0.1)、内部和公共 IP 地址设置不同的 rejectionLA。
答案2
看起来邮件被推迟了,所以可能是队列中的一些邮件被反复重试。请查看您的队列 (mailq) 以查看是否是这种情况。
您可以查看队列中的单个消息:转到队列目录,您将看到每封电子邮件的两个文件,一个以 df* 开头,另一个以 qf* 开头。它们组合在一起构成了整封邮件(一个包含有关队列详细信息的信息,另一个包含电子邮件内容...是的,故意简化的解释 :-) )。如果您查看详细信息并决定要从队列中删除该消息,只需删除同一队列 ID 的两个文件即可。或者,您可以将所有文件移动到另一个目录,从而将它们从队列中删除,然后您可以在闲暇时查看并移回任何您真正想要尝试重新发送的文件(我这样做从未遇到过队列 ID 问题...但自然而然地,您会通过这样做介入正常的 sendmail 过程)。
如果它们是合法的并且需要重试,也许您可能需要调整 sendmail 配置中的重试设置,以便减少重试次数(频率和在放弃并生成 NDR 之前重试的总时间)。我将把查看这些设置的练习留给您(在配置本身中很容易找到,或者使用基本的网络搜索)。
当然,确定消息是什么是第一步,这样您就可以看到是否有东西填满了您的队列,或者只是重试发送错误的电子邮件等。
至于通过邮件服务器进行中继的 Web 服务器,这并不罕见。通常,只有一个邮件出口点可以更轻松地管理 SPF 记录等内容。当然,采取正常预防措施以确保您的 Web 服务器不会受到攻击并使您成为垃圾邮件发送者(因为您的邮件服务器会中继其发送的任何内容)是必要的。
最后,我通常认为这些重试/连接影响合法电子邮件的唯一方式是,如果你正在处理一个足够大的队列,以至于合法的电子邮件正在等待重试。通常情况并非如此,因为新电子邮件将首先在队列中尝试……但是,如果由于正常的合法原因而推迟,那么它必须通过正常的队列重试。
补充:查看日志条目时,它会提供队列 ID。例如,如果“s6C3K6e0008595”条目仍在队列中,您将拥有一个可以检查的 qfs6C3K6e0008595 和 dfs6C3K6e0008595 文件。