我的邮件服务器在阻止一些试图远程登录到我们邮件服务器的攻击者时出现问题。但我无法阻止它,即使我们通过 IP 阻止,IP 也会不断变化。似乎他正在尝试远程登录,而不是通过正常的 smtp 事务。他们无法进入我们的电子邮件服务器,但这是每秒一次的事务。有什么办法可以阻止/阻止它吗?以下是错误消息:
81.198.214.48 [0968] 16:14:01 Connected, local IP=xx.xx.xx.xx:25
81.198.214.48 [0968] 16:14:01 >>> 220 mymailserver.com ESMTP IceWarp 11.0.1.2; Fri, 13 Feb 2015 16:14:01 +0800
81.198.214.48 [0968] 16:14:02 <<< EHLO ylmf-pc
81.198.214.48 [0968] 16:14:02 >>> 250-mymailserver.com Hello ylmf-pc [81.198.214.48], pleased to meet you.
81.198.214.48 [0968] 16:14:03 <<< AUTH LOGIN
81.198.214.48 [0968] 16:14:03 >>> 334 VXNlcx5hbWU6
81.198.214.48 [0968] 16:14:04 <<< aGFua3M=
81.198.214.48 [0968] 16:14:04 >>> 334 UGFzcxdvcmQ6
81.198.214.48 [0968] 16:14:04 <<< ODg4ODg4
81.198.214.48 [0968] 16:14:24 >>> 535 5.7.8 Authentication credentials invalid
81.198.214.48 [0968] 16:14:24 *** <> <> 0 0 00:00:00 INCOMPLETE-SESSION
81.198.214.48 [0968] 16:14:24 Disconnected
答案1
那个特殊且无效的 EHLO 参数“ylmf-pc”是广泛传播的垃圾邮件僵尸网络“PushDo”(有时也称为“Cutwail”)的已知指纹。如您的记录所示,它主要尝试猜测密码以通过您的服务器进行身份验证和发送邮件。阻止它向您的服务器发送垃圾邮件或通过您的服务器发送垃圾邮件很容易,因为它具有三个特点:
它实际上在收到目标 MTA 发送的 SMTP 横幅之前发送了 EHLO 命令,任何值得使用的现代 MTA(例如,可能不是 Exchange 或 QMail)都可以检测到这种行为,这是不受欢迎的纯垃圾邮件客户端的明确迹象。没有合法的 SMTP 客户端会表现出这种“快言快语”的行为,因为它破坏了基本的 SMTP 功能。
字符串“ylmf-pc”不是有效的 EHLO 参数,因为它不是完全合格的主机名或括号括起来的 IP 地址文字。任何合法的 SMTP 客户端都不会使用该参数。与 fast-talk 行为一样,任何像样的 MTA 都可以配置为拒绝使用本质上无效的 EHLO 参数的客户端的邮件。
几乎所有受 PushDo/Cutwail 感染的成员都通过其“CBL”组件列在免费的 zen.spamhaus.org DNSBL 中。即使您无法阻止快速说话或使用虚假 EHLO 参数,您也应该能够根据 DNSBL 进行阻止,而使用 Zen 列表进行阻止几乎普遍是一个不错的选择。
因此,使用配置良好的 MTA 来阻止您的 MTA 接受任何垃圾邮件应该相对容易,但对于您似乎正在使用的“IceWarp”MTA,如何做到这一点最好向供应商询问。解决可能涉及的纯流量问题更加困难,因为单个 PushDo 僵尸可能会尝试打开数百个同时会话,并在一天内多次返回,而任何一天都可能有数十个不同的僵尸主动尝试攻击一台服务器。缓解这种情况的选项可以从 MTA 中获取;例如,可以将最新版本的 Postfix 设置为单方面丢弃快速通话客户端(使用其“postscreen”功能),而不是礼貌地在整个 SMTP 对话过程中配合它们,并且可以对 Sendmail 进行类似配置。为了进一步减少问题,您可以使用日志嗅探工具(如 fail2ban)(在之前的回答中描述)来阻止来自特定 IP 的流量。如果您选择该选项,请注意 PushDo 感染往往会持续很多天,因此您不应该让块过期时间超过一周。
答案2
攻击者的 helo 名称无效(ylmf-pc
),因为它既不是 FQDN,也不能通过 DNS 解析,因此您可以在发送无效的 EHLO 后阻止他,从而轻松地提前摆脱它。
例如,使用后缀执行此操作,请执行以下操作:
smtpd_helo_restrictions = permit_mynetworks, check_helo_access reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, reject_unknown_helo_hostname, permit
但还请阅读有关smtpd_helo_restrictions
然后,您可以在一些无效查询进入后使用 fail2ban 阻止他。fail2ban 已经包含了一个 postfix 示例,但我不知道它是否还包含 HELO 错误的规则。您可以根据需要添加它们。
jail.conf
:
[postfix-ddos]
enabled = true
port = smtp,ssmtp
filter = postfix-helo
logpath = /var/log/mail.log
maxretry = 5
filter.d/postfix-helo
:
[INCLUDES]
before = common.conf
[Definition]
failregex = reject: RCPT from (.*)\[<HOST>\]: 504 5.5.2
ignoreregex =
这完全足以阻止那些小偷。你可以调低 fail2ban 中的 maxretry 设置来立即阻止攻击,但我不建议这样做。
答案3
CutWail 攻击的另一个问题是,虽然很容易在端口 25 上阻止,因为通常这是 MTA->MTA 流量,但在端口 587 上就更难解决,因为合法客户可能会尝试连接该端口。虽然 IP 可能在许多 RBL 上,例如 SpamHaus 和 SpamRats,但由于客户使用动态 IP 进行连接、共享连接等,因此仅仅因为列出了 IP,并不意味着连接不好。但是,为了有效,暴力攻击通常需要大量连接,您可以通过限制连续尝试来缓解这种情况,特别是当横幅 (HELO/EHLO) 是“ylmf-pc”时,但您应该知道,无论您使用什么工具来执行此操作,都要确保阻止是暂时的。虽然僵尸网络很快就会选择不同的 HELO,但同时阻止在端口 587 上显示该 EHLO 的所有尝试可能是最好的选择。