![如何禁止尝试使用 ssh 以 root 身份登录的 IP](https://linux22.com/image/586453/%E5%A6%82%E4%BD%95%E7%A6%81%E6%AD%A2%E5%B0%9D%E8%AF%95%E4%BD%BF%E7%94%A8%20ssh%20%E4%BB%A5%20root%20%E8%BA%AB%E4%BB%BD%E7%99%BB%E5%BD%95%E7%9A%84%20IP.png)
我已经阻止使用 ssh 以 root 身份登录,所以我知道任何尝试这样做都是恶意的。我知道他们不会成功(sshd 不会允许这样做),但我仍然想立即禁止相关 IP。我该怎么做?
我正在运行 Gentoo Linux,并且已经在运行 fail2ban。我不想因为一次登录尝试失败而禁止所有人,因此简单地将 fail2ban 尝试设置为 1 不是一个选项。Root 是我希望应用此立即禁止的唯一帐户。
答案1
我设置了两个不同的 Fail2Ban 规则:
如果他们尝试使用无效用户名,则会在第一次尝试时被永久禁止。我没有很多人以这种方式登录,也没有人以这种方式被禁止;但如果有很多人登录,这可能是一个支持问题。在我的系统上,Root 不是有效的 ssh 登录名。
我使用的是 FreeBSD 系统,因此您可能需要稍微修改一下此规则。在 filter.d 目录中创建一个 ssh-invaliduser.local 文件:
failregex = ^%(__prefix_line)s[iI](?:llegal|nvalid) user .* from <HOST>\s*$
在文件中照常设置此规则的选项
jail.local
。第二条规则禁止在 10 分钟内输错 10 次密码的尝试。没有人能以平均每分钟 1 个密码的速度破解密码。
答案2
如果你使用标准 sshd 日志输出,并且你的系统正在运行 tcp 包装器tcpd,请尝试以下操作:
首先添加此行/etc/hosts.deny:
sshd: /tmp/root_ban.list
然后安排 cron 运行以下命令:
awk '/invalid user root from/{print $13}' /var/log/ssh_auth.log | sort -u > /tmp/root_ban.list
如果命令的 awk 部分输出不起作用,请调整条件部分:无效的 root 用户以匹配您的 sshd 日志。您可能还需要更改 awk 捕获的字段编号。在我的日志中,ip 位于第 13 位 ($13)。
并且,为了避免阻止您,您可以在 /etc/hosts.allow 文件中添加受信任的 IP:
sshd: 123.123.123.123 222.222.222.222