配置全球网络防火墙政策以拒绝通向特定地理位置的出站连接


本教程介绍了如何创建和配置全球网络防火墙政策,以阻止流向网络中特定地理位置的出站流量。 我们将通过一个示例详细演示如何创建包含两个子网的 Virtual Private Cloud (VPC) 网络,设置具有地理位置防火墙规则的防火墙政策,然后测试防火墙规则。

目标

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

  • 创建包含两个子网的自定义 VPC 网络,这些子网位于不同区域内。
  • 在以下每个区域创建一个虚拟机实例:美国和新加坡。
  • 创建 Cloud Router 路由器和 Cloud NAT 网关,以允许美国虚拟机访问公共互联网。
  • 创建全球网络防火墙政策并添加防火墙规则以启用 Identity-Aware Proxy (IAP)。
  • 在新加坡虚拟机上安装 Apache 服务器。
  • 添加防火墙规则,阻止流量进入特定地理位置。
  • 测试地理位置防火墙规则。

下图展示了自定义 VPC 网络内 us-central1asia-southeast1 区域中的虚拟机之间的流量。全球网络防火墙政策会阻止流向特定地理位置的出站流量。us-central1 区域中的虚拟机使用 Cloud Router 和 Cloud NAT 访问互联网,而不使用外部 IP 地址。us-central1 区域中的虚拟机使用 asia-southeast1 区域中虚拟机的外部 IP 地址来测试防火墙规则。

全球网络防火墙政策会阻止从子网流向特定地理位置的出站流量。
全球网络防火墙政策会阻止从子网流向特定地理位置的出站流量(点击可放大)。

准备工作

  • Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  • In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  • Make sure that billing is enabled for your Google Cloud project.

  • In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  • Make sure that billing is enabled for your Google Cloud project.

  • 确保您具有 Compute Network Admin 角色 (roles/compute.networkAdmin)。
  • Enable the Compute Engine and Identity-Aware Proxy (IAP) APIs.

    Enable the APIs

  • 如果您希望通过命令行进行操作,请安装 Google Cloud CLI。 如需了解该工具的概念性信息和安装信息,请参阅 gcloud CLI 概览

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

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

创建包含两个 IPv4 子网的自定义模式 VPC 网络。

控制台

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

    进入 VPC 网络页面

  2. 点击创建 VPC 网络

  3. 对于名称,输入 vpc-geo-location

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

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

    • 名称subnet-1-us
    • 区域us-central1
    • IPv4 范围10.0.0.0/24
  6. 点击完成

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

    • 名称subnet-2-sg
    • 区域asia-southeast1
    • IPv4 范围192.168.200.0/24
  8. 点击完成

  9. 点击创建

gcloud

  1. 如需打开终端,请点击激活 Cloud Shell
  2. 如需创建 VPC 网络,请运行以下命令:

    gcloud compute networks create vpc-geo-location \
      --subnet-mode=custom
    
  3. 为 Cloud Shell 提供授权对话框中,点击授权

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

    gcloud compute networks subnets create subnet-1-us \
      --network=vpc-geo-location \
      --region=us-central1 \
      --range=10.0.0.0/24
    
  5. 如需创建另一个子网,请运行以下命令:

    gcloud compute networks subnets create subnet-2-sg \
      --network=vpc-geo-location \
      --region=asia-southeast1 \
      --range=192.168.200.0/24
    

创建虚拟机

在本部分中,您将在上一部分配置的子网中创建两个虚拟机。

us-central1 区域中创建虚拟机。

us-central1 区域中创建一个没有外部 IP 地址的虚拟机。

控制台

如需在 us-central1 区域中创建虚拟机,请按照以下步骤操作:

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

    转到“创建实例”

  2. 对于名称,输入 instance-1-us

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

  4. 展开高级选项,然后展开网络

  5. 网络接口部分中,展开默认并指定以下配置参数:

    • 网络vpc-geo-location
    • 子网subnet-1-us IPv4 (10.0.0.0/24)
    • 外部 IPv4 地址
  6. 点击完成

  7. 点击创建

