我们注意到sendmailconfiguration中偶尔会出现一个可重复的问题。 这种情况是,我们收到来自互联网的一封邮件,内容是To:列表中的一个用户,To:列表中的其他用户之一有一个DNS问题的域。 在这种情况下,sendmail在坏地址上得到一个DNS错误,并以“主机名称查找失败”退出,所以邮件在我们的队列中停留了几天,并且永远不会传递给我们系统上的收件人。
作为一个例子,如果我用这个To:行发送消息:
To: [email protected], [email protected]
swcp.com是由该服务器处理的本地域名,而“cheeks”具有指向“cheeks @ ebi2”的本地别名。 lovelacesandia.com是一个有问题的非本地域(目前对它的所有查询都会导致SERVFAIL)。 原来的邮件可能有一个这个消息的副本卡在自己的队列,因为他们无法达到lovelacesandia.com。 卡在我的队列中的消息的副本只有一个收件人:
RPFDA:cheeks@ebi2
这里是“sendmail -v -d8-9.5 -qRcheeks”的输出
Running /var/spool/mqueue/t7QHX1uB080255 (sequence 1 of 1) host_map_lookup(swcp.com) => dns_getcanonname(swcp.com, trymx=1) dns_getcanonname: trying swcp.com. (AAAA) dns_getcanonname: trying swcp.com. (A) dns_getcanonname: swcp.com FOUND swcp.com host_map_lookup(swcp.com) => CACHE swcp.com host_map_lookup(ebi2) => dns_getcanonname(ebi2, trymx=1) dns_getcanonname: trying ebi2.swcp.com (AAAA) dns_getcanonname: trying ebi2.swcp.com (A) dns_getcanonname: ebi2.swcp.com FOUND ebi2.swcp.com host_map_lookup(swcp.com) => CACHE swcp.com getmxrr([ebi2.swcp.com], droplocalhost=1) dns_getcanonname(ebi2.swcp.com, trymx=0) dns_getcanonname: trying ebi2.swcp.com. (AAAA) dns_getcanonname: trying ebi2.swcp.com. (A) dns_getcanonname: ebi2.swcp.com cheeks@ebi2... Connecting to ebi2.swcp.com. via smtp... 220 ebi2.swcp.com ESMTP Sendmail 8.15.1/8.14.9; Wed, 26 Aug 2015 11:44:59 -0600 (MDT) >>> EHLO ame1.swcp.com 250-ebi2.swcp.com Hello ame1.swcp.com [216.184.2.118], pleased to meet you 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-8BITMIME 250-SIZE 100000000 250-DSN 250-ETRN 250-STARTTLS 250-DELIVERBY 250 HELP >>> STARTTLS 220 2.0.0 Ready to start TLS >>> EHLO ame1.swcp.com 250-ebi2.swcp.com Hello ame1.swcp.com [216.184.2.118], pleased to meet you 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-8BITMIME 250-SIZE 100000000 250-DSN 250-ETRN 250-AUTH PLAIN LOGIN 250-DELIVERBY 250 HELP >>> MAIL From:<[email protected]> SIZE=1672 250 2.1.0 <[email protected]>... Sender ok host_map_lookup(ebi2.swcp.com) => dns_getcanonname(ebi2.swcp.com, trymx=1) dns_getcanonname: trying ebi2.swcp.com. (AAAA) dns_getcanonname: trying ebi2.swcp.com. (A) dns_getcanonname: ebi2.swcp.com FOUND ebi2.swcp.com >>> RCPT To:<[email protected]> >>> DATA 250 2.1.5 <[email protected]>... Recipient ok 354 Enter mail, end with "." on a line by itself host_map_lookup(swcp.com) => CACHE swcp.com host_map_lookup(swcp.com) => CACHE swcp.com host_map_lookup(lovelacesandia.com) => dns_getcanonname(lovelacesandia.com, trymx=1) dns_getcanonname: trying lovelacesandia.com. (AAAA) dns_getcanonname: trying lovelacesandia.com. (A) dns_getcanonname: trying lovelacesandia.com. (MX) dns_getcanonname: trying lovelacesandia.com.swcp.com (AAAA) FAIL (2) lovelacesandia.com: Name server timeout timeout writing message to ebi2.swcp.com. cheeks@ebi2... Deferred: Name server: ebi2.swcp.com.: host name lookup failure Closing connection to ebi2.swcp.com.
这是在FreeBSD 10.1上的Sendmail 8.15.1。 我怀疑这种情况已经存在了很长时间,但是我们最近才诊断出来。 大部分适合这种情况的信息都是垃圾邮件,所以没人关心。 但偶尔有人发送邮件给大量的人(不使用密件抄送),其中一个地址不好。
如果我们参与了这个虚假的演讲,我会理解为什么我们有一个问题。 我没有得到的是为什么我的sendmail关心标题中的伪造地址To:我们不会尝试传送。
我们有这些特点,我认为可能涉及:
FEATURE(blacklist_recipients) FEATURE(`delay_checks', `friend', `n')
我已经做了testing,他们都被删除,并得到相同的结果。
如果有人对这是什么原因有什么想法,或者如何减轻这一点,我会很感激。 谢谢,
标记
通过一些最有效的实验,sendmail不会碰到头部收件人。 然而,在你的情况下,坏域一定是一个收件人,否则地址将不会通过查询wringer运行? 由于sendmail将SERVFAIL注册到返回SERVFAIL的域名的任何东西,所以不pipe你是最好的select, configurationmilter-regex是一种select:
dnl for sendmail.mc INPUT_MAIL_FILTER(`milter-regex', `S=unix:/var/spool/milter-regex/sock, T=S:30s;R:2m')dnl
在这个守护进程运行并使用这个套接字文件的时候,需要一个milter-regex.conf文件:
discard envrcpt /@lovelacesandia\.com>/i
一个复杂的因素是,如果这些消息作为邮件提交代理被直接发送到sendmail二进制文件,在这种情况下, submit.cfconfiguration将需要被改变来调用一个milter,或者被指示不进行域查找,而是漏斗一切都交给主邮件传输代理,然后可以根据需要进行丢弃。