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

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

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

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

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

控制台

  1. 在 Cloud de Confiance 控制台中,前往 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 出站流量规则,允许任何实例将流量发送到任何目的地( Cloud de Confiance by S3NS阻止的流量除外)。
  • 来源为 0.0.0.0/0 且优先级最低 (65535) 的 deny 入站流量规则,通过阻止入站连接来保护所有实例。

如需了解详情,请参阅隐式规则

创建客户端和服务器虚拟机

在本部分中,您将在上一部分创建的 VPC 网络的子网中创建两个没有外部 IP 地址的 Linux 虚拟机。

创建服务器虚拟机

控制台

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

  1. 在 Cloud de Confiance 控制台中,前往创建实例页面。

    转到“创建实例”

  2. 机器配置窗格中,执行以下操作:

    1. 对于名称,输入 vm-fw-rules-server
    2. 对于区域,请选择 us-central1 (Iowa)
  3. 在导航菜单中,点击网络

    1. 网络接口部分中,点击 default 并指定以下配置参数:
      • 网络vpc-fw-rules
      • 子网subnet-fw-rules-server IPv4 (10.0.0.0/24)
      • 外部 IPv4 地址
    2. 点击完成
  4. 点击创建

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. 在 Cloud de Confiance 控制台中,前往创建实例页面。

    转到“创建实例”

  2. 机器配置窗格中,执行以下操作:

    1. 对于名称,输入 vm-fw-rules-client
    2. 对于区域,请选择 us-central1 (Iowa)
  3. 在导航菜单中,点击网络

    1. 网络接口部分中,点击 default 并指定以下配置参数:
      • 网络vpc-fw-rules
      • 子网subnet-fw-rules-client IPv4 (192.168.10.0/24)
      • 外部 IPv4 地址
    2. 点击完成
  4. 点击创建

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. 在 Cloud de Confiance 控制台中,前往 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. 在 Cloud de Confiance 控制台中,前往防火墙政策页面。

    转到“防火墙政策”

  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 地址。

    对于 IPv6 虚拟机,请使用以下 IP 范围:2600:2d00:1:7::/64

  • 允许连接到您希望通过使用 IAP TCP 转发访问的所有端口,例如,SSH 的端口 22 和 RDP 的端口 3389

控制台

如需允许 RDP 和 SSH 访问 vpc-pf-rules 网络中的所有虚拟机实例,请执行以下操作:

  1. 在 Cloud de Confiance 控制台中,前往防火墙政策页面。

    转到“防火墙政策”

  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. 在 Cloud de Confiance 控制台中,转到虚拟机实例页面。

    转到虚拟机实例

  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. 在 Cloud de Confiance 控制台中,转到虚拟机实例页面。

    转到虚拟机实例

  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. 在 Cloud de Confiance 控制台中,前往防火墙政策页面。

    转到“防火墙政策”

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

  3. 点击创建规则

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

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

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

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

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

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

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

    您应该还记得,IP 范围 10.0.0.0/24 分配给了 subnet-fw-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. 在 Cloud de Confiance 控制台中,转到虚拟机实例页面。

    转到虚拟机实例

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

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