SSH日志我不明白:超过最大的身份validation尝试

我试图解密所有的SSH日志(为了给他们合理的标签与logstash)。 但是我发现了一个我不明白的案例:

Oct 23 07:43:47 sshd[59830]: Connection from 74.194.6.5 port 60126 on 213.67.100.148 port 22 Oct 23 07:43:51 sshd[59830]: error: maximum authentication attempts exceeded for root from 74.194.6.5 port 60126 ssh2 [preauth] Oct 23 07:43:51 sshd[59830]: Disconnecting authenticating user root 74.194.6.5 port 60126: Too many authentication failures [preauth] 

如何达到最大的authentication尝试而不给任何authentication尝试的迹象?

通常我会在“最大权限”行出现之前得到一些东西。

 Oct 23 08:54:06 sshd[62392]: Failed keyboard-interactive/pam for [...] Oct 23 08:52:41 sshd[49690]: Failed publickey for [...] 

但不总是。

请注意,我没有login的问题..

根据sshdconfiguration手册页

MaxAuthTries
指定每个连接允许的最大validation次数。 一旦失败的次数达到这个值的一半,就会logging更多的失败。 默认值是6。

正如你所看到的,这个限制在每个连接的基础上是有效的,并不是所有的尝试都被logging下来。 您还可以select在日志中需要多less信息

LogLevel的
给出从sshd(8)logging消息时使用的详细级别。 可能的值包括:QUIET,FATAL,ERROR,INFO,VERBOSE,DEBUG,DEBUG1,DEBUG2和DEBUG3。 默认是INFO。 DEBUG和DEBUG1是等价的。 DEBUG2和DEBUG3分别指定更高级别的debugging输出。 使用DEBUG级别logging违反了用户的隐私,不build议使用。

在OpenSSH /日志logging和故障排除中,您可以查看日志的示例,您可以在其中看到拒绝部分与您显示的部分类似:

 ... Mar 19 11:11:10 server sshd[54798]: Failed password for root from 122.121.51.193 port 59928 ssh2 Mar 19 11:11:10 server sshd[54798]: error: maximum authentication attempts exceeded for root from 122.121.51.193 port 59928 ssh2 [preauth] Mar 19 11:11:10 server sshd[54798]: Disconnecting authenticating user root 122.121.51.193 port 59928: Too many authentication failures [preauth] 

总结起来,authentication尝试失败并不总是发送到日志。 可以在httpd的conf文件中configurationbefaviour。

而现在,从我不太高兴的将ssh暴露给互联网的经历中,让我给出一些一般性的build议:

  • 请不要允许用户/密码访问。 您应该只使用私钥/公钥对。 那里有很多坏人。
  • 无论如何,root不应该被允许通过SSH进入。
  • 想想安装fail2ban或类似的东西,可以禁止IP访问您的系统

当ssh客户端尝试基于密钥的login并提供超过MaxAuthTries无效密钥时,会触发该错误消息。 SSH服务器将中断连接。 这可能是由完全没有有效密钥的(恶意)客户端,或只是具有多个不同密钥对的有效用户引起的,并且在有效密钥可以交换之前达到MaxAuthTries号码。 当发生这种情况时,连接将被终止,甚至不会到达提供/尝试替代login方法的阶段。

(在默认的日志级别)ssh服务器不logging失败的密钥get交换,因此错误消息“ error: maximum authentication attempts exceeded for ... ssh2 [preauth] ”似乎没有任何事先的身份validation尝试日志文件。

你可以很容易地模拟:

 for n in $(seq 1 10 ) ; do ssh-keygen -b 2048 -t rsa -f /tmp/sshkey-$n -q -N "" ; done ssh -v -i /tmp/sshkey-1 -i /tmp/sshkey-2 -i /tmp/sshkey-3 ... user@host 

debug1:下一个validation方法:publickey
debug1:提供RSA公钥:/ tmp / sshkey- 1
debug2:我们发送了一个publickey包,等待回复
debug1:可以继续的authentication:publickey,gssapi-keyex,gssapi-with-mic
debug1:提供RSA公钥:/ tmp / sshkey- 2
debug2:我们发送了一个publickey包,等待回复
debug1:可以继续的authentication:publickey,gssapi-keyex,gssapi-with-mic
debug1:提供RSA公钥:/ tmp / sshkey- 3
debug2:我们发送了一个publickey包,等待回复
debug1:可以继续的authentication:publickey,gssapi-keyex,gssapi-with-mic
debug1:提供RSA公钥:/ tmp / sshkey- 4
debug2:我们发送了一个publickey包,等待回复
debug1:可以继续的身份validation:publickey,gssapi-keyex,gssapi-with-mic
debug1:提供RSA公钥:/ tmp / sshkey- 5
debug2:我们发送了一个publickey包,等待回复
debug1:可以继续的身份validation:publickey,gssapi-keyex,gssapi-with-mic
debug1:提供RSA公钥:/ tmp / sshkey- 6
debug2:我们发送了一个publickey包,等待回复
从hostn端口22:2收到断开: authentication失败太多
validation失败

MaxAuthTries的默认值是6

sshd [19032]:错误:从10.9.8.7端口login超过最大authentication尝试54956 ssh2 [preauth]
sshd [19032]:断开连接:authentication失败太多[preauth]

将sshd_config LogLevel增加到VERBOSE将生成稍微有意义的额外日志事件:

sshd [19271]:10.9.8.8端口22上的10.9.8.7端口58823的连接
sshd [19271]:失败的公钥从10.9.8.7端口58823loginssh2:RSA SHA256:QGnu … fpY
sshd [19271]:失败的公钥从10.9.8.7端口58823 ssh2:RSA SHA256:cjje … dDo
sshd [19271]:失败的公钥从10.9.8.7端口58823 ssh2login:RSA SHA256:IIWe … d1M
sshd [19271]:失败的公钥从10.9.8.7端口58823 ssh2:RSA SHA256:xrQs … Et0
sshd [19271]:失败的公钥从10.9.8.7端口58823loginssh2:RSA SHA256:0Zln … UI4
sshd [19271]:失败的公钥从10.9.8.7端口58823 ssh2login:RSA SHA256:hhsj … 7Q4
sshd [19271]:错误:从10.9.8.7端口login超过最大authentication尝试58823 ssh2 [preauth]
sshd [19271]:断开连接:authentication失败太多[preauth]