gcloud

如需在 us-central1 区域中创建虚拟机,请运行以下命令:

gcloud compute instances create instance-1-us \
     --network=vpc-geo-location \
     --zone=us-central1-a \
     --stack-type=IPV4_ONLY \
     --no-address \
     --subnet=subnet-1-us

asia-southeast1 区域中创建虚拟机。

控制台

如需在 asia-southeast1 区域中创建虚拟机,请按照以下步骤操作:

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

    转到“创建实例”

  2. 对于名称,输入 instance-2-sg

  3. 对于区域,请选择 asia-southeast1 (Singapore)

  4. 展开高级选项,然后展开网络

  5. 网络接口部分中,展开默认并指定以下配置参数:

    • 网络vpc-geo-location
    • 子网subnet-2-sg IPv4 (192.168.200.0/24)
  6. 点击完成

  7. 点击创建

gcloud

如需在 asia-southeast1 区域中创建虚拟机,请运行以下命令:

gcloud compute instances create instance-2-sg \
    --network=vpc-geo-location \
    --zone=asia-southeast1-b \
    --subnet=subnet-2-sg \
    --stack-type=IPV4_ONLY

创建 Cloud Router 路由器和 Cloud NAT 网关

在上一部分中,您创建了两个虚拟机:instance-1-usasia-southeast1。如需允许 instance-1-us 虚拟机访问公共互联网,请创建 Cloud Router 路由器和 Cloud NAT 网关。

控制台

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

    转到 Cloud NAT

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

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

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

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

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

  7. 在 Google Cloud 控制台中,进入 IP 地址页面。

    进入“IP 地址”

  8. 点击外部 IP 地址标签页,然后复制 Cloud NAT 的 IP 地址 (nat-auto-ip)。当您验证 instance-1-us 虚拟机与 instance-2-sg 虚拟机之间的连接时,将使用此 IP 地址。

gcloud

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

    gcloud compute routers create router-fw-rules \
      --network=vpc-geo-location \
      --region=us-central1
    
  2. 如需创建 Cloud NAT 网关,请运行以下命令:

    gcloud compute routers nats create nat-gateway \
      --router=router-fw-rules \
      --region=us-central1 \
      --auto-allocate-nat-external-ips \
      --nat-all-subnet-ip-ranges
    
  3. 如需查看 Cloud NAT IP 地址,请运行以下命令:

    gcloud compute routers get-nat-ip-info \
      router-fw-rules \
      --region=us-central1
    

    请务必复制您的 Cloud NAT 的 IP 地址 (natIp)。当您验证 instance-1-us 虚拟机与 instance-2-sg 虚拟机之间的连接时,将使用此 IP 地址。

创建全球网络防火墙政策以启用 IAP

在本部分中,您将创建全球网络防火墙政策并添加防火墙规则以启用 IAP。IAP 允许对虚拟机实例的管理员权限。

该防火墙规则具有以下特征。

  • 来自 IP 范围 35.235.240.0/20 的入站流量。此范围包含 IAP 用于 TCP 转发的所有 IP 地址。
  • 与您希望通过使用 IAP TCP 转发访问的所有端口(例如,用于 SSH 的端口 22)的连接。

控制台

如需允许 IAP 访问 vpc-geo-location 网络中的所有虚拟机实例,请按照以下步骤操作:

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

    转到“防火墙政策”

  2. 点击创建防火墙政策

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

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

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

    1. 优先级字段中,输入 100
    2. 对于流量方向,选择入站
    3. 对于对匹配项执行的操作,选择允许
    4. 日志列表中,选择开启
    5. 目标部分的目标类型中,选择网络中的所有实例
    6. 来源部分的 IP 范围中,输入 35.235.240.0/20
    7. 协议和端口部分中,选择指定的协议和端口
    8. 选中 TCP 复选框,在端口字段中,输入 22
    9. 点击创建
  6. 点击继续

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

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

  9. 点击继续

  10. 点击创建

