这些“单点”smtp连接失败来自哪里?

我正在运行一个基于postfix的邮件服务器。 有很多这样的连接失败:

Transcript of session follows. Out: 220 hostname.tld ESMTP Postfix In: . Out: 502 5.5.2 Error: command not recognized In: Out: 500 5.5.2 Error: bad syntax Session aborted, reason: lost connection 

这些连接来自不同的IP,但是在大多数情况下,每个IP的大部分是十分之几到几百个尝试。

什么导致这些连接? 如果这是“敲门”的病毒,蠕虫或者僵尸networking,那么为什么每个主机有这么多次呢? 或者是发送一个单点某种functiontesting,我的服务器反应不正确? 再次,多次尝试是没有意义的。 而且它远离任何DoS规模。

也许你们中的一些人知道那里发生了什么?

该点用于在SMTP协议中终止电子邮件的消息:空行(CR,LF),后跟单点,再次使用CR和LF换行。 但是这显然不是这种情况。

要找出这些SMTP客户端是否只是僵尸networking或合法的发送者,你可以看看他们的IP的PTR,他们都被logging。 如果PTR是来自提供者的通用的,例如192-0-2-1.broadband.customers.example.com 。 那么你真的可以忽略它并使用fail2ban来阻止它们。

HELO应该匹配PTR,至less这是最好的做法。 但是,如果它们不相似,它又可能是一个僵尸networking。

在另一种情况下,有人可能正在对服务器进行扫描,并探测TLS协议和密码。


为了在这样的请求后禁止客户端,你可以使用fail2ban,这个请求在太多的请求后会暂时阻塞一个IP。

filter.d/postfix-syntax.conf

 [INCLUDES] before = common.conf [Definition] failregex = reject: RCPT from (.*)\[<HOST>\]: 502 5.5.2 reject: RCPT from (.*)\[<HOST>\]: 500 5.5.2 ignoreregex = 

并将其添加到您的jail.conf

 [postfix-syntax] enabled = true port = smtp,ssmtp,submission filter = postfix-syntax logpath = /var/log/mail.log maxretry = 10 

如果您已将您的邮件服务器暴露给Internet,则希望大多数连接来自垃圾邮件和其他非法发件人。

我会考虑匹配fail2ban中任何错误的拒绝。 合法的发件人应该很less产生错误,如果被禁止的话,会稍后再试。 我做了一些令人讨厌的事情来怀疑垃圾邮件发送者,而且由于合法发件人除了传送延迟之外还有其他问题已经有数年了。

我使用一些testing来检查发件人的合法性:

  • IP没有在zen.spamhaus.org列出。 (包括广泛的dynamicIPselect)
  • IP有一个通过rDNS的DNS PTR 。 很less合法邮件没有PTRlogging,并且IP地址的rDNS几乎总是通过。
  • HELO / EHLO命令中的名称是经过rDNS的完全限定域名(FQDN)。 除了一个大公司之外,这几乎总是通过。 通常这个名称和IP地址一样。
  • 来自PTRlogging和HELO命令的名称直接通过SPF HELOvalidation或通过其父域。 没有SPFlogging的域名也会得到通过,但不会得到可信度。 这阻止了使用大型组织的域名来识别自己的垃圾邮件。

我想使用DKIM进行validation,但很大一部分发件人没有在DNS中正确发布公钥。

如果在连接仍处于打开状态时无法运行这些testing,请不要popup消息,除非您可以validation发件人是否未被欺骗。 (我很欣赏联邦调查局,联合国,银行等所有的钱,但他们还没有交付。)