如何在密码错误后延迟 sshd 登录

如何在密码错误后延迟 sshd 登录

当输入错误密码或登录尝试失败时,如何延迟 SSH 的重试响应。我希望延迟时间比平时多 2-3 秒。

我在 sshd_config 文件中找不到任何选项来实现相同的功能。

所以有人可以告诉我我该怎么做吗?

答案1

如果您阻止所有用户甚至阻止 root,您可以将此行添加到/etc/pam.d/password-auth/etc/pam.d/sshd,在 auth 部分添加此行以阻止所有用户 5 分钟:

auth        required      pam_tally2.so  file=/var/log/tallylog deny=3 even_deny_root unlock_time=300

现在将以下行添加到帐户部分:

account     required      pam_tally2.so

最后重启 sshd,它应该可以正常工作。之后,你可以使用以下命令检查错误登录:pam_tally2你将获得以下输出:

# pam_tally2
Login           Failures Latest failure     From
userxy            4    12/10/13 09:52:31  192.168.100.100

答案2

您可以尝试添加

auth       optional   pam_faildelay.so  delay=250000

到 sshd 的 pam 配置文件(在 Debian 系统中通常为/etc/pam.d/sshd)250000 的延迟值为 0.25 秒。

答案3

IP表可以调整规则以实现您想要实现的目标。

假设:您的嵌入式 Linux 已编译了 netfilter 模块,并且您了解防火墙概念并且之前使用过 iptables。假定您具有 root 访问权限。如果您具有 sudo 权限,请在命令前面附加 sudo。

iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name DEFAULT --rsource

语法不需要冗长,但该行指示防火墙警察 iptables 您想要将规则附加到现有的 INPUT 链上。-p tcp 参数表示此规则仅适用于 TCP 数据包。其余大部分参数都依赖于 -m 选项,它代表匹配并告诉 iptables 该规则适用于与我们正在寻找的特定属性匹配的数据包。在这里,规则将应用于表示开始前往 TCP 端口 22 的新连接的数据包。如果数据包与这些属性匹配,iptables 将在临时列表中记录远程主机的地址。

iptables -N LOG_AND_DROP

上述规则实际上将使用不同的链执行操作,并且为了附加它,我们需要首先创建我们所做的链(例如 LOG_AND_DROP)

iptables -A INPUT  -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 20 --hitcount 4 --name DEFAULT --rsource -j LOG_AND_DROP

此规则指示 iptables 查找与上一条规则的参数匹配的数据包,这些数据包也来自已添加到监视列表中的主机。如果 iptables 发现数据包来自这样的主机,它将更新该主机的“上次看到”时间戳。--seconds 20 和 --hitcount 4 参数用于进一步缩小我们要阻止的主机范围 — 如果主机在 60 秒内尝试连接四次或更多次,则它匹配规则的该部分,我们将跳转 (-j) 到 LOG_AND_DROP 链。

iptables -A INPUT  -p tcp -m tcp --dport 22 -j ACCEPT

从技术上讲,此规则对于 INPUT 链来说不是必需的,因为默认设置为对所有不匹配的数据包采用策略 ACCEPT。如果您恰好构建了限制性防火墙(例如默认拒绝),则可实现故障安全。


在收到@singh 的反馈后进行补充。我没有意识到状态已被驱逐,转而采用更具技术性的 conntrack(连接跟踪)模块

例如,而不是:

-m state --state RELATED

-m conntrack --ctstate RELATED

相关内容