在我的 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 也会监听所有接口
答案1
我将按照如下方式进行:
修改你的 sshd 配置:
- 编辑 sshd 配置文件,通常位于
/etc/ssh/sshd_config
。 - 寻找选项
ListenAddress
。默认情况下,它被注释掉(#ListenAddress
)。 - 取消注释该行并添加您想要使用的接口的 IP 地址。
如果适用,配置防火墙
此外,我会使用系统防火墙限制 SSH 访问,我假设您使用 UFW,但这应该适用于任何防火墙。
- 拒绝所有传入流量使用
sudo ufw default deny incoming
(请注意,这会阻止所有内容,因此请确保您不会丢失与服务器的连接!) - 明确允许 SSH你的网卡上的流量(我假设这个例子中是 eno0)
sudo ufw allow OpenSSH on eno0
(OpenSSH
您也可以使用您的端口,例如22
)
您也可以进行修改/etc/host.deny
,/etc/hosts.allow
但我不确定您是否可以在界面级别定义规则。
正如我所见,您已经完成了第 1 步,但它没有帮助您,我猜想,您没有正确重新启动 ssh。请注意,有两种不同的服务:
ssh.service
sshd.service
“区别”在于这里解释。
也许,有些事情搞砸了。当您检查服务器的状态时,您可以看到它从什么时候开始运行的。因此,请确保您的服务器确实重新启动了。status
(请注意,我有一个别名sudo systemctl status
)
╭─user@host ~
╰─$ status sshd.service
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2024-04-18 11:42:44 CEST; 7s ago
Docs: man:sshd(8)
man:sshd_config(5)
Process: 686 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
Main PID: 687 (sshd)
Tasks: 1 (limit: 9255)
Memory: 1.6M
CPU: 63ms
CGroup: /system.slice/ssh.service
└─687 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"
您还可以使用 测试您的 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 中,也会包含此文件。