配置全球网络防火墙政策以允许入站流量


在具有多个子网的自定义 Virtual Private Cloud (VPC) 网络中,默认情况下允许出站流量,但拒绝入站流量。如需允许入站流量并允许不同子网中的虚拟机实例相互通信,您可以在 VPC 网络上的 Cloud 新一代防火墙中创建全球网络防火墙政策,以允许来自子网特定 IP 地址范围的入站流量。

本教程介绍如何配置全球网络防火墙政策,以允许自定义 VPC 网络中的虚拟机子网之间的内部流量。

目标

本教程介绍如何完成以下任务:

  • 创建包含两个子网的自定义 VPC 网络。
  • 在 VPC 网络的不同子网中创建两个没有外部 IP 地址的 Linux 虚拟机实例(客户端虚拟机和服务器虚拟机)。
  • 创建 Cloud Router 路由器和 Cloud NAT 网关,这是下载软件包的最佳实践。
  • 在服务器虚拟机上安装 Apache 服务器。
  • 使用以下规则创建全球网络防火墙政策:
    • 允许发送到任何目的地的出站流量。
    • 启用防火墙日志记录。
    • 使用 Identity-Aware Proxy (IAP) 允许通过 SSH 连接到虚拟机。
    • 允许客户端虚拟机连接到运行 Apache 服务器的服务器虚拟机。
  • 测试连接。

下图展示了全球网络防火墙政策允许内部入站流量后,自定义 VPC 网络子网之间的流量流动。

允许来自自定义 VPC 网络子网的入站流量的全球网络防火墙政策。
允许来自自定义 VPC 网络子网的入站流量的全球网络防火墙政策。(点击可放大)。

准备工作

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  3. 确保您的 Google Cloud 项目已启用结算功能

  4. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  5. 确保您的 Google Cloud 项目已启用结算功能

  6. 为您的项目启用 Compute Engine API
  7. 确保您具有 Compute Network Admin (roles/compute.networkAdmin) Identity and Access Management 角色。
  8. 如果您希望通过命令行进行操作,请安装 Google Cloud CLI。 如需了解该工具的概念性信息和安装信息,请参阅 gcloud CLI 概览

    注意:如果您之前未运行过 Google Cloud CLI,请先运行 gcloud init 以初始化 gcloud CLI 目录。

创建包含子网的自定义 VPC 网络

在本部分中,您将创建包含两个 IPv4 子网的自定义模式 VPC 网络。

控制台

  1. 在 Google Cloud 控制台中,进入 VPC 网络页面。

    进入 VPC 网络页面

  2. 点击创建 VPC 网络

  3. 对于名称,输入 vpc-fw-rules

  4. 对于说明,输入 VPC network for the firewall rules tutorial

  5. 对于子网创建模式,选择自定义

  6. 新子网部分,为子网指定以下配置参数:

    • 名称subnet-fw-rules-server
    • 区域us-central1 (Iowa)
    • IPv4 范围10.0.0.0/24
    • 专用 Google 访问通道开启
  7. 点击完成

  8. 点击添加子网并指定以下配置参数:

    • 名称subnet-fw-rules-client
    • 区域us-central1 (Iowa)
    • IPv4 范围192.168.10.0/24
    • 专用 Google 访问通道开启
  9. 点击完成

  10. 向下滚动,然后点击创建

gcloud

  1. 如需创建 VPC 网络,请运行以下命令:

    gcloud compute networks create vpc-fw-rules \
      --subnet-mode=custom \
      --description="VPC network for the firewall rules tutorial"
    
  2. 可选:在为 Cloud Shell 提供授权对话框中,点击授权

  3. 如需创建子网,请运行以下命令:

    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
    
  4. 如需创建另一个子网,请运行以下命令:

    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 虚拟机。

创建服务器虚拟机

控制台

如需创建服务器虚拟机,请按照以下步骤操作:

  1. 在 Google Cloud 控制台中,转到创建实例页面。

    转到“创建实例”

  2. 对于名称,输入 vm-fw-rules-server

  3. 对于区域,请选择 us-central1 (Iowa)

  4. 向下滚动并展开高级选项,然后展开网络

  5. 网络接口部分中,指定以下配置参数:

    • 网络vpc-fw-rules
    • 子网subnet-fw-rules-server IPv4 (10.0.0.0/24)
    • 外部 IPv4 地址
  6. 点击完成

  7. 点击创建

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

创建客户端虚拟机

控制台

