我收到大量失败的 SMTP 登录尝试。我真的很想防御它,但是这些尝试的记录很差。
我正在使用 sendmail 8.15、cyrus-sasl 2.1.26。SASL 设置是最简单的方法,默认使用 pam_unix 进行身份验证。
我经常收到这样的日志消息:
saslauthd[8292]: pam_unix(smtp:auth): check pass; user unknown
saslauthd[8292]: pam_unix(smtp:auth): authentication failure; logname= uid=0 euid=0 tty= ruser= rhost=
saslauthd[8292]: DEBUG: auth_pam: pam_authenticate failed: Authentication failure
saslauthd[8292]: do_auth : auth failure: [user=colby] [service=smtp] [realm=] [mech=pam] [reason=PAM auth error]
这意味着,虽然我知道正在发生虚假登录尝试,但我真的无能为力,比如让 fail2ban 监禁他们。
我真的无法判断问题是否是 Sendmail 正在告诉 pam_unix 事情,并且它正在转储它们,或者 sendmail 是否没有告诉 pam 正在尝试的位置。
我想要的是使用它来自的 IP 地址记录身份验证尝试,所以如果有很多失败,fail2ban 可以监禁 IP。
这里的会话在邮件传输代理和以下之间分开
saslauthd
:您想要的完整日志可能默认不可用,或者需要在某些日志聚合服务下重建。(使用 Postfix 时,日志记录也很糟糕
saslauthd
;一些日志最终出现在邮件日志中,而其他日志则出现在其他地方。) Sendmail 确实支持自定义系统日志规则;但是,如果客户端仅发出EHLO nurse
,AUTH LOGIN
,QXp1cmVEaWFtb25k
,SHVudGVyMg==
然后失败(使用 aquit
或简单地断开连接),则可能不会给任何通常的规则集挂钩运行机会。当设置
LogLevel
为 11(或更高)时,会出现包含中继地址的登录失败:这来自
sendmail/srvrsmtp.c
并发生在LogLevel > 9
. 或者您可以修补该文件以避免增加LogLevel
,但这可能会引入不同的问题。其他限制 SMTP AUTH 的方法如下。
pam 限制到特定组
调整 PAM 配置并禁止
SMTP AUTH
,除非用户属于特定组;这将防止大多数密码猜测攻击,但如果您的用户只有一小部分可预测的子集需要使用,这是可行的SMTP AUTH
:然后在
/etc/security/smtp_access.conf
然后将用户放入
ok-sasl
组中。隐藏 SMTP AUTH 服务
另一种选择是在 SMTP 前面放置一个 VPN 或其他东西,这样服务就无法在 Internet 上使用;这应该可以减少如今面向公众的服务所收到的日志噪音。
pam_tally
我也尝试过
pam_tally2
,但这非常适合锁定帐户,包括已登录且没有任何明显错误的合法帐户……也许它对您会更好?我有一个有点帮助的解决方案。您列出的消息看起来像来自 /var/log/secure 的消息(至少在 RedHat/Centos 上)。
正如您所注意到的,没有 IP,因此您无法对这些条目做太多事情。
但是,查看 /var/log/maillog,您会发现以下条目:
这些是尝试 AUTH(或两个)、失败和断开连接的连接。这些与 /var/log/secure 中的 pam 消息之间几乎有 100% 的相关性。
我将这些用作fail2ban 监狱的输入。一次出现就会被禁止,因为许多自动探测系统使用完整的 C 类(或 /24,如果您愿意)地址空间,并且您需要很长时间才能再次看到该地址。
我目前有某人/某事似乎正在使用僵尸网络,IP 分散在各处。它们似乎只在几天后重复,有时从不重复。你最终会得到很多 fail2ban 条目。但总比什么都不做要好。
可悲的是,答案似乎是 sendmail 和 cyrus-sasl 无法控制。Sendmail 似乎将信息发送到 sasl,而 cyrus-sasl 对此不做任何事情,同样 sendmail 在身份验证失败后也不做任何事情。
上面 Thrig 的答案可能对其他人有用,也许有一天有人会看到这一点,并提供更好的答案。