gcloud

如需允许 IAP 访问 vpc-geo-location 网络中的所有虚拟机实例,请运行以下命令:

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

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

    gcloud compute network-firewall-policies rules create 100 \
        --firewall-policy=fw-policy \
        --direction=INGRESS \
        --action=ALLOW \
        --layer4-configs=tcp:22 \
        --src-ip-ranges=35.235.240.0/20 \
        --global-firewall-policy \
        --enable-logging
    
    
  3. 如需将防火墙政策与 VPC 网络关联,请运行以下命令:

    gcloud compute network-firewall-policies associations create \
        --firewall-policy=fw-policy \
        --network=vpc-geo-location \
        --name=pol-association-fw-rules \
        --global-firewall-policy
    

创建防火墙规则

在本部分中,您将创建防火墙规则以允许在 instance-2-sg 虚拟机上建立入站连接。

控制台

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

    转到“防火墙政策”

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

  3. 点击创建规则

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

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

  6. 对于对匹配项执行的操作,选择允许

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

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

  9. 来源部分的 IP 范围中,输入 NAT_IP_ADDRESS

    NAT_IP_ADDRESS 替换为分配给您的 Cloud NAT 的 IP 地址。如需了解详情,请参阅创建 Cloud Router 路由器和 Cloud NAT 网关

  10. 点击创建

gcloud

如需更新防火墙政策,请运行以下命令:

gcloud compute network-firewall-policies rules create 500 \
    --firewall-policy=fw-policy \
    --direction=INGRESS \
    --action=ALLOW \
    --src-ip-ranges=NAT_IP_ADDRESS \
    --layer4-configs=all \
    --global-firewall-policy \
    --enable-logging

NAT_IP_ADDRESS 替换为分配给您的 Cloud NAT 的 IP 地址。如需了解详情,请参阅创建 Cloud Router 路由器和 Cloud NAT 网关

安装 Apache 服务器

在本部分中,您将在 instance-2-sg 虚拟机上安装 Apache 服务器。

控制台

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

    转到虚拟机实例

  2. instance-2-sg 虚拟机实例的连接列中,点击 SSH

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

  4. 如需更新实例上的软件包列表,请运行以下命令:

    sudo apt-get update
    

    该过程完成后,会生成以下消息:

    Reading package lists... Done.

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

    sudo apt-get install apache2 php7.0
    

    在此过程中,它会生成以下消息:

    After this operation, 56.0 MB of additional disk space will be used. Do you want to continue? [Y/n]

    Y 键进行确认,然后按 Enter 键。

  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 对话框。

gcloud

  1. 如需使用 SSH 连接到 instance-2-sg 虚拟机,请运行以下命令:

    gcloud compute ssh instance-2-sg \
        --zone=asia-southeast1-b \
        --tunnel-through-iap
    

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

  2. 如需更新实例上的软件包列表,请运行以下命令:

    sudo apt-get update
    

    该过程完成后,会生成以下消息:

    Reading package lists... Done.

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

    sudo apt-get install apache2 php7.0
    

    在此过程中,它会生成以下消息:

    After this operation, 56.0 MB of additional disk space will be used. Do you want to continue? [Y/n]

    Y 键进行确认,然后按 Enter 键。

  4. 如需覆盖 Apache Web 服务器的默认网页,请运行以下命令:

    echo '<!doctype html><html><body><h1>Hello World!</h1></body></html>' | sudo tee /var/www/html/index.html
    
  5. 若要关闭 SSH-in-browser,请输入 exit

验证连接

instance-2-sg 虚拟机上安装 Apache 服务器后,使用 instance-2-sg 虚拟机的外部 IP 地址从 instance-2-sg 虚拟机连接到 instance-1-us 虚拟机。