如需创建客户端虚拟机,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,转到创建实例页面。

    转到“创建实例”

  2. 对于名称,输入 vm-fw-rules-client

  3. 对于区域,请选择 us-central1 (Iowa)

  4. 向下滚动并展开高级选项,然后展开网络

  5. 网络接口部分中,指定以下配置参数:

    • 网络vpc-fw-rules
    • 子网subnet-fw-rules-client IPv4 (192.168.10.0/24)
    • 外部 IPv4 地址
  6. 点击完成

  7. 点击创建

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 网关。

控制台

  1. 在 Google Cloud 控制台中,转到 Cloud NAT 页面。

    转到 Cloud NAT

  2. 点击开始使用创建 Cloud NAT 网关

  3. 对于网关名称,输入 gateway-fw-rules

  4. NAT 类型列表中,选择公共

  5. 选择 Cloud Router 路由器部分中,指定以下配置参数:

    • 网络vpc-fw-rules
    • 区域us-central1
    • Cloud Router 路由器创建新路由器
      1. 对于名称,输入 router-fw-rules
      2. 点击创建
  6. 点击创建

gcloud

  1. 要创建 Cloud Router 路由器,请运行以下命令:

    gcloud compute routers create router-fw-rules \
      --network=vpc-fw-rules \
      --region=us-central1
    
  2. 如需创建 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 的出站规则。
  • 启用了日志记录。通过防火墙规则日志记录,您可以审核、验证和分析防火墙规则所带来的影响。

控制台

  1. 在 Google Cloud 控制台中,转到防火墙页面。

    转到“防火墙政策”

  2. 点击创建防火墙政策

  3. 配置政策部分的政策名称中,输入 fw-policy

  4. 部署范围列表中,选择全局,然后点击继续

  5. 如需为政策创建规则,请在添加规则部分中点击添加规则

    1. 优先级字段中,输入 65534
    2. 流量方向列表中,选择出站
    3. 日志列表中,选择开启
    4. 目标部分的目标类型中,选择网络中的所有实例
    5. 目的地部分的 IP 范围中,输入 0.0.0.0/0
    6. 协议和端口部分中,选择全部允许
    7. 点击创建
  6. 点击继续

  7. 如需将 VPC 网络与政策关联,在将政策与 VPC 网络关联部分中,点击关联

  8. 选中 vpc-fw-rules 对应的复选框,然后点击关联

  9. 点击继续

  10. 点击创建

gcloud

  1. 如需创建防火墙政策,请运行以下命令:

    gcloud compute network-firewall-policies create fw-policy \
        --global
    
  2. 如需创建允许发送到所有目的地的流量并启用日志的防火墙规则,请运行以下命令:

    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
    
  3. 如需将防火墙政策与 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 网络中的所有虚拟机实例,请执行以下操作:

  1. 在 Google Cloud 控制台中,转到防火墙页面。

    转到“防火墙政策”

  2. 网络防火墙政策部分中,点击 fw-policy

  3. 点击创建规则

  4. 优先级字段中,输入 500

  5. 对于流量方向,选择入站

  6. 日志列表中,选择开启

  7. 目标部分的目标类型中,选择网络中的所有实例

  8. 来源部分的 IP 范围中,输入 35.235.240.0/20

  9. 协议和端口部分中,选择指定的协议和端口

  10. 选中 TCP 复选框,在端口字段中,输入 223389(以英文逗号分隔)。

  11. 点击创建

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 服务器。

  1. 在 Google Cloud 控制台中,前往虚拟机实例页面。

    转到虚拟机实例

  2. vm-fw-rules-server 虚拟机实例的连接列中,点击 SSH

  3. SSH-in-browser 对话框中,点击授权并等待连接建立。

  4. 如需安装 apache2 软件包,请在命令提示符下运行以下命令:

    sudo apt update && sudo apt -y install apache2
    

    安装 Apache 后,操作系统会自动启动 Apache 服务器。

  5. 如需验证 Apache 正在运行,请运行以下命令:

    sudo systemctl status apache2 --no-pager
    
  6. 如需覆盖 Apache Web 服务器的默认网页,请运行以下命令:

    echo '<!doctype html><html><body><h1>Hello World!</h1></body></html>' | sudo tee /var/www/html/index.html
    
  7. 关闭 SSH-in-browser 对话框。

测试连接

