GCP 默认防火墙规则是否存在安全问题?

问题描述 投票:0回答:2

每当您在 GCP 中创建项目时,都会有一个名为“default-allow-ssh”的默认防火墙规则,该规则允许端口 22 上的 0.0.0.0/0,这使得您可以轻松地从 ssh 到具有外部 IP 的计算机浏览器。但这允许来自互联网的任何机器通过端口 22 访问我的机器,并且机器人不断尝试访问他们能找到的任何内容。我想他们仍然需要破解密码或 ssh 密钥或其他东西,但这不是一个非常危险的默认设置规则吗?当您使用 external-ip 启动一台新机器时,实际上并没有任何警告,我预计 GCP 会有更严格的方法。 如果有人能帮助我澄清这一点,我将不胜感激。 如果我删除这个默认规则并且仍然想通过 ssh 访问我的机器,哪种方法会简单且安全?

google-cloud-platform google-compute-engine
2个回答
8
投票

如果没有这条规则,当您尝试使用

gcloud
命令行工具进行 SSH 时,请求将立即被拒绝,因此 AFAIK,Compute Engine 此处的选择是为了易于开始使用 GCE 而进行了优化。

我还认为默认情况下禁用密码身份验证,因此任何攻击者都有两种进入途径:

  1. 破解 SSH 私钥
  2. 利用 SSH 代理二进制文件中的漏洞

我认为考虑到当今的技术,第一个想法是相当牵强的。如果这足够容易,我们世界上就会遇到更大的问题。

如果您没有 Google Cloud Platform 定期部署的自动安全补丁,那么第二个问题似乎需要担心。是的,这仍然容易受到 0day 漏洞的攻击,但考虑到 Google 的安全团队是最近在热门项目中发现了几个安全漏洞的人(例如,我很确定 Heartbleed 是由Google),如果所有 GCE 虚拟机使用的 SSH 代理中存在安全错误,Google 很可能会比其他任何人更快地修复它。

也就是说,如果您确实不喜欢此规则,我很确定您可以进入并更改规则的定义,以便默认情况下它仅允许所有虚拟机使用某些特定的 IP 或子网列表。


0
投票

如果你不更改默认的 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的端口号:

  1. 更改 GCP 的“
    default-allow-ssh
    ”的防火墙规则,将端口 22 替换为其他号码。
  2. 进入您的 gcp 服务器,然后备份您的配置:
$ sudo cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.org
  1. 假设我将端口更改为 2222。然后您可以通过运行以下命令来更改端口号:
$ sudo sed -i -e "s/#Port 22/Port 2222/g" /etc/ssh/sshd_config
  1. 重新加载 sshd:
$ sudo systemctl restart sshd
  1. 现在您可以通过以下方式进行 ssh:
$ ssh -p 2222 user@your-gcp-external-ip
© www.soinside.com 2019 - 2024. All rights reserved.