控制台

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

    转到虚拟机实例

  2. instance-2-sg 虚拟机的外部 IP 列中,复制虚拟机的外部 IP 地址。

  3. instance-1-us 虚拟机实例的连接列中,点击 SSH

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

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

    curl EXTERNAL_IP -m 2
    

    EXTERNAL_IP 替换为 instance-2-sg 虚拟机的 IP 地址。

    预期响应消息如下所示:

    <!doctype html><html><body><h1>Hello World!</h1></body></html>

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

gcloud

  1. 如需查看 instance-2-sg 虚拟机的外部 IP 地址,请运行以下命令:

    gcloud compute instances describe instance-2-sg \
        --zone=asia-southeast1-b \
        --format='get(networkInterfaces[0].accessConfigs[0].natIP)'
    

    出现提示时,按 Y 键进行确认,然后按 Enter 键。 请务必记下 instance-2-sg 虚拟机的外部 IP 地址。

  2. 如需使用 SSH 连接到 instance-1-us 虚拟机,请运行以下命令:

    gcloud compute ssh instance-1-us \
        --zone=us-central1-a \
        --tunnel-through-iap
    
  3. 如需验证连接,请运行以下命令:

      curl EXTERNAL_IP -m 2
    

    EXTERNAL_IP 替换为 instance-2-sg 虚拟机的 IP 地址。

    预期响应消息如下所示:

    <!doctype html><html><body><h1>Hello World!</h1></body></html>

  4. 若要关闭 SSH-in-browser,请输入 exit

添加防火墙规则,阻止流量进入特定地理位置

在本部分中,您将为 VPC vpc-geo-location 添加防火墙规则,以阻止流向意大利、波兰和新加坡的出站流量。

控制台

如需在创建全球网络防火墙政策部分中创建的 fw-policy 中添加新规则,请按照以下步骤操作:

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

    转到“防火墙政策”

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

  3. 点击创建规则

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

  5. 流量方向列表中,选择出站

  6. 对匹配项执行的操作部分,选择拒绝

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

  8. 目的地部分的地理位置中,选择新加坡 (SG)波兰 (PL)。和意大利 (IT)

  9. 点击确定

  10. 点击创建

gcloud

如需在创建全球网络防火墙政策部分中创建的 fw-policy 中添加新规则,请运行以下命令:

gcloud compute network-firewall-policies rules create 200 \
    --firewall-policy=fw-policy \
    --direction=EGRESS \
    --action=DENY \
    --dest-region-codes=SG,PL,IT \
    --layer4-configs=all \
    --global-firewall-policy \
    --enable-logging

测试地理位置防火墙规则

控制台

添加阻止流向新加坡 (SG)、波兰 (PL) 和意大利 (IT) 的出站流量的规则后,请按照以下步骤测试规则:

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

    转到虚拟机实例

  2. instance-2-sg 虚拟机的外部 IP 列中,复制虚拟机的外部 IP 地址。

  3. instance-1-us 虚拟机实例的连接列中,点击 SSH

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

  5. 如需验证流向 instance-2-sg 虚拟机的出站流量是否被阻止,请运行以下命令:

    curl EXTERNAL_IP -m 2
    

    EXTERNAL_IP 替换为 instance-2-sg 虚拟机的 IP 地址。

    Connection timed out 是预期消息,因为您创建了防火墙规则来拒绝从美国虚拟机流向新加坡虚拟机的外部流量。

  6. 如需验证流向波兰的出站流量是否被阻止,请运行以下命令:

      curl  `https://www.gov.pl` -m 2
    

    Connection timed out 是预期消息,因为您创建了防火墙规则来拒绝流向波兰网站的外部流量。

  7. 如需验证流向意大利的出站流量是否被阻止,请运行以下命令:

      curl  `https://www.esteri.it/it/` -m 2
    

    Connection timed out 是预期消息,因为您创建了防火墙规则来拒绝流向意大利网站的外部流量。

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

gcloud