在服务器虚拟机上安装 Apache 服务器后,使用服务器虚拟机的内部 IP 地址从客户端虚拟机连接到服务器虚拟机。

  1. 在 Google Cloud 控制台中,前往虚拟机实例页面。

    转到虚拟机实例

  2. vm-fw-rules-server 虚拟机的内部 IP 列中,复制虚拟机的内部 IP 地址。

  3. vm-fw-rules-client 虚拟机实例的连接列中,点击 SSH

  4. SSH-in-browser 对话框中,点击授权并等待连接建立。

  5. 如需验证连接,请运行以下命令:

    curl INTERNAL_IP -m 2
    

    INTERNAL_IP 替换为 vm-fw-rules-server 虚拟机的 IP 地址。

    Connection timed out 是预期的消息,因为每个虚拟机都会创建一个拒绝所有流量的隐式入站防火墙规则。如需允许流量,您可以向防火墙政策添加入站规则。

  6. 关闭 SSH-in-browser 对话框。

更新全球网络防火墙政策以允许内部流量

在本部分中,您将更新全球网络防火墙政策以允许来自客户端虚拟机子网的内部流量。

控制台

  1. 在 Google Cloud 控制台中,转到防火墙页面。

    转到“防火墙政策”

  2. 网络防火墙政策部分中,点击 fw-policy

  3. 点击创建规则

  4. 优先级字段中,输入 501

  5. 对于流量方向,选择入站

  6. 日志列表中,选择开启

  7. 目标部分的目标类型中,选择网络中的所有实例

  8. 来源部分的 IP 范围中,输入 192.168.10.0/24

    您应该还记得,IP 范围 192.168.10.0/24 分配给了 subnet-fo-rules-client

  9. 目的地部分的 IP 类型中,选择 IPv4。在 IP 范围中,指定 10.0.0.0/24

    您应该还记得,IP 范围 10.0.0.0/24 分配给了 subnet-fo-rules-server

  10. 点击创建

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 地址从客户端虚拟机连接到服务器虚拟机。

  1. 在 Google Cloud 控制台中,前往虚拟机实例页面。

    转到虚拟机实例

  2. vm-fw-rules-server 虚拟机的内部 IP 列中,复制虚拟机的内部 IP 地址。

  3. vm-fw-rules-client 虚拟机实例的连接列中,点击 SSH

  4. SSH-in-browser 对话框中,点击授权并等待连接建立。

  5. 如需验证连接,请运行以下命令:

    curl INTERNAL_IP -m 2
    

    INTERNAL_IP 替换为 vm-fw-rules-server 虚拟机的 IP 地址。

    预期消息为 <!doctype html><html><body><h1>Hello World!</h1></body></html>

  6. 关闭 SSH-in-browser 对话框。

如需查看防火墙日志,请参阅查看日志

清理

为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。

在本部分中,您将删除在本教程中创建的资源。

删除防火墙政策

控制台

  1. 在 Google Cloud 控制台中,转到防火墙页面。

    转到“防火墙政策”

  2. 网络防火墙政策部分中,点击 fw-policy 名称。

  3. 点击关联标签页。

  4. 选中 vpc-fw-rules 复选框,然后点击移除关联

  5. 移除防火墙政策关联对话框中,点击移除

  6. 点击 fw-policy 标题旁边的删除

  7. 删除防火墙政策对话框中,点击删除

    删除政策后,Google Cloud 控制台会显示防火墙政策页面。

gcloud

  1. 移除防火墙政策与 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 控制台移除关联。

  2. 删除防火墙政策。

    gcloud compute network-firewall-policies delete fw-policy \
        --global
    

删除虚拟机

控制台

  1. 在 Google Cloud 控制台中,转到虚拟机实例页面。

    转到虚拟机实例

  2. 选中 vm-fw-rules-clientvm-fw-rules-server 虚拟机对应的复选框。

  3. 点击删除

  4. 删除 2 个实例?对话框中,点击删除

gcloud

如需删除 vm-fw-rules-clientvm-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 路由器

控制台

  1. 在 Google Cloud 控制台中,前往 Cloud Router 路由器页面。

    前往“Cloud Router 路由器”

  2. 选中 router-fw-rules 复选框。

  3. 点击删除

  4. 删除 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 网络及其子网

控制台

  1. 在 Google Cloud 控制台中,进入 VPC 网络页面。

    进入 VPC 网络页面

  2. 名称列中,点击 vpc-fw-rules

  3. 点击删除 VPC 网络

  4. 删除网络对话框中,点击删除

删除 VPC 时,其子网也会被删除。

gcloud

  1. 如需删除 vpc-fw-rules VPC 网络的子网,请运行以下命令:

    gcloud compute networks subnets delete subnet-fw-rules-client subnet-fw-rules-server \
        --region=us-central1
    

    出现提示时,按 Y 键进行确认,然后按 Enter 键。

  2. 如需删除 vpc-fw-rules VPC 网络,请运行以下命令:

    gcloud compute networks delete vpc-fw-rules
    

    出现提示时,按 Y 键进行确认,然后按 Enter 键。