在我的 Linux 机器中,我有 10 个可用的网络接口,例如 eth0、eth0.67、eth0.70、eth0.97 等。
当我运行命令nc 160.48.249.170 22
进行检查时,我得到如下结果:
root@icon:~# nc 160.48.249.170 22
SSH-2.0-OpenSSH_8.2
在我的系统中,eth0.97 将 inet 作为160.48.249.170
. 所以这里 SSH 正在监听接口 eth0.97。
与上面类似,SSH 正在侦听所有可用的 10 个接口。如何禁用或启用某一特定接口来侦听 SSH?
在 中/etc/ssh/sshd_config
,下面是配置
#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
但我进行了如下更改,只监听一个接口并重新启动 ssh。
#Port 22
#AddressFamily any
ListenAddress 160.48.199.186
#ListenAddress ::
但经过上述更改后,ssh 正在侦听所有接口
我将按如下方式进行:
修改您的 sshd 配置:
/etc/ssh/sshd_config
.ListenAddress
。默认情况下,它被注释掉 (#ListenAddress
)。配置您的防火墙(如果适用)
此外,我会使用系统防火墙限制 SSH 访问,我假设您使用 UFW,但这应该适用于任何防火墙。
sudo ufw default deny incoming
(请注意,这会阻止一切,因此请确保您不会丢失与服务器的连接!)sudo ufw allow OpenSSH on eno0
(OpenSSH
您也可以使用您的端口,例如22
)您也可以修改
/etc/host.deny
and/etc/hosts.allow
但我不确定您是否可以在接口级别定义规则。正如我所见,您已经执行了步骤 1,但它对您没有帮助,我认为您没有正确重新启动 ssh。请注意,有两种不同的服务:
ssh.service
sshd.service
这里解释一下“区别” 。
也许,有什么乱七八糟的事情。当您检查服务器的状态时,您可以看到它从何时开始运行。因此,请确保您的服务器确实重新启动。(请注意,我有一个别名
status
tosudo systemctl status
)您还可以使用 测试您的 SSH 配置
sudo sshd -t -f /etc/ssh/sshd_config
。如果没有错误,它不会抱怨并且不会给出任何输出。编辑
我想在这里参考@Martin 的评论。
/etc/ssh/sshd_config.d/
查找可能影响行为的其他配置文件是明智的做法。是否考虑目录可以从
Include /etc/ssh/sshd_config.d/*.conf
/etc/ssh/sshd_config 中的行(应该在顶部)看出。(这应该是默认的)注意:路径也可以不同。例如,
Include /etc/ssh/example/example.conf
如果该行位于 sshd_conf 中,还将包含此文件。