我有一个工作后缀 3.5 中继,其中配置包括:
smtpd_client_restrictions = permit_mynetworks,
reject_unknown_client_hostname,
permit
smtpd_helo_required=yes
smtpd_helo_restrictions = reject_unknown_helo_hostname
reject_invalid_helo_hostname
smtpd_recipient_restrictions = permit_mynetworks,
permit_sasl_authenticated
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated,
reject_unauth_destination
我在日志中看到频繁的身份验证尝试:
2月23日16:53:02 m.example.com postfix/smtpd[30155]:从未知连接[196.190.41.137]
2月23日16:53:17 m.example.com postfix/smtpd[30155]:警告:未知[ 196.190.41.137]:SASL LOGIN 身份验证失败:身份验证失败
2 月 23 日 16:53:19 m.example.com postfix/smtpd[30155]:未知身份验证后失去连接[196.190.41.137]
2 月 23 日 16:53:19 m .example.com postfix/smtpd[30155]:与未知[196.190.41.137]断开连接 ehlo=2 starttls=1 auth=0/1 命令=3/4
我希望这reject_unknown_helo_hostname
会立即拒绝,但它似乎允许他们尝试 SASL 登录。虽然我认为我的 saslauth 相当安全,但我宁愿他们甚至不能尝试。
有没有办法让“未知”主机名更早被拒绝?这将阻止 90% 的登录尝试,因为大多数不断尝试相同登录的僵尸网络都具有未知的主机名。
我的配置中是否有某些内容过于宽松,因此他们始终可以执行 saslauth 步骤?
各种 SMTP 访问限制的应用顺序是什么?
编辑:Wireshark 显示最近的这些 SASL 登录身份验证失败之一发送此消息来启动会话:
EHLO [182.150.23.17]
那么为什么在这件事发生之前没有被拒绝:
2 月 23 日 23:49:42 m.example.com postfix/smtpd[42557]:警告:未知[182.150.23.17]:SASL LOGIN 身份验证失败:身份验证失败
根据我自己的观察和测试,以及https://mailing.postfix.users.narkive.com/AheRlxjc/blocking-access-before-sasl上的类似观察,似乎允许 SMTP 客户端在服务器之前尝试 SASL 身份验证应用各种
smtpd_xxx_restrictions
规则。从上面的链接:
因此,连接客户端可以启动 AUTH 步骤,并在服务器决定是否应拒绝该连接之前获得响应,告诉他们该步骤是否有效(这意味着攻击者将知道他们是否成功猜到了密码!)无论什么原因。拒绝原因可能是客户端未发送有效的主机名,或者位于被阻止的地址范围内,或者因为它们未能通过 SASL 身份验证。但这些条件和拒绝是在尝试 AUTH 之后发生的。
此行为可能是延迟评估 SMTP 访问限制列表的故意结果。我将尝试使用是否会
smtpd_delay_reject=no
改变行为,尽管这被记录为会给某些客户带来问题。可能我不关心这些客户端,因为有问题的 smtp 客户端无论如何都可能是垃圾邮件机器人。上面链接的建议是使用postscreen来过滤掉垃圾邮件发送者。我想我也会调查一下。
编辑:使用
smtpd_delay_reject=no
似乎确实给出了预期的结果。现在,主机名无效的客户端甚至在协商 TLS 会话或尝试进行身份验证之前都会被立即拒绝。我的日志现在显示:postfix/smtpd[64594]:NOQUEUE:拒绝:从未知连接[45.88.90.174]:450 4.7.25客户端主机被拒绝:找不到您的主机名,[45.88.90.174];原型=SMTP
我怀疑我过去没有看到此类错误的原因是,试图暴力破解我的 SASL 身份验证的垃圾邮件机器人在登录失败后立即断开连接,因此它们没有停留足够长的时间而遭到拒绝。这似乎与上面问题中显示的日志一致,登录失败后连接断开:
2 月 23 日 16:53:19 m.example.com postfix/smtpd[30155]:未知身份验证后失去连接[196.190.41.137]
因此,我没有看到
reject
基于无效/未知客户端主机名的预期日志的原因是因为客户端是不良行为者,他们甚至没有等待足够长的时间就被拒绝。