📜  如何在 Linux 中查找所有失败的 SSH 登录尝试?

📅  最后修改于: 2021-10-28 02:45:43             🧑  作者: Mango

SSH 服务器通过不安全的网络为我们提供了两个不受信任的主机之间的安全加密通信通道。不过,我们不能肯定地说它是安全的。它通常很容易受到多种密码猜测和暴力破解攻击。

要启用和启动 SSH 服务器,可以通过以下方式执行命令:

sudo systemctl enable ssh
sudo systemctl start ssh

要检查服务器的运行状态,请执行以下命令。

sudo systemctl status ssh

如何在 Linux 中查找所有失败的 SSH 登录尝试

Linux 中的 rsyslog 守护程序会跟踪每个登录 SSH 服务器的计划并将其记录到日志文件中。我们可以使用 cat 和 grep 命令轻松查看此文件。

可能有多种原因导致登录尝试失败。下面列出了三个最常见的原因:

  • 错字:用错误的密码绑定错误
  • 密码错误:尝试输入错误密码
  • 蛮力攻击:使用字典,结合常用用户名和密码进行攻击

使用下面给出的两个命令之一,我们可以查看所有失败的登录尝试:

grep "Failed password" /var/log/auth.log

如何在 Linux 中查找所有失败的 SSH 登录尝试

cat /var/log/auth.log | grep "Failed password"

如何在 Linux 中查找所有失败的 SSH 登录尝试

要查看其他信息,请使用以下命令:

egrep "Failed|Failure" /var/log/auth.log
# It works the same way as grep -E does 

使用以下命令仅从这些日志中过滤掉 IP 地址。这将显示 IP 地址列表以及从 IP 地址生成日志的次数。

grep "Failed password" /var/log/auth.log | awk '{print $11}' | uniq -c | sort -nr

如何在 Linux 中查找所有失败的 SSH 登录尝试

该命令的作用如下:

  1. 使用带有 /var/log/secure 或 /var/log/auth.log 文件的 grep 命令列出“密码失败”
  2. 使用 awk 和 cut 命令打印 IP/主机名
  3. 使用 sort 命令格式化数据(可选)
  4. 使用 uniq 命令打印 SSH 登录失败的总尝试次数

同样,您也可以将认证失败日志打印到终端:

grep "authentication failure" /var/log/auth.log | awk '{ print $13 }' | cut -b7-  | sort | uniq -c

如何在 Linux 中查找所有失败的 SSH 登录尝试

或者,我们也可以使用 systemd 守护进程使用 journalctl 命令查看日志。

journalctl _SYSTEMD_UNIT=ssh.service | egrep "Failed|Failure"

如何在 Linux 中查找所有失败的 SSH 登录尝试

检查设置

最佳做法是检查服务器登录尝试失败的设置。您可以查看 /etc/pam.d/common-auth 文件,该文件与系统内的 Linux Pluggable Authentication Modules (PAM) 一起使用。

cat /etc/pam.d/password-auth

此文件中的设置控制临时锁定帐户之前登录尝试失败的阈值。您甚至可以调整此临时锁定的时间。

以下代码段将使 PAM 在登录尝试失败 3 次后暂时锁定帐户。锁定将持续 300 秒,即 5 分钟。

auth required pam_tally2.so deny=3 unlock_time=300

如何在 Linux 中查找所有失败的 SSH 登录尝试

偶尔会出现登录失败的情况,但仍然必须确定登录服务器的失败尝试。应立即识别频繁访问您服务器的 IP,并在防火墙内阻止该 IP,以防止对您的服务器的任何潜在攻击。