文档首页/ 虚拟私有云 VPC/ 最佳实践/ VPC网络安全/ 通过EIP和第三方防火墙实现公网访问流量清洗
更新时间:2025-12-30 GMT+08:00
分享

通过EIP和第三方防火墙实现公网访问流量清洗

应用场景

虚拟私有云支持用户自主配置和管理虚拟网络环境,您可以在VPC中使用安全组及网络ACL来进行网络访问控制,也可以使用第三方防火墙软件,对云上的业务进行灵活的安全控制。

本文将重点介绍如何通过第三方防火墙软件,对VPC与公网之间的互访流量进行过滤与清洗,帮助您构建安全、合规的网络边界,实现VPC与公网的安全互通。

方案架构

图1所示,本示例中VPC-X包含两个子网,一是部署业务集群的Subnet-WEB子网,二是部署防火墙节点的Subnet-FW子网。其中,Subnet-FW子网关联VPC默认路由表,Subnet-WEB子网则关联自定义路由表,以实现流量控制。具体流量转发路径如下:
  • 业务出网流量:Subnet-WEB子网内的业务流量通过自定义路由,全部引入ECS-FW(防火墙)进行安全清洗,经SNAT规则(源地址转换)完成地址转换后,最终通过ECS-FW绑定的EIP访问公网。
  • 外网访问流量:外部公网请求通过ECS-FW绑定的EIP进入,并经ECS-FW(防火墙)清洗,由DNAT规则(目的地址转换)转发至Subnet-WEB子网内的业务ECS-WEB。
图1 VPC访问公网组网规划

资源规划说明

本示例中需要创建虚拟私有云VPC、弹性云服务器ECS以及弹性公网IP,资源规划总体说明请参见表1

以下资源规划详情仅为示例,供您参考,您需要根据实际业务情况规划资源。

表1 VPC访问公网组网资源规划总体说明

资源

说明

虚拟私有云VPC

本示例有1个VPC,VPC的资源规划详情如表2所示。

VPC-X有两个路由表,一个系统自带的默认路由表,一个用户创建的自定义路由表,其中防火墙子网Subnet-FW关联默认路由表,业务子网Subnet-WEB关联自定义路由表。

默认路由表控制Subnet-FW的入方向流量,自定义路由表控制Subnet-WEB的出方向流量。

弹性云服务器ECS

本示例中共有2个ECS,ECS的资源规划详情如表3所示。

假如您的ECS位于不同的安全组,需要在安全组中添加规则放通对端安全组的网络。

弹性公网IP

本示例有1个EIP,并且EIP需要绑定至部署防火墙的ECS-FW。

表2 VPC资源规划详情

VPC名称

VPC网段

子网名称

子网网段

关联路由表

子网作用

VPC-X

192.168.0.0/16

Subnet-FW

192.168.1.0/24

默认路由表

rtb-VPC-X

部署防火墙的子网

Subnet-WEB

192.168.2.0/24

自定义路由表

rtb-VPC-X-WEB

部署业务的子网

表3 ECS资源规划详情

ECS名称

VPC名称

子网名称

私有IP

弹性公网IP

镜像

安全组

ECS作用

ECS-FW

VPC-X

Subnet-FW

192.168.1.100

116.XX.XX.57

公共镜像:

Huawei Cloud EulerOS 2.0 标准版 64位

Sg-X:

通用Web服务器

部署防火墙的云服务器

ECS-WEB

VPC-X

Subnet-WEB

192.168.2.229

部署业务的云服务器

