本教程介绍如何配置全球网络防火墙政策,以允许自定义 VPC 网络中的虚拟机子网之间的内部流量。
目标
本教程介绍如何完成以下任务:- 创建包含两个子网的自定义 VPC 网络。
- 在 VPC 网络的不同子网中创建两个没有外部 IP 地址的 Linux 虚拟机实例(客户端虚拟机和服务器虚拟机)。
- 创建 Cloud Router 路由器和 Cloud NAT 网关,这是下载软件包的最佳实践。
- 在服务器虚拟机上安装 Apache 服务器。
- 使用以下规则创建全球网络防火墙政策:
- 允许发送到任何目的地的出站流量。
- 启用防火墙日志记录。
- 使用 Identity-Aware Proxy (IAP) 允许通过 SSH 连接到虚拟机。
- 允许客户端虚拟机连接到运行 Apache 服务器的服务器虚拟机。
- 测试连接。
下图展示了全球网络防火墙政策允许内部入站流量后,自定义 VPC 网络子网之间的流量流动。
准备工作
- 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
- 为您的项目启用 Compute Engine API。
- 确保您具有 Compute Network Admin (
roles/compute.networkAdmin
) Identity and Access Management 角色。 - 如果您希望通过命令行进行操作,请安装 Google Cloud CLI。 如需了解该工具的概念性信息和安装信息,请参阅 gcloud CLI 概览。
注意:如果您之前未运行过 Google Cloud CLI,请先运行
gcloud init
以初始化 gcloud CLI 目录。
创建包含子网的自定义 VPC 网络
在本部分中,您将创建包含两个 IPv4 子网的自定义模式 VPC 网络。
控制台
在 Google Cloud 控制台中,进入 VPC 网络页面。
点击创建 VPC 网络。
对于名称,输入
vpc-fw-rules
。对于说明,输入
VPC network for the firewall rules tutorial
。对于子网创建模式,选择自定义。
在新子网部分,为子网指定以下配置参数:
- 名称:
subnet-fw-rules-server
- 区域:
us-central1 (Iowa)
- IPv4 范围:
10.0.0.0/24
- 专用 Google 访问通道:开启
- 名称:
点击完成。
点击添加子网并指定以下配置参数:
- 名称:
subnet-fw-rules-client
- 区域:
us-central1 (Iowa)
- IPv4 范围:
192.168.10.0/24
- 专用 Google 访问通道:开启
- 名称:
点击完成。
向下滚动,然后点击创建。
gcloud
如需创建 VPC 网络,请运行以下命令:
gcloud compute networks create vpc-fw-rules \ --subnet-mode=custom \ --description="VPC network for the firewall rules tutorial"
可选:在为 Cloud Shell 提供授权对话框中,点击授权。
如需创建子网,请运行以下命令:
gcloud compute networks subnets create subnet-fw-rules-server \ --network=vpc-fw-rules \ --region=us-central1 \ --range=10.0.0.0/24 \ --enable-private-ip-google-access
如需创建另一个子网,请运行以下命令:
gcloud compute networks subnets create subnet-fw-rules-client \ --network=vpc-fw-rules \ --region=us-central1 \ --range=192.168.10.0/24 \ --enable-private-ip-google-access
默认情况下,VPC 网络具有两条隐式 IPv4 规则:
- 目的地为
0.0.0.0/0
且优先级最低 (65535) 的allow
出站规则,允许任何实例将流量发送到任何目的地(Google Cloud 阻止的流量除外)。 - 来源为
0.0.0.0/0
且优先级最低 (65535) 的deny
入站规则,通过阻止入站连接来保护所有实例。
如需了解详情,请参阅隐式规则。
创建客户端和服务器虚拟机
在本部分中,您将在上一部分创建的 VPC 网络的子网中创建两个没有外部 IP 地址的 Linux 虚拟机。
创建服务器虚拟机
控制台
如需创建服务器虚拟机,请按照以下步骤操作:
在 Google Cloud 控制台中,转到创建实例页面。
对于名称,输入
vm-fw-rules-server
。对于区域,请选择
us-central1 (Iowa)
。向下滚动并展开高级选项,然后展开网络。
在网络接口部分中,指定以下配置参数:
- 网络:
vpc-fw-rules
- 子网:
subnet-fw-rules-server IPv4 (10.0.0.0/24)
- 外部 IPv4 地址:无
- 网络:
点击完成。
点击创建。
gcloud
如需创建服务器虚拟机,请运行以下命令:
gcloud compute instances create vm-fw-rules-server \ --network=vpc-fw-rules \ --zone=us-central1-a \ --subnet=subnet-fw-rules-server \ --stack-type=IPV4_ONLY \ --no-address
创建客户端虚拟机
控制台
如需创建客户端虚拟机,请按以下步骤操作:
在 Google Cloud 控制台中,转到创建实例页面。
对于名称,输入
vm-fw-rules-client
。对于区域,请选择
us-central1 (Iowa)
。向下滚动并展开高级选项,然后展开网络。
在网络接口部分中,指定以下配置参数:
- 网络:
vpc-fw-rules
- 子网:
subnet-fw-rules-client IPv4 (192.168.10.0/24)
- 外部 IPv4 地址:无
- 网络:
点击完成。
点击创建。
gcloud
如需创建客户端虚拟机,请运行以下命令:
gcloud compute instances create vm-fw-rules-client \ --network=vpc-fw-rules \ --zone=us-central1-a \ --subnet=subnet-fw-rules-client \ --stack-type=IPV4_ONLY \ --no-address
创建 Cloud Router 路由器和 Cloud NAT 网关
在上一部分中,您创建了两个没有公共 IPv4 地址的 Linux 虚拟机。如需允许这些虚拟机访问公共互联网,您需要创建 Cloud Router 路由器和 Cloud NAT 网关。
控制台
在 Google Cloud 控制台中,转到 Cloud NAT 页面。
点击开始使用或创建 Cloud NAT 网关。
对于网关名称,输入
gateway-fw-rules
。在 NAT 类型列表中,选择公共。
在选择 Cloud Router 路由器部分中,指定以下配置参数:
- 网络:
vpc-fw-rules
- 区域:
us-central1
- Cloud Router 路由器:创建新路由器。
- 对于名称,输入
router-fw-rules
。 - 点击创建。
- 对于名称,输入
- 网络:
点击创建。
gcloud
要创建 Cloud Router 路由器,请运行以下命令:
gcloud compute routers create router-fw-rules \ --network=vpc-fw-rules \ --region=us-central1
如需创建 Cloud NAT 网关,请运行以下命令:
gcloud compute routers nats create gateway-fw-rules \ --router=router-fw-rules \ --region=us-central1 \ --auto-allocate-nat-external-ips \ --nat-all-subnet-ip-ranges
创建全球网络防火墙政策
在本部分中,您将创建一个全球网络防火墙政策,它具有以下组件:
- 目的地为
0.0.0.0./0
的出站规则。 启用了日志记录。通过防火墙规则日志记录,您可以审核、验证和分析防火墙规则所带来的影响。
控制台
在 Google Cloud 控制台中,转到防火墙页面。
点击创建防火墙政策。
在配置政策部分的政策名称中,输入
fw-policy
。在部署范围列表中,选择全局,然后点击继续。
如需为政策创建规则,请在添加规则部分中点击添加规则。
- 在优先级字段中,输入
65534
。 - 在流量方向列表中,选择出站。
- 在日志列表中,选择开启。
- 在目标部分的目标类型中,选择网络中的所有实例。
- 在目的地部分的 IP 范围中,输入
0.0.0.0/0
。 - 在协议和端口部分中,选择全部允许。
- 点击创建。
- 在优先级字段中,输入
点击继续。
如需将 VPC 网络与政策关联,在将政策与 VPC 网络关联部分中,点击关联。
选中
vpc-fw-rules
对应的复选框,然后点击关联。点击继续。
点击创建。
gcloud
如需创建防火墙政策,请运行以下命令:
gcloud compute network-firewall-policies create fw-policy \ --global
如需创建允许发送到所有目的地的流量并启用日志的防火墙规则,请运行以下命令:
gcloud compute network-firewall-policies rules create 65534 \ --firewall-policy=fw-policy \ --direction=EGRESS \ --action=ALLOW \ --dest-ip-ranges=0.0.0.0/0 \ --layer4-configs=all \ --global-firewall-policy \ --enable-logging
如需将防火墙政策与 VPC 网络关联,请运行以下命令:
gcloud compute network-firewall-policies associations create \ --firewall-policy=fw-policy \ --network=vpc-fw-rules \ --name=pol-association-fw-rules \ --global-firewall-policy
为 IAP 添加防火墙规则
在前面的部分中,您创建了没有外部 IP 地址的 Linux 虚拟机。在本部分中,您将启用 Identity-Aware Proxy (IAP) 以允许对没有外部 IP 地址的虚拟机实例进行管理员访问。
如需允许 IAP 连接到您的虚拟机实例,请创建一个防火墙规则,该规则:
- 适用于您希望使用 IAP 可访问的所有 VM 实例。
- 允许 IP 范围
35.235.240.0/20
的入站流量。此范围包含 IAP 用于 TCP 转发的所有 IP 地址。 - 允许连接到您希望通过使用 IAP TCP 转发访问的所有端口,例如,SSH 的端口
22
和 RDP 的端口3389
。
控制台
如需允许 RDP 和 SSH 访问 vpc-pf-rules 网络中的所有虚拟机实例,请执行以下操作:
在 Google Cloud 控制台中,转到防火墙页面。
在网络防火墙政策部分中,点击
fw-policy
。点击创建规则。
在优先级字段中,输入
500
。对于流量方向,选择入站。
在日志列表中,选择开启。
在目标部分的目标类型中,选择网络中的所有实例。
在来源部分的 IP 范围中,输入
35.235.240.0/20
。在协议和端口部分中,选择指定的协议和端口。
选中 TCP 复选框,在端口字段中,输入
22
和3389
(以英文逗号分隔)。点击创建。
gcloud
如需允许 RDP 和 SSH 访问 vpc-pf-rules 网络中的所有虚拟机实例,请运行以下命令:
gcloud compute network-firewall-policies rules create 500 \ --firewall-policy=fw-policy \ --direction=INGRESS \ --action=ALLOW \ --src-ip-ranges=35.235.240.0/20 \ --global-firewall-policy \ --layer4-configs tcp:22,tcp:3389 \ --enable-logging
安装 Apache 服务器
在本部分中,您将在服务器虚拟机上安装 Apache 服务器。
在 Google Cloud 控制台中,前往虚拟机实例页面。
在
vm-fw-rules-server
虚拟机实例的连接列中,点击 SSH。在 SSH-in-browser 对话框中,点击授权并等待连接建立。
如需安装
apache2
软件包,请在命令提示符下运行以下命令:sudo apt update && sudo apt -y install apache2
安装 Apache 后,操作系统会自动启动 Apache 服务器。
如需验证 Apache 正在运行,请运行以下命令:
sudo systemctl status apache2 --no-pager
如需覆盖 Apache Web 服务器的默认网页,请运行以下命令:
echo '<!doctype html><html><body><h1>Hello World!</h1></body></html>' | sudo tee /var/www/html/index.html
关闭 SSH-in-browser 对话框。
测试连接
在服务器虚拟机上安装 Apache 服务器后,使用服务器虚拟机的内部 IP 地址从客户端虚拟机连接到服务器虚拟机。
在 Google Cloud 控制台中,前往虚拟机实例页面。
从
vm-fw-rules-server
虚拟机的内部 IP 列中,复制虚拟机的内部 IP 地址。在
vm-fw-rules-client
虚拟机实例的连接列中,点击 SSH。在 SSH-in-browser 对话框中,点击授权并等待连接建立。
如需验证连接,请运行以下命令:
curl INTERNAL_IP -m 2
将
INTERNAL_IP
替换为vm-fw-rules-server
虚拟机的 IP 地址。Connection timed out
是预期的消息,因为每个虚拟机都会创建一个拒绝所有流量的隐式入站防火墙规则。如需允许流量,您可以向防火墙政策添加入站规则。关闭 SSH-in-browser 对话框。
更新全球网络防火墙政策以允许内部流量
在本部分中,您将更新全球网络防火墙政策以允许来自客户端虚拟机子网的内部流量。
控制台
在 Google Cloud 控制台中,转到防火墙页面。
在网络防火墙政策部分中,点击
fw-policy
。点击创建规则。
在优先级字段中,输入
501
。对于流量方向,选择入站。
在日志列表中,选择开启。
在目标部分的目标类型中,选择网络中的所有实例。
在来源部分的 IP 范围中,输入
192.168.10.0/24
。您应该还记得,IP 范围
192.168.10.0/24
分配给了 subnet-fo-rules-client。在目的地部分的 IP 类型中,选择 IPv4。在 IP 范围中,指定
10.0.0.0/24
。您应该还记得,IP 范围
10.0.0.0/24
分配给了 subnet-fo-rules-server。点击创建。
gcloud
如需更新防火墙政策,请运行以下命令:
gcloud compute network-firewall-policies rules create 501 \ --firewall-policy=fw-policy \ --direction=INGRESS \ --action=ALLOW \ --src-ip-ranges=192.168.10.0/24 \ --dest-ip-ranges=10.0.0.0/24 \ --layer4-configs=all \ --global-firewall-policy \ --enable-logging
测试连接
创建防火墙政策后,使用服务器虚拟机的内部 IP 地址从客户端虚拟机连接到服务器虚拟机。
在 Google Cloud 控制台中,前往虚拟机实例页面。
从
vm-fw-rules-server
虚拟机的内部 IP 列中,复制虚拟机的内部 IP 地址。在
vm-fw-rules-client
虚拟机实例的连接列中,点击 SSH。在 SSH-in-browser 对话框中,点击授权并等待连接建立。
如需验证连接,请运行以下命令:
curl INTERNAL_IP -m 2
将
INTERNAL_IP
替换为vm-fw-rules-server
虚拟机的 IP 地址。预期消息为
<!doctype html><html><body><h1>Hello World!</h1></body></html>
。关闭 SSH-in-browser 对话框。
如需查看防火墙日志,请参阅查看日志。
清理
为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。
在本部分中,您将删除在本教程中创建的资源。
删除防火墙政策
控制台
在 Google Cloud 控制台中,转到防火墙页面。
在网络防火墙政策部分中,点击
fw-policy
名称。点击关联标签页。
选中
vpc-fw-rules
复选框,然后点击移除关联。在移除防火墙政策关联对话框中,点击移除。
点击
fw-policy
标题旁边的删除。在删除防火墙政策对话框中,点击删除。
删除政策后,Google Cloud 控制台会显示防火墙政策页面。
gcloud
移除防火墙政策与 VPC 网络之间的关联。
gcloud compute network-firewall-policies associations delete \ --name=pol-association-fw-rules \ --firewall-policy=fw-policy \ --global-firewall-policy
如果您通过 Google Cloud 控制台设置防火墙政策与 VPC 网络之间的关联,请勿使用 gcloud CLI 命令移除关联。如果您忘记了关联的创建方式或者在运行命令时收到
The network firewall policy does not have an association with pol-association-fw-rules.
错误,请使用 Google Cloud 控制台移除关联。删除防火墙政策。
gcloud compute network-firewall-policies delete fw-policy \ --global
删除虚拟机
控制台
在 Google Cloud 控制台中,转到虚拟机实例页面。
选中
vm-fw-rules-client
和vm-fw-rules-server
虚拟机对应的复选框。点击删除。
在删除 2 个实例?对话框中,点击删除。
gcloud
如需删除 vm-fw-rules-client
和 vm-fw-rules-server
虚拟机,请运行以下命令:
gcloud compute instances delete vm-fw-rules-client vm-fw-rules-server \ --zone=us-central1-a
出现提示时,按 Y 键进行确认,然后按 Enter 键。
删除 Cloud NAT 网关和 Cloud Router 路由器
控制台
在 Google Cloud 控制台中,前往 Cloud Router 路由器页面。
选中
router-fw-rules
复选框。点击删除。
在删除 router-pf-rules 对话框中,点击删除。
删除 Cloud Router 路由器时,关联的 Cloud NAT 网关也会被删除。
gcloud
如需删除 router-firebase-rules Cloud Router 路由器,请运行以下命令:
gcloud compute routers delete router-fw-rules \ --region=us-central1
出现提示时,按 Y 键进行确认,然后按 Enter 键。
删除 Cloud Router 路由器时,关联的 Cloud NAT 网关也会被删除。
删除 VPC 网络及其子网
控制台
在 Google Cloud 控制台中,进入 VPC 网络页面。
在名称列中,点击
vpc-fw-rules
。点击删除 VPC 网络。
在删除网络对话框中,点击删除。
删除 VPC 时,其子网也会被删除。
gcloud
如需删除
vpc-fw-rules
VPC 网络的子网,请运行以下命令:gcloud compute networks subnets delete subnet-fw-rules-client subnet-fw-rules-server \ --region=us-central1
出现提示时,按 Y 键进行确认,然后按 Enter 键。
如需删除
vpc-fw-rules
VPC 网络,请运行以下命令:gcloud compute networks delete vpc-fw-rules
出现提示时,按 Y 键进行确认,然后按 Enter 键。