![如何在密码错误后延迟 sshd 登录](https://linux22.com/image/622550/%E5%A6%82%E4%BD%95%E5%9C%A8%E5%AF%86%E7%A0%81%E9%94%99%E8%AF%AF%E5%90%8E%E5%BB%B6%E8%BF%9F%20sshd%20%E7%99%BB%E5%BD%95.png)
当输入错误密码或登录尝试失败时,如何延迟 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