如何在Google Compute Engine中打开特定端口(例如9090)


195

我有2个Google Compute Engine实例,我想在两个实例中都打开端口9090。我认为我们需要添加一些防火墙规则。

你能告诉我该怎么做吗?


7
我认为这个问题已经回答。您介意选择以下答案之一吗?这将有助于将来的读者更轻松地认识到此问题已解决。
modulitos

哟,Subhradip,选择一个答案。
oligofren '18年

Answers:


339

你需要:

  1. 前往cloud.google.com

  2. 转到我的控制台

  3. 选择你的项目

  4. 选择“网络> VPC网络”。

  5. 选择“防火墙规则”

  6. 选择“创建防火墙规则”

  7. 要将规则应用于选择VM实例,请选择“目标”>“指定目标标签”,然后在“目标标签”中输入标签的名称。此标记将用于将新的防火墙规则应用于您想要的任何实例。然后,确保实例已应用网络标签。

  8. 要允许到端口9090的传入TCP连接,请在“协议和端口”中输入 tcp:9090

  9. 点击创建

我希望这可以帮助你。

更新请参考文档以自定义您的规则。


4
计算引擎没有“网络”选项(了?)
AFR

8
是的,现在没有“网络”选项,更新的路径是“项目”->“网络”->“防火墙规则”
Caio Vertematti,2017年

1
在我的实例上,我只有一个,allow http并且allow https添加了一个新的防火墙规则,但似乎找不到它。如果有帮助的话,我也是免费的。
A. L

1
您需要允许http打开80端口并允许https打开443。这是一个快捷方式。
卡洛斯·罗哈斯

4
文档的菜单路径不断变化。它认为指向答案中的文档很重要:cloud.google.com/vpc/docs/using-firewalls
Anupam,

81

这是回答此问题的命令行方法:

gcloud compute firewall-rules create <rule-name> --allow tcp:9090 --source-tags=<list-of-your-instances-names> --source-ranges=0.0.0.0/0 --description="<your-description-here>"

这将为9090您命名的实例打开端口。省略--source-tags并将--source-ranges规则应用于所有实例。更多细节中Gcloud文档所述firewall-rule create命令的手动

前面的答案很好,但是Google建议使用较新的gcloud命令,而不要使用这些gcutil命令。

PS:要了解Google的防火墙规则,请运行gcloud compute firewall-rules list并查看所有防火墙规则


我在使用--description零件时会抱怨,但是对于我来说这是可行的。
shabbychef

2
我不确定他们是否更改了api,但是源和目标似乎与@modulitos的答案相反。根据firewall-rules命令文档source表示传入流量,而表示target将规则应用到的实例。
cindyxiaoxiaoli

1
ERROR: (gcloud.compute.firewall-rules.create) Could not fetch resource: - Insufficient Permission@modulitos
alper's

后期测试@modulitos是什么?是telnet :instance_ip :port还是nmap -p :port :instance_ip
Nam G VU

@alper您必须在执行以下命令之前:“ gcloud auth login”并登录
Anton Tkachov

10

您需要添加防火墙规则以打开tcp:9090对实例的入站访问。如果您有两个以上的实例,并且只想对这两个实例打开9090,则需要确保有两个实例共享的标签。您可以通过控制台或命令行添加或更新标签。我建议在需要时使用GUI,因为它可以通过处理读-修改-写周期setinstancetags

如果要为所有实例打开端口9090,则可以创建如下防火墙规则:

gcutil addfirewall allow-9090 --allowed=tcp:9090

这将适用于您的所有实例。

如果您只想打开端口9090到为您的应用程序提供服务的两个实例,请确保它们具有像这样的标记my-app,然后像这样添加防火墙:

gcutil addfirewall my-app-9090 --allowed=tcp:9090 --target_tags=my-app

您可以在此处阅读有关在GCE中创建和管理防火墙的更多信息。


10
gcutil不再被提供; 请使用重写命令行gcloud
Misha Brukman

10

这个问题已经过时了,卡洛斯·罗哈斯Carlos Rojas)的回答很好,但是我认为我应该公开一些在尝试打开端口时应记住的事情。

首先要记住的是,“ 网络”部分已重命名为“ VPC网络”。因此,如果您要尝试找到“ 防火墙规则”选项可用的位置,请查看“ VPC网络”

第二件事是,如果要在Linux VM上打开端口,请确保在任何情况下都不要尝试使用ufwcommand 打开端口。我尝试使用它,但失去了对VM的ssh访问权限。所以不要重复我的错误。

第三件事是,如果你想在Windows虚拟机开放端口,你需要创建VM也在内部防火墙规则Windows防火墙沿VPC联网- >防火墙规则。与Linux VM不同,这两个防火墙规则都需要打开该端口。因此,如果您无法从VM外部访问端口,请检查是否已在GCP控制台和Windows防火墙中打开了该端口。

