我MaxAuthTries
在我的 Linux 机器上设置为 1。然后我尝试ssh
从本地网络上的另一台机器进入我的 Linux 机器,但它没有说“ Too many authentication failures
”。
我假设这是因为我在设置时遇到了一些失败,并且它们仍然计入总数。
该man
页面说:
MaxAuthTries
指定每个连接允许的最大身份验证尝试次数。一旦失败次数达到此值的一半,就会记录更多失败。默认值为 6。
什么被认为是连接?这是否意味着您只能MaxAuthTries
从某个 IP 地址获取?这是指TCP连接吗?如何终止连接以便我可以创建一个新连接并ssh
再次尝试?
在 SSH 的情况下,连接是与sshd
的 TCP 端口(通常是端口 22)建立的连接。Omcesshd
停止接受进一步的身份验证尝试,它关闭连接,此时连接完成。
在用户尝试进行身份验证之前,SSH 协议需要协商加密和其他协议选项、建立会话密钥和交换主机密钥。因此,每个新连接都需要一些重要的工作:来自多个来源的 SSH 连接尝试风暴当然可以用于对服务器进行 DoS。
身份验证尝试是当前在sshd
配置中启用的任何身份验证方法的一次尝试。例如:
前两个可能会导致您遇到的情况:如果您设置MaxAuthTries
为一个并且启用了 Kerberos/GSSAPI 身份验证,它可能会在您尝试密码身份验证之前耗尽一次尝试。同样,如果您的 SSH 客户端有可用的身份验证密钥,但您尚未将公钥添加到~/.ssh/authorized_keys
目标用户的目标系统中,则公钥身份验证尝试将耗尽您的单次尝试,您甚至无法尝试密码认证。
pam_unix
,通常处理密码身份验证的 PAM 库,默认情况下在身份验证尝试失败后强制延迟两秒。
如果您的主要威胁是互联网中其他受感染系统上的密码猜测蠕虫和机器人,那么减少 MaxAuthTries 可能是一个糟糕的举措:因为机器人不会厌倦,它总是会重新连接并重试。每次尝试都需要您花费一些 CPU 容量来进行 SSH 协议协商。您首先要确保机器人不会成功,其次是机器人将尽可能多地在现有连接上浪费时间,而您的成本最低。允许通过一个连接进行多次身份验证尝试但回答......非常......缓慢......将完全做到这一点。
这也是为什么sshd
即使完全禁用密码认证也会向客户端请求密码的原因:提示完全是假的,无论输入什么密码,客户端都会被拒绝。但是客户无法确定地知道这一点。
当然,如果您允许在一个连接上进行过多的身份验证尝试,如果 bot 程序员实施了超时以限制这种“tar-pit 防御”的有效性,bot 可能最终会从其一侧终止连接。
从广义上讲,连接被定义为以特定用户身份进行连接的任何尝试。
pam_tally
or命令pam_tally2
在这里很有用,具体取决于您使用的发行版。以下命令将显示某个用户有多少次失败:
pam_tally --user=username
Run Code Online (Sandbox Code Playgroud)
要为特定用户重置它:
pam_tally --reset --user=username
Run Code Online (Sandbox Code Playgroud)
对于所有用户:
pam_tally --reset
Run Code Online (Sandbox Code Playgroud)
要验证它是否已重置:
pam_tally --user=username
Run Code Online (Sandbox Code Playgroud)
执行该命令pam_tally
或pam_tally2
不执行任何选项将显示尝试失败或被锁定的所有用户。pam_tally2
如果您有这样的情况,请务必更改为。
归档时间: |
|
查看次数: |
32681 次 |
最近记录: |