操作步骤

  1. 创建VPC及其子网。

    具体方法请参见创建虚拟私有云和子网

    本示例中的VPC和子网资源规划详情请参见表2

  2. 创建ECS。

    具体方法请参见自定义购买ECS

    本示例中的ECS资源规划详情请参见表3

  3. 配置ECS-FW的网卡,并安装第三方防火墙软件。

    1. 关闭ECS-FW的网卡“源/目的检查”。
      1. 在ECS列表中,单击目标ECS的名称。

        进入ECS详情页。

      2. 选择“弹性网卡”页签,并单击展开ECS的网卡详情区域,可以查看“源/目的检查”功能。

        图2所示,表示“源/目的检查”功能已关闭。

        图2 关闭网卡的“源/目的检查”功能
    2. 在ECS-FW中安装第三方防火墙。

      您可以自行安装或者通过华为云商店购买第三方防火墙。

  4. 创建EIP,并为ECS-FW绑定EIP。

    1. 申请EIP,具体方法请参见获取EIP
    2. 将EIP绑定至ECS-FW,具体方法请参见为资源绑定EIP

  5. 创建VPC-X内的自定义路由表,并将Subnet-WEB关联至自定义路由表。

    1. 在VPC-X内,创建自定义路由表。

      具体方法请参见创建自定义路由表

    2. 将子网Subnet-WEB的关联至创建的自定义路由表。

      子网创建完成后,自动关联VPC默认路由表,因此当前子网Subnet-WEB关联的是VPC-X的默认路由表,需要更换为自定义路由表。

      具体方法请参见更换子网关联的路由表

  6. (可选)为云服务器配置虚拟IP。

    此步骤为可选:您可以在VPC-X中创建主备服务器,并绑定同一虚拟IP,当主服务器发生故障无法对外提供服务时,动态将虚拟IP切换到备服务器,继续对外提供服务。如果部署第三方防火墙的弹性云服务器不需要主备,此步骤不需要执行。
    1. 在防火墙所在子网Subnet-FW内,创建虚拟IP。

      具体方法请参见申请虚拟IP地址

    2. 将虚拟IP绑定到部署防火墙的主备ECS上。

      具体方法请参见虚拟IP绑定云服务器

    3. 为虚拟IP绑定EIP。

      具体方法请参见将虚拟IP绑定至实例或者EIP

  7. 在自定义路由表中,添加路由。

    具体方法请参见添加自定义路由

    路由规划说明如表4所示。

    表4 VPC路由规划说明

    VPC路由表

    目的地址

    下一跳类型

    下一跳

    路由类型

    路由作用

    自定义路由表

    rtb-VPC-X-WEB

    0.0.0.0/0

    服务器实例

    ECS-FW

    自定义

    本文以防火墙部署在一台ECS上为例,路由说明如下:
    • 目的地址指向部署防火墙的ECS-FW
    • 将Subnet-WEB的出方向流量引入防火墙

    如果您的防火墙同时部署在多台ECS上,对外通过虚拟IP通信,则路由下一跳选择虚拟IP。

  8. 登录ECS-FW,配置SNAT和DNAT规则等。

    在本示例中,由于未部署第三方防火墙,将通过配置iptables规则来模拟防火墙的SNAT与DNAT功能:基于SNAT规则,可实现ECS-WEB借助ECS-FW绑定的EIP访问公网;而基于DNAT规则,能通过ECS-FW将外部公网流量转发至ECS-WEB。

    ECS有多种登录方法,具体请参见登录弹性云服务器

    1. 打开ECS-FW的IP转发功能。
      1. 执行以下命令,切换root用户。

        su root

      2. 执行以下命令,查看IP转发功能是否已开启。

        cat /proc/sys/net/ipv4/ip_forward

        回显结果:1为开启,0为关闭。

        • 回显为1,任务结束。
        • 回显为0,继续执行以下操作。
      3. 执行以下配置,打开IP转发功能。
        1. 执行以下命令,打开“/etc/sysctl.conf”文件。

          vim /etc/sysctl.conf

        2. i进入编辑模式。
        3. 修改或者添加以下内容。
          net.ipv4.ip_forward = 1  # 开启IPv4转发
          net.ipv6.conf.all.forwarding = 1  # 若需要支持IPv6,开启IPv6转发
        4. ESC退出,并输入:wq!保存配置。
      4. 执行以下命令,使修改生效。

        sudo sysctl -p

        以上配置为永久生效,重启后不会失效。

    2. 执行以下命令,清空NAT规则。

      iptables -t nat -F

    3. 执行以下命令,配置DNAT规则。

      iptables -t nat -A PREROUTING -d 192.168.1.100 -p icmp --icmp-type echo-request -j DNAT --to-destination 192.168.2.229

      其中,192.168.1.100为Subnet-FW的私有IP地址,192.168.2.229为Subnet-WEB的私有IP地址。本命令仅为参考,请您根据实际情况配置。

    4. 执行以下命令,配置SNAT规则。

      iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j SNAT --to-source 192.168.1.100

      其中,192.168.2.0/24为子网Subnet-WEB的IPv4网段,192.168.1.100为Subnet-FW的私有IP地址。本命令仅为参考,请您根据实际情况配置。

    5. 执行以下命令,保存NAT规则配置。

      service iptables save

      systemctl restart iptables

      以上NAT规则仅为本次验证的临时配置,重启ECS后会失效。

    6. 执行以下命令,查看NAT规则配置详情。

      iptables -t nat -L -n -v

      回显类似如下信息,表示NAT规则配置完成。
      [root@ecs-fw ~]# iptables -t nat -L -n -v
      Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
       pkts bytes target     prot opt in     out     source               destination         
          0     0 DNAT       icmp --  *      *       0.0.0.0/0            192.168.1.100        icmptype 8 to:192.168.2.229
      
      Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
       pkts bytes target     prot opt in     out     source               destination         
      
      Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
       pkts bytes target     prot opt in     out     source               destination         
      
      Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
       pkts bytes target     prot opt in     out     source               destination         
          0     0 SNAT       all  --  *      *       192.168.2.0/24       0.0.0.0/0            to:192.168.1.100

  9. 登录ECS-WEB,验证ECS-WEB和公网通信情况。

    ping 公网地址

    命令示例:

    ping support.huaweicloud.com

    回显类似如下信息,表示ECS-WEB可以借助ECS-FW绑定的EIP和公网通信。
    PING support.huaweicloud.com.eo.dnse1.com (119.36.225.121) 56(84) bytes of data.
    64 bytes from 119.36.225.121 (119.36.225.121): icmp_seq=1 ttl=47 time=16.5 ms
    64 bytes from 119.36.225.121 (119.36.225.121): icmp_seq=2 ttl=47 time=16.5 ms
    64 bytes from 119.36.225.121 (119.36.225.121): icmp_seq=3 ttl=47 time=16.4 ms
    ...
    --- support.huaweicloud.com.eo.dnse1.com ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2002ms
    rtt min/avg/max/mdev = 16.420/16.458/16.497/0.031 ms

相关文档