我有 2 个 Google Compute Engine 实例,我想在这两个实例中打开端口 9090。我认为我们需要添加一些防火墙规则。
你能告诉我我该怎么做吗?
你需要:
转到 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自定义您的规则。
这是回答这个问题的命令行方法:
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 documentation 和 the firewall-rule create
command manual 中有更多详细信息
以前的答案很好,but Google recommends 使用较新的 gcloud
命令而不是 gcutil
命令。
PS:要了解 Google 的防火墙规则,请运行 gcloud compute firewall-rules list
并查看所有防火墙规则
--description
部分时,我会收到投诉,但除此之外这对我有用。
source
表示传入流量,而 target
表示应用规则的实例。
ERROR: (gcloud.compute.firewall-rules.create) Could not fetch resource: - Insufficient Permission
@modulitos
telnet :instance_ip :port
还是 nmap -p :port :instance_ip
?
这个问题很老,Carlos Rojas 的答案很好,但我认为我应该发布一些在尝试打开端口时应该牢记的事情。
首先要记住的是 Networking 部分已重命名为 VPC Networking。因此,如果您想找出防火墙规则选项可用的位置,请查看 VPC 网络。
第二件事是,如果您尝试打开 Linux VM 上的端口,请确保在任何情况下都不应尝试使用 ufw
命令打开端口。我尝试使用它并失去了对 VM 的 ssh 访问权限。所以不要重复我的错误。
第三件事是,如果您尝试在 Windows 虚拟机上打开端口,您还需要在 Windows Firewall 中创建虚拟机内的防火墙规则以及 VPC 网络 ->防火墙规则。与 Linux VM 不同,需要在两个防火墙规则中打开端口。因此,如果您无法从 VM 外部访问该端口,请检查您是否已在 GCP 控制台和 Windows 防火墙中打开了该端口。
最后(显而易见)的事情是,不要不必要地打开端口。不再需要时关闭端口。
我希望这个答案是有用的。
ufw
命令打开了一些特定端口并且我仍然具有 ssh 访问权限之外,这些提示都很好。
创建防火墙规则
如果您不熟悉 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
您需要添加防火墙规则才能打开对您的实例的 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
以接受来自任何地方的流量,因为创建新规则没有任何区别。
我必须通过降低优先级(使其更高)来解决这个问题。这引起了立即的反应。不是我所期待的,但它奏效了。
console.cloud.google.com >> 选择项目 >> 网络 > VPC 网络 >> 防火墙 >> 创建防火墙。
要将规则应用于 VM 实例,请选择目标、“指定目标标签”,然后在“目标标签”中输入标签名称。此标签将用于将新的防火墙规则应用于您想要的任何实例。
在“协议和端口”中输入 tcp:9090
单击保存。
运行此命令打开端口
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
不定期副业成功案例分享
allow http
和allow https
我添加了一个新的防火墙规则,但我似乎找不到它。如果有帮助,我也在免费套餐中。