我的一个朋友之前曾进行过此设置,但在重新安装时丢失了。
基本上发生的事情是,每当有人直接地以 root 身份通过 SSH 连接到我的服务器,他们的 IP 会被阻止,您必须使用自定义用户名登录并使用“sudo”才能获得 root 权限。
不幸的是,搜索这个问题的常用关键字只会教我如何禁用 root 登录,这不完全是我想要的。
我的服务器运行在最新的 Debian 版本上。
答案1
SSHd 不禁止 IP 地址。每当遇到身份验证失败时,它都会在日志中添加一个条目,并继续执行。然而,其他软件可能会在事后读取这些日志并根据其规则禁止 IP。用于此类任务的最常见守护进程是fail2ban。
Fail2ban 适用于监狱。每个监狱都与一个服务、一个日志文件相关联,并遵循一组特定的规则。每当一个IP进入监狱规则的范围时,它就会立即被列入黑名单一段时间(也在监狱规则中指定)。以下是 SSH 服务的 fail2ban 监狱的示例(在/etc/fail2ban/jail.conf
我的案例中设置):
[ssh]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
多亏了这条规则,如果任何 IP 在 10 分钟内登录失败超过 3 次,fail2ban 守护进程会将其添加到 iptables 链中,导致丢弃来自该 IP 的所有传入网络数据包。
现在,如果您考虑以下监狱......
[ssh]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 1
findtime = 60
bantime = -1
...在这种情况下,任何未通过身份验证的 IP 将被永久禁止。请注意,通过使用自定义过滤器,完全有可能仅针对 root 登录。另请记住,默认情况下禁用 root 登录是有充分理由的:任何人都不应直接连接到 root 帐户。使用用户名登录,然后sudo
在需要时使用要安全得多:这需要入侵者找到用户名和密码,而 root 用户名已经很出名了。
答案2
听起来像是“/etc/ssh/sshd_config”的配置问题。将以下行更改为
PermitRootLogin no
到
PermitRootLogin yes
并重启ssh服务