我是云计算新手,计划使用 Oracle Cloud 提供的永久免费计算服务来获取公共 IP 地址以运行网站。作为一项基本安全措施,我要求我的机器不要在默认端口 22 上侦听 SSH,因为这太容易被嗅探,但需要将其交换到一个新端口,我会保密这个新端口,但我将其称为 NEWSHPORT。这在使用公共 IP 地址时尤为重要。我的问题是,在通过 ssh 进入机器后,我验证防火墙(默认情况下)已关闭,因此它允许所有流量进入,并且我首选的端口 NEWSHPORT 未被任何其他服务使用。我将侦听端口交换到新端口,重新启动 ssh 服务,验证我是否有一条允许此流量进入我的子网的 Oracle 云网站的入口规则。我尝试使用新端口进行 ssh,但它会像其他端口一样超时。默认端口 22 反而显示连接被拒绝。
这个问题与以下问题类似但不相同: 更改 ssh 端口导致拒绝连接
我错过了什么?
创建计算实例:默认放置图像:Canonical Ubuntu 18.04 形状:VM.Standard.A1.Flex 4 核 OCPU,24 GB 内存默认网络保存私人 ssh 密钥默认书籍卷创建实例
等待配置完成复制其公共 IP 地址:1.2.3.4
SSH 到默认端口 22
ssh -i C:\path\to\saved\key\ssh-key-2021-12-14.key -p 22 [email protected]
新的 ECDSA 指纹。保存了吗?是的,SSH 成功了。
在机器上:检查防火墙
$ sudo ufw status
不活动(这意味着允许所有流量通过)
检查哪些端口已被使用:
UDP *:111
UDP *:932
TCP *:111 (LISTEN)
UDP *:111
UDP *:932
TCP *:111 (LISTEN)
UDP :68
UDP :53
UDP :53
UDP :53 (LISTEN)
TCP :22 (LISTEN)
TCP :22 (LISTEN)
:22 -> mypc:myport (my ssh connection)
我在 SSH 上监听的首选端口是开放的/未被其他程序使用。
更改 ssh 监听端口。并设置为首选端口整数。出于安全原因,我将保留此整数的私密性,但我将用字符串表示他的号码:NESSHPORT
$ sudo vi /etc/ssh/sshd_config
Port NEWSSHPORT
重新启动 ssh 服务
$ sudo systemctl restart sshd
检查 ssh 现在是否正在监听这个新的 NEWSHPORT:
$ sudo lsof -i -P -n
现在这些是存在的:
sshd root IPv4 TCP *:NEWSSHPORT (LISTEN)
sshd root IPv6 TCP *:NEWSSHPORT (LISTEN)
仔细检查防火墙是否仍然不在线:
$ sudo ufw status
Status: inactive
因此确认防火墙未打开,因此所有内容都可以通过。确认 ssh 现在正在 IPv4 和 IPv6 上的新端口 NEWSHPORT 上监听 TCP 流量。
退出机器:
$ exit
检查您的 Oracle 云子网是否允许新端口上的流量进入:转到计算实例 > 实例信息选项卡 > 主 VNIC > 单击子网链接以查看其子网。安全列表 > 默认安全列表。单击它。验证 NEWSHPORT 是否有 IP 0.0.0.0/0 的入口规则,这是所有可能 IP 地址的 CIDR 表示法。我当前的入口规则:无状态:否,来源:0.0.0.0/0 TCP 源端口范围:全部,目标端口范围:NEWSHPORT,类型和代码:我留空。好的,所以应该允许新端口上的流量进入。
关键时刻:
ssh -i C:\path\to\saved\key\ssh-key-2021-12-14.key -p NEWSSHPORT [email protected]
ssh: connect to host 1.2.3.4 port NEWSSHPORT: Connection timed out
但是当我尝试原来的端口 22 时:
ssh -i C:\path\to\saved\key\ssh-key-2021-12-14.key -p 22 [email protected]
ssh: connect to host 152.70.195.101 port 22: Connection refused
如果我尝试一些没有任何人在监听的随机端口,并且也没有 Oracle 子网规则允许:
ssh -i C:\path\to\saved\key\ssh-key-2021-12-14.key -p 3456 [email protected]
ssh: connect to host 1.2.3.4 port 3456: Connection timed out
结论:看起来到端口 22 的原始流量肯定通过了,但被机器拒绝了。这是正确的响应,但尝试任何其他端口,似乎流量在通往我的机器的途中被阻止或丢弃了。我做错了什么?