每当您在 GCP 中创建项目时,都会有一个名为“default-allow-ssh”的默认防火墙规则,该规则允许端口 22 上的 0.0.0.0/0,这使得您可以轻松地从 ssh 到具有外部 IP 的计算机浏览器。但这允许来自互联网的任何机器通过端口 22 访问我的机器,并且机器人不断尝试访问他们能找到的任何内容。我想他们仍然需要破解密码或 ssh 密钥或其他东西,但这不是一个非常危险的默认设置规则吗?当您使用 external-ip 启动一台新机器时,实际上并没有任何警告,我预计 GCP 会有更严格的方法。 如果有人能帮助我澄清这一点,我将不胜感激。 如果我删除这个默认规则并且仍然想通过 ssh 访问我的机器,哪种方法会简单且安全?
如果没有这条规则,当您尝试使用
gcloud
命令行工具进行 SSH 时,请求将立即被拒绝,因此 AFAIK,Compute Engine 此处的选择是为了易于开始使用 GCE 而进行了优化。
我还认为默认情况下禁用密码身份验证,因此任何攻击者都有两种进入途径:
我认为考虑到当今的技术,第一个想法是相当牵强的。如果这足够容易,我们世界上就会遇到更大的问题。
如果您没有 Google Cloud Platform 定期部署的自动安全补丁,那么第二个问题似乎需要担心。是的,这仍然容易受到 0day 漏洞的攻击,但考虑到 Google 的安全团队是最近在热门项目中发现了几个安全漏洞的人(例如,我很确定 Heartbleed 是由Google),如果所有 GCE 虚拟机使用的 SSH 代理中存在安全错误,Google 很可能会比其他任何人更快地修复它。
也就是说,如果您确实不喜欢此规则,我很确定您可以进入并更改规则的定义,以便默认情况下它仅允许所有虚拟机使用某些特定的 IP 或子网列表。
如果你不更改默认的 ssh 配置,你可以看到有多少邪恶的人试图访问你的 ssh:
$ cat /var/log/auth.log | grep sshd
Sep 25 00:30:22 webserver sshd[692]: Server listening on 0.0.0.0 port 22.
Sep 25 00:30:22 webserver sshd[692]: Server listening on :: port 22.
Sep 25 00:36:39 webserver sshd[757]: Connection closed by 54.38.240.250 port 37596 [preauth]
Sep 25 00:48:45 webserver sshd[822]: Invalid user ftp from 195.50.5.30 port 53050
Sep 25 00:48:45 webserver sshd[822]: input_userauth_request: invalid user ftp [preauth]
Sep 25 00:48:45 webserver sshd[822]: Connection closed by 195.50.5.30 port 53050 [preauth]
Sep 25 00:58:43 webserver sshd[896]: Connection closed by 5.39.77.131 port 37428 [preauth]
Sep 25 01:01:01 webserver sshd[911]: Connection closed by 92.238.55.31 port 46940 [preauth]
Sep 25 01:01:47 webserver sshd[919]: Connection closed by 92.238.55.31 port 47690 [preauth]
Sep 25 01:06:25 webserver sshd[977]: Connection closed by 118.25.45.196 port 48778 [preauth]
Sep 25 01:22:19 webserver sshd[1093]: Connection closed by 18.144.67.59 port 50210 [preauth]
Sep 25 01:22:27 webserver sshd[1095]: Unable to negotiate with 18.144.67.59 port 60026: no matching host key type found. Their offer: ecdsa-sha2-nistp384 [preauth]
Sep 25 01:22:39 webserver sshd[1098]: Unable to negotiate with 18.144.67.59 port 47974: no matching host key type found. Their offer: ecdsa-sha2-nistp521 [preauth]
Sep 25 01:22:54 webserver sshd[1100]: Connection closed by 18.144.67.59 port 35310 [preauth]
Sep 25 01:23:03 webserver sshd[1102]: Unable to negotiate with 18.144.67.59 port 45398: no matching host key type found. Their offer: ssh-dss [preauth]
Sep 25 01:26:51 webserver sshd[1127]: Invalid user mc from 195.50.5.30 port 40116
Sep 25 01:26:51 webserver sshd[1127]: input_userauth_request: invalid user mc [preauth]
Sep 25 01:26:51 webserver sshd[1127]: Connection closed by 195.50.5.30 port 40116 [preauth]
Sep 25 02:05:02 webserver sshd[1404]: Invalid user celery from 195.50.5.30 port 55410
Sep 25 02:05:02 webserver sshd[1404]: input_userauth_request: invalid user celery [preauth]
Sep 25 02:05:02 webserver sshd[1404]: Connection closed by 195.50.5.30 port 55410 [preauth]
我想减少被攻击的机会,所以我总是做以下事情:
请确保您创建了公钥/私钥对并将公钥注册到您的 GCP 实例配置中,并确认您可以执行 ssh。
然后我对 ssh 的使用进行了一些限制,例如仅允许来自有限范围的 IP 地址的 ssh 连接。
从whatismyip或其他东西检查您的IP,然后,假设我的IP是
95.24.79.236
(但这实际上不是我的IP),我通常将允许的IP范围更改为95.24.79.0/24
,这将允许95.24.79.0
- 95.24.79.255
,这将对所有 IP 范围完全开放。
之后,我将ssh的端口号22更改为1024到65536之间的端口。您可以通过以下方式更改ssh的端口号:
default-allow-ssh
”的防火墙规则,将端口 22 替换为其他号码。$ sudo cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.org
$ sudo sed -i -e "s/#Port 22/Port 2222/g" /etc/ssh/sshd_config
$ sudo systemctl restart sshd
$ ssh -p 2222 user@your-gcp-external-ip