ChatGPT解决这个技术问题 Extra ChatGPT

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

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

你能告诉我我该怎么做吗?


B
Brian Dorsey

你需要:

转到 cloud.google.com 转到我的控制台 选择您的项目 选择 Networking > VPC network 选择“Firewall” 选择“Create Firewall Rule” 要将规则应用于选择 VM 实例,请选择 Targets > “Specified target tags”,然后输入“目标标签”标签的名称。此标签将用于将新的防火墙规则应用于您想要的任何实例。然后,确保实例应用了网络标签。设置源 IP 范围以允许来自所有 IP 的流量:0.0.0.0/0 要允许传入 TCP 连接到端口 9090,在“协议和端口”中,选中“tcp”并输入 9090 单击创建(或单击“等效命令行”以显示 gcloud 命令以创建相同的规则)

我希望这可以帮助你。

更新请参阅docs自定义您的规则。


计算引擎没有“网络”选项(不再?)
是的,现在没有 Networks 选项,更新后的路径是 Project -> Networking -> Firewall Rules
在我的实例上,我只有 allow httpallow https 我添加了一个新的防火墙规则,但我似乎找不到它。如果有帮助,我也在免费套餐中。
如何确保该标签应用于实例?
文档的菜单路径不断变化。它认为在答案中指出文档很重要:cloud.google.com/vpc/docs/using-firewalls
m
modulitos

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

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 documentationthe firewall-rule create command manual 中有更多详细信息

以前的答案很好,but Google recommends 使用较新的 gcloud 命令而不是 gcutil 命令。

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


当我使用 --description 部分时,我会收到投诉,但除此之外这对我有用。
我不确定他们是否更改了 api,但源和目标似乎与@modulitos 的答案相反。根据 firewall-rules command documentationsource 表示传入流量,而 target 表示应用规则的实例。
ERROR: (gcloud.compute.firewall-rules.create) Could not fetch resource: - Insufficient Permission @modulitos
什么是善后测试@modulitos?是 telnet :instance_ip :port 还是 nmap -p :port :instance_ip
@alper您必须先执行此命令:“gcloud auth login”并登录
n
noob

这个问题很老,Carlos Rojas 的答案很好,但我认为我应该发布一些在尝试打开端口时应该牢记的事情。

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

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

第三件事是,如果您尝试在 Windows 虚拟机上打开端口,您还需要在 Windows Firewall 中创建虚拟机内的防火墙规则以及 VPC 网络 ->防火墙规则。与 Linux VM 不同,需要在两个防火墙规则中打开端口。因此,如果您无法从 VM 外部访问该端口,请检查您是否已在 GCP 控制台和 Windows 防火墙中打开了该端口。

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

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


除了我确实使用 ufw 命令打开了一些特定端口并且我仍然具有 ssh 访问权限之外,这些提示都很好。
K
Kervin L

创建防火墙规则

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

对于云控制台:

转到 Google Cloud Platform Console 中的防火墙规则页面。单击创建防火墙规则。输入防火墙规则的名称。此名称对于项目必须是唯一的。指定将实施防火墙规则的网络。指定规则的优先级。数字越小,优先级越高。对于流量方向,选择入口或出口。对于匹配时的操作,选择允许或拒绝。指定规则的目标。如果您希望规则应用于网络中的所有实例,请选择网络中的所有实例。如果您希望将规则应用于按网络(目标)标签选择的实例,请选择指定的目标标签,然后在目标标签字段中键入应应用规则的标签。如果您希望规则适用于通过关联服务帐户选择实例,请选择指定服务帐户,指明服务帐户是在当前项目中还是在服务帐户范围下的另一个项目中,然后在目标服务中选择或键入服务帐户名称帐户字段。对于入口规则,指定源过滤器:选择 IP 范围并在源 IP 范围字段中键入 CIDR 块,以按 IP 地址范围定义传入流量的源。使用 0.0.0.0/0 作为来自任何网络的源。选择子网,然后从子网弹出按钮中标记您需要的子网,以按子网名称定义传入流量的来源。要按网络标签限制来源,请选择来源标签,然后在来源标签字段中输入网络标签。有关源标签数量的限制,请参阅 VPC 配额和限制。仅当服务帐户未指定目标时,才可以按源标记过滤。有关详细信息,请参阅按服务帐户与网络标签过滤。要按服务帐户限制源,请选择服务帐户,在服务帐户范围下指明服务帐户是在当前项目中还是在另一个项目中,然后在源服务帐户字段中选择或键入服务帐户名称。仅当网络标记未指定目标时,才可以按源服务帐户过滤。有关详细信息,请参阅按服务帐户与网络标签过滤。如果需要,指定第二个源过滤器。次要源过滤器不能使用与主要过滤器相同的过滤条件。对于出口规则,指定目标过滤器:选择 IP 范围并在目标 IP 范围字段中键入 CIDR 块,以按 IP 地址范围定义传出流量的目标。使用 0.0.0.0/0 表示无处不在。选择子网,然后从子网弹出按钮中标记您需要的子网,以按子网名称定义传出流量的目的地。定义规则将应用到的协议和端口:根据操作选择全部允许或全部拒绝,以使规则应用于所有协议和端口。定义特定协议和端口:选择 tcp 以包括 TCP 协议和端口。输入全部或以逗号分隔的端口列表,例如 20-22、80、8080。选择 udp 以包括 UDP 协议和端口。输入全部或以逗号分隔的端口列表,例如 67-69、123。选择其他协议以包括 icmp 或 sctp 等协议。 (可选)您可以创建防火墙规则,但不能通过将其强制状态设置为禁用来强制它。单击禁用规则,然后选择禁用。 (可选)您可以启用防火墙规则日志记录:单击日志 > 开启。单击打开。单击创建。

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


E
E. Anderson

您需要添加防火墙规则才能打开对您的实例的 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

您可以阅读有关 creating and managing firewalls in GCE here 的更多信息。


gcutil 不再可用;请使用 gcloud 重写您的命令行。
佚名

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


创建新的防火墙规则需要付费。您是否设法通过编辑此规则来避免这种情况?
@killjoy 我不确定。我目前没有使用谷歌计算引擎。对不起。
虽然这可能有效,但此方法存在安全问题。我发现对我有用的是在我的实例上使用防火墙标签。创建防火墙规则时,您可以为该规则创建“目标标记”。然后,您可以将该标签应用到您的 VM 实例,这会将规则应用到您的特定实例。有关更多信息,请参见此处接受的答案:stackoverflow.com/questions/31509722/…
j
justbob

我必须通过降低优先级(使其更高)来解决这个问题。这引起了立即的反应。不是我所期待的,但它奏效了。


T
Thrinadh Kumpatla

console.cloud.google.com >> 选择项目 >> 网络 > VPC 网络 >> 防火墙 >> 创建防火墙。

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

在“协议和端口”中输入 tcp:9090

单击保存。


S
Suraj Rao

运行此命令打开端口

gcloud compute --project=<project_name> firewall-rules create firewall-rules --direction=INGRESS --priority=1000 --network=default --action=ALLOW --rules=tcp:<port number> --source-ranges=0.0.0.0/0