添加阻止流向新加坡 (SG)、波兰 (PL) 和意大利 (IT) 的出站流量的规则后,请运行以下命令来测试该规则:

  1. 如需查看 instance-2-sg 虚拟机的外部 IP 地址,请运行以下命令:

    gcloud compute instances describe instance-2-sg \
       --format='get(networkInterfaces[0].accessConfigs[0].natIP)'
    

    出现提示时,按 Y 键进行确认,然后按 Enter 键。请务必记下 instance-2-sg 虚拟机的外部 IP 地址。

  2. 如需使用 SSH 连接到 instance-1-us 虚拟机,请运行以下命令:

    gcloud compute ssh instance-1-us \
       --zone=us-central1-a \
       --tunnel-through-iap
    
  3. 如需验证流向新加坡的出站流量是否已被阻止,请运行以下命令:

    curl EXTERNAL_IP -m 2
    

    EXTERNAL_IP 替换为 instance-2-sg 虚拟机的 IP 地址。

    Connection timed out 是预期消息,因为您创建了防火墙规则来拒绝从美国虚拟机流向新加坡虚拟机的外部流量。

  4. 如需验证流向波兰的出站流量是否被阻止,请运行以下命令:

    curl https://www.gov.pl -m 2
    

    Connection timed out 是预期消息,因为您创建了防火墙规则来拒绝来自波兰网站的外部流量。

  5. 如需验证流向意大利的出站流量是否被阻止,请运行以下命令:

    curl  https://www.esteri.it/it/ -m 2
    

    Connection timed out 是预期消息,因为您创建了防火墙规则来拒绝流向意大利网站的外部流量。

  6. 若要关闭 SSH-in-browser 对话框,请输入 exit

查看日志

您可以通过访问日志来验证防火墙规则是否已应用于出站流量。如需查看日志详细信息,请按以下步骤操作:

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

    转到“防火墙政策”

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

  3. 点击 列显示选项

  4. 显示的列对话框中,选择命中数,然后点击确定

  5. 命中数列中,选择您在创建全球网络防火墙政策期间创建的规则的数量。Logs Explorer 页面随即会打开。

  6. 如需查看应用于出站流量的防火墙规则,请展开单个日志。您可以查看连接、处置和远程位置详细信息。

清理

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

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

删除防火墙政策

控制台

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

    转到“防火墙政策”

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

  3. 点击关联标签页。

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

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

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

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

gcloud

  1. 移除防火墙政策与 VPC 网络之间的关联。

    gcloud compute network-firewall-policies associations delete \
      --name=pol-association-fw-rules \
      --firewall-policy=fw-policy \
      --global-firewall-policy
    
  2. 删除防火墙政策。

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

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

删除虚拟机

控制台

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

    转到虚拟机实例

  2. 选中 instance-1-usinstance-2-sg 虚拟机对应的复选框。

  3. 点击删除

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

gcloud

  1. 如需删除 instance-1-us 虚拟机,请运行以下命令:

    gcloud compute instances delete instance-1-us \
        --zone=us-central1-a
    

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

  2. 如需删除 instance-2-sg 虚拟机,请运行以下命令:

    gcloud compute instances delete instance-2-sg \
        --zone=asia-southeast1-b
    

    出现提示时,按 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-fw-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-geo-location

  3. 点击删除 VPC 网络

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

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

gcloud

  1. 如需删除 vpc-geo-location VPC 网络的子网 subnet-1-us,请运行以下命令:

    gcloud compute networks subnets delete subnet-1-us \
        --region=us-central1
    

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

  2. 如需删除 vpc-geo-location VPC 网络的子网 subnet-2-sg,请运行以下命令:

    gcloud compute networks subnets delete subnet-2-sg \
        --region=asia-southeast1
    

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

  3. 如需删除 vpc-geo-location VPC 网络,请运行以下命令:

    gcloud compute networks delete vpc-geo-location
    

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

后续步骤