最后(显而易见)的事情是,不要不必要地打开端口。不再需要时,请关闭端口。

我希望这个答案是有用的。


好的提示,除了我确实使用ufw命令打开了一些特定的端口并且我仍然具有ssh访问权限。
stackErr

7

我遇到了与您相同的问题,可以按照@CarlosRojas的说明解决,但有一点点不同。我没有创建新的防火墙规则,而是编辑了default-allow-internal它以接受来自任何地方的流量,因为创建新规则没有任何区别。


创建新的防火墙规则需要付费。您是否通过编辑此规则来避免这种情况?
killjoy

@killjoy我不确定。我目前未使用Google计算引擎。抱歉。
Nevershowmyface '16

2
尽管这可能可行,但是此方法存在安全方面的问题。我发现对我有用的是在实例上利用防火墙标签。创建防火墙规则时,可以为该规则创建“目标标记”。然后,您可以将该标签应用于您的VM实例,这会将规则应用于您的特定实例。有关更多信息,请参见此处接受的答案:stackoverflow.com/questions/31509722/…–
k00k

7

创建防火墙规则

如果您不熟悉GCP中的防火墙规则,请查看防火墙规则组件[1]。防火墙规则是在网络级别定义的,仅适用于创建它们的网络。但是,您为每个选项选择的名称对于项目必须是唯一的。

对于云控制台:

  1. 转到Google Cloud Platform控制台中的“防火墙规则”页面。
  2. 单击创建防火墙规则。
  3. 输入防火墙规则的名称。该名称对于项目必须是唯一的。
  4. 指定将在其中实施防火墙规则的网络。
  5. 指定规则的优先级。数字越小,优先级越高。
  6. 对于“交通方向”,选择“进入”或“离开”。
  7. 对于匹配操作,请选择允许或拒绝。
  8. 指定规则的目标。

    • 如果您希望规则适用于网络中的所有实例,请选择网络中的所有实例。
    • 如果您希望规则适用于通过网络(目标)标签选择实例,请选择“指定目标标签”,然后在“目标标签”字段中输入规则应应用的标签。
    • 如果希望该规则适用于按关联的服务帐户选择实例,请选择“指定的服务帐户”,指示该服务帐户是当前项目还是“服务帐户范围”下的另一个,然后在“目标服务”中选择或键入服务帐户名称帐户字段。
  9. 对于入口规则,请指定“源”过滤器:

    • 选择IP范围,然后在“源IP范围”字段中键入CIDR块,以按IP地址范围定义传入流量的源。将0.0.0.0/0用作来自任何网络的源。
    • 选择“子网”,然后从“子网”弹出按钮中标记所需的子网,以按子网名称定义传入流量的来源。
    • 要按网络标签限制源,请选择“源标签”,然后在“源标签”字段中键入网络标签。有关源标签数量的限制,请参见VPC配额和限制。仅当服务帐户未指定目标时,才可用按源标记过滤。有关更多信息,请参阅按服务帐户与网络标记进行过滤。
    • 要按服务帐户限制来源,请选择“服务帐户”,指示该服务帐户是当前项目还是“服务帐户范围”下的另一个项目,然后在“源服务帐户”字段中选择或键入服务帐户名称。仅当网络标记未指定目标时,才可用按源服务帐户进行过滤。有关更多信息,请参阅按服务帐户和网络标记进行过滤。
    • 如果需要,请指定第二个源过滤器。辅助源过滤器不能使用与主要源过滤器相同的过滤器标准。
  10. 对于出口规则,请指定“目标”过滤器:

    • 选择IP范围,然后在“目标IP范围”字段中键入CIDR块,以按IP地址范围定义传出流量的目标。使用0.0.0.0/0表示无处不在。
    • 选择“子网”,然后从“子网”弹出按钮中标记所需的子网,以按子网名称定义传出流量的目的地。
  11. 定义规则将应用到的协议和端口:

    • 选择“全部允许”或“全部拒绝”,具体取决于操作,以使规则适用于所有协议和端口。

    • 定义特定的协议和端口:

      • 选择tcp以包括TCP协议和端口。输入所有端口或以逗号分隔的端口列表,例如20-22、80、8080。
      • 选择udp以包括UDP协议和端口。输入所有端口或以逗号分隔的端口列表,例如67-69、123。
      • 选择其他协议以包括icmp或sctp之类的协议。
  12. (可选)可以通过将防火墙实施规则的执行状态设置为Disabled来创建防火墙规则,但不能实施该规则。单击禁用规则,然后选择禁用。

  13. (可选)您可以启用防火墙规则日志记录:

    • 单击日志>打开。
    • 单击打开。
  14. 单击创建。

链接:[1] https://cloud.google.com/vpc/docs/firewalls#firewall_rule_components


0

我不得不通过降低优先级(使其更高)来解决此问题。这引起了立即反应。并不是我所期望的,但是它起作用了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.