
# 通过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。
 
图1VPC访问公网组网规划   
![](https://support.huaweicloud.com/bestpractice-vpc/zh-cn_image_0000002489893138.png)
#### 资源规划说明
本示例中需要创建虚拟私有云VPC、弹性云服务器ECS以及弹性公网IP，资源规划总体说明请参见[表1]。
![](https://support.huaweicloud.com/bestpractice-vpc/public_sys-resources/note_3.0-zh-cn.png)
以下资源规划详情仅为示例，供您参考，您需要根据实际业务情况规划资源。
 表1VPC访问公网组网资源规划总体说明 
| 资源        | 说明                                                                                                                                                                                                                                                                                                                                                                           |
|:---|:---|
| 虚拟私有云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。                                                                                                                                                                                                                                                                                                                                            |
   
 表2VPC资源规划详情 
| VPC名称 | VPC网段          | 子网名称       | 子网网段           | 关联路由表                                                                                | 子网作用     |
|:---|:---|:---|:---|:---|:---|
| VPC-X | 192.168.0.0/16 | Subnet-FW  | 192.168.1.0/24 | 默认路由表 rtb-VPC-X     | 部署防火墙的子网 |
| VPC-X | 192.168.0.0/16 | Subnet-WEB | 192.168.2.0/24 | 自定义路由表 rtb-VPC-X-WEB | 部署业务的子网  |
   
 表3ECS资源规划详情 
| 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 | 无            | 公共镜像： Huawei Cloud EulerOS 2.0 标准版 64位 | Sg-X： 通用Web服务器 | 部署业务的云服务器  |
   
#### 操作步骤
1. 创建VPC及其子网。 
   具体方法请参见[创建虚拟私有云和子网](https://support.huaweicloud.com/usermanual-vpc/zh-cn_topic_0013935842.html)。
   本示例中的VPC和子网资源规划详情请参见[表2]。
   
   
2. 创建ECS。 
   具体方法请参见[自定义购买ECS](https://support.huaweicloud.com/usermanual-ecs/ecs_03_7002.html)。
   本示例中的ECS资源规划详情请参见[表3]。
   
   
3. 配置ECS-FW的网卡，并安装第三方防火墙软件。 
   1. 关闭ECS-FW的网卡"源/目的检查"。
      1. 在ECS列表中，单击目标ECS的名称。 进入ECS详情页。
         
      
      2. 选择"弹性网卡"页签，并单击![](https://support.huaweicloud.com/bestpractice-vpc/zh-cn_image_0000001987762837.png)展开ECS的网卡详情区域，可以查看"源/目的检查"功能。
         如[图2]所示，表示"源/目的检查"功能已关闭。
         图2关闭网卡的"源/目的检查"功能   
         ![](https://support.huaweicloud.com/bestpractice-vpc/zh-cn_image_0000001953483430.png) 
       
   
   2. 在ECS-FW中安装第三方防火墙。 您可以自行安装或者通过[华为云商店](https://marketplace.huaweicloud.com/all/?q=JemYsueBq-WimSU)购买第三方防火墙。
      
   
   
   
   
4. 创建EIP，并为ECS-FW绑定EIP。 
   1. 申请EIP，具体方法请参见[获取EIP](https://support.huaweicloud.com/usermanual-eip/eip_0008.html)。
   
   2. 将EIP绑定至ECS-FW，具体方法请参见[为资源绑定EIP](https://support.huaweicloud.com/usermanual-eip/eip_0009.html)。
   
   
   
   
5. 创建VPC-X内的自定义路由表，并将Subnet-WEB关联至自定义路由表。 
   1. 在VPC-X内，创建自定义路由表。 具体方法请参见[创建自定义路由表](https://support.huaweicloud.com/usermanual-vpc/vpc_route01_0005.html)。
      
   
   2. 将子网Subnet-WEB的关联至创建的自定义路由表。 子网创建完成后，自动关联VPC默认路由表，因此当前子网Subnet-WEB关联的是VPC-X的默认路由表，需要更换为自定义路由表。
      具体方法请参见[更换子网关联的路由表](https://support.huaweicloud.com/usermanual-vpc/vpc_route01_0008.html)。
      
   
   
   
   
6. （可选）为云服务器配置虚拟IP。 
   此步骤为可选：您可以在VPC-X中创建主备服务器，并绑定同一虚拟IP，当主服务器发生故障无法对外提供服务时，动态将虚拟IP切换到备服务器，继续对外提供服务。如果部署第三方防火墙的弹性云服务器不需要主备，此步骤不需要执行。
   1. 在防火墙所在子网Subnet-FW内，创建虚拟IP。 具体方法请参见[申请虚拟IP地址](https://support.huaweicloud.com/usermanual-vpc/vpc_vip_0002.html)。
      
   
   2. 将虚拟IP绑定到部署防火墙的主备ECS上。 具体方法请参见[虚拟IP绑定云服务器](https://support.huaweicloud.com/usermanual-vpc/zh-cn_topic_0067802474.html)。
      
   
   3. 为虚拟IP绑定EIP。 具体方法请参见[将虚拟IP绑定至实例或者EIP](https://support.huaweicloud.com/usermanual-vpc/zh-cn_topic_0067802474.html#section2)。
      
    
   
   
7. 在自定义路由表中，添加路由。 
   具体方法请参见[添加自定义路由](https://support.huaweicloud.com/usermanual-vpc/vpc_route01_0006.html)。
   路由规划说明如[表4]所示。
    表4VPC路由规划说明 
   | 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有多种登录方法，具体请参见[登录弹性云服务器](https://support.huaweicloud.com/ecs_faq/ecs_faq_0632.html)。
   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
   ```
   
   
 
