我收到大量失败的 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。
答案1
这里的会话分为邮件传输代理和saslauthd
:
testhost saslauthd[17177]: do_auth : auth failure:
[user=AzureDiamond] [service=smtp] [realm=] [mech=pam]
[reason=PAM auth error]
默认情况下,您想要的完整日志可能不可用,或者需要在某些日志聚合服务下重建。 (使用 Postfix 时,日志记录也很糟糕saslauthd
;一些日志最终出现在邮件日志中,而其他日志则出现在其他地方。)Sendmail 确实支持自定义系统日志规则;但是,如果客户端仅发出EHLO nurse
、AUTH LOGIN
、QXp1cmVEaWFtb25k
、SHVudGVyMg==
然后失败(通过quit
或 简单地断开连接),则可能不会给任何常用规则集挂钩运行的机会。
当达到 11 (或更高)时,LogLevel
登录会失败,其中包括中继地址:
testhost sendmail[20684]: wA6KuRRJ020684: AUTH failure
(LOGIN): authentication failure (-13) SASL(-13):
authentication failure: checkpass failed,
relay=localhost [127.0.0.1]
这来自sendmail/srvrsmtp.c
并发生在以下时间LogLevel > 9
。或者您可以修补该文件以避免增加LogLevel
,但这可能会带来不同的问题。
限制 SMTP AUTH 的其他方法如下。
pam 限制特定组
调整PAM配置并禁止,SMTP AUTH
除非用户属于特定组;这将防止大多数密码猜测攻击,但如果只有一小部分可预测的用户需要使用,这是可行的SMTP AUTH
:
account required pam_access.so accessfile=/etc/security/smtp_access.conf
然后在/etc/security/smtp_access.conf
+ : ok-sasl : ALL
- : ALL : ALL
然后将用户放入ok-sasl
组中。
隐藏 SMTP AUTH 服务
另一种选择是在 SMTP 之前放置 VPN 或其他东西,这样服务就无法在 Internet 上使用;这应该会减少目前面向公众的服务收到的日志噪音。
pam_tally
我也尝试过,pam_tally2
但这非常适合锁定帐户,包括登录时没有任何明显错误的合法帐户......也许它会更适合您?
答案2
我有一个解决方案,有点帮助。您列出的消息看起来像是来自 /var/log/secure 的消息(至少在 RedHat/Centos 上)。
正如您所注意到的,没有 IP,因此您无法对这些条目做太多事情。
但是,查看 /var/log/maillog,您会发现如下所示的条目:
Apr 11 13:58:48 alpha sendmail[23712]: x3BKwjij023712: [118.24.45.165] did not issue MAIL/EXPN/VRFY/ETRN during connection to MSA
这些连接尝试进行(或两次)身份验证、失败并断开连接。这些与 /var/log/secure 中的 pam 消息之间几乎有 100% 的相关性。
我使用这些作为fail2ban 监狱的输入。一次出现就会被禁止,因为许多自动系统探测使用完整的 C 类(或 /24,如果您愿意)地址空间,并且需要相当长的时间才能再次看到该地址。
我目前有某人/事物似乎正在使用僵尸网络,IP 分散在各处。它们似乎只会在几天后重复,有时甚至不会重复。你最终会得到很多fail2ban 条目。但总比什么都不做要好。
答案3
可悲的是,答案似乎是使用 sendmail 和 cyrus-sasl,没有控制。 Sendmail 似乎将信息发送到 sasl,而 cyrus-sasl 对此不执行任何操作,同样,sendmail 在身份验证失败后也不执行任何操作。
Thrig 的上述答案可能对其他人有用,也许有一天有人会看到这一点,并提供更好的答案。