
# 使用WAF对APIG进行安全防护
#### 应用场景
企业为了保护APIG及后端服务器免受恶意攻击，可在APIG和外部网络之间部署WAF。
#### 方案架构
图1后端服务器访问原理   
![](https://support.huaweicloud.com/bestpractice-apig/zh-cn_image_0000002177422969.png "点击放大")
#### 方案优势
方案一：API分组通过域名方式对外提供服务，具备更强的可扩展性**。**
#### 方案一（推荐）：WAF侧注册对外访问域名并配置证书，通过APIG实例的分组调试域名访问后端服务
1. 在APIG实例中，新建API分组，并记录域名，将API添加在新建的分组中。 
   1. 登录[API网关控制台](https://console.huaweicloud.com/apig2/#/overview)，在左侧导航栏中选择"API管理 \> API分组"。
   
   2. 单击"创建分组 \> 直接创建"，填写分组名称完成创建。
   
   3. 单击已创建分组名称，进入分组详情。
   
   4. 在"分组信息"页签中，查看调试域名并记录。该调试域名唯一且不可修改，每天最多可以访问1000次。
   
   5. 在"API运行"页签中，单击"创建API \> 创建API"，即可添加API。
   
   
   
   

2. 在WAF侧添加防护域名。进入WAF控制台，单击"网站设置 \> 添加防护网站"，即可配置防护域名。**配置"源站地址"时，需要填写API分组的域名，并添加证书** 。**添加域名后，还需执行** **放行回源IP** **、本地验证、** **修改域名DNS解析设置** 。详细操作步骤请参考[网站接入WAF（云模式）](https://support.huaweicloud.com/usermanual-waf/waf_01_0324.html)。
   
   **客户从公网客户端访问WAF时，使用的是WAF对外访问域名，WAF转发给APIG时同样使用该对外访问域名，APIG收到访问该域名的请求无次数限制。**
   ![](https://support.huaweicloud.com/bestpractice-apig/zh-cn_image_0000002108774921.png "点击放大")
   
   
   
3. 在APIG实例中，为API分组绑定已创建的防护域名。 
   1. 进入APIG控制台，在左侧导航栏中选择"API管理 \> API分组"。
   
   2. 单击已创建的分组名称。
   
   3. 在"分组信息"页签中的"域名管理"区域，单击"绑定独立域名"。
   
   4. 在弹窗中添加已创建的防护域名即可。
   
   
   
   
4. 在APIG实例中，将"real_ip_from_xff"开关打开，并设置参数。 
   1. 在APIG控制台的左侧导航栏中，选择"实例管理"。
   
   2. 在"配置参数"页签中，根据实际的真实IP排序设置"xff_index"参数。 **客户从公网客户端访问WAF时，WAF会在HTTP头部"X-Forwarded-For"中记录用户的真实IP，APIG需要据此指定用户的真实IP。**
      例如，如果WAF在HTTP头部记录的X-Forwarded-For值为："客户端的真实IP，代理服务器1-IP， 代理服务器2-IP，代理服务器3-IP，......"，则"xff_index"的值设置为"0"，表示获取X-Forwarded-For的第一个IP；如果WAF在HTTP头部记录的X-Forwarded-For值为："代理服务器1-IP，客户端的真实IP， 代理服务器2-IP，代理服务器3-IP，......"，则"xff_index"的值设置为"1"，表示获取X-Forwarded-For的第二个IP。
      
   
   
   
   
 
#### 方案二（备选）：使用DEFAULT分组实现转发功能，WAF侧通过IP访问后端服务
1. 在APIG实例中，查看入口地址。通过IP调用访问APIG实例，无访问次数限制。
   
   1. 登录[API网关控制台](https://console.huaweicloud.com/apig2/#/overview)，在左侧导航栏中选择"实例管理"。
   
   2. 单击实例名称或"查看控制台"。
   
   3. 在"基础信息"页签中，查看入口地址。
      - 虚拟私有云访问地址为VPC内网地址。
      
      - 弹性IP地址为公网地址。
       
   
   
   
   

2. 在DEFAULT分组中添加API。 
   1. 在APIG控制台的左侧导航栏中，选择"API管理 \> API分组"。
   
   2. 单击"DEFAULT"分组名称。
   
   3. 单击"创建API \> 创建API"，即可添加API。
   
   
   
   

3. 在WAF侧添加防护域名。进入WAF控制台，单击"网站设置 \> 添加防护网站"，即可配置防护域名。**配置"源站地址"为API网关实例的[入口地址]，并添加证书。添加域名后，还需执行** **放行回源IP** **、本地验证、** **修改域名DNS解析设置** 。详细操作步骤请参考[网站接入WAF（云模式）](https://support.huaweicloud.com/usermanual-waf/waf_01_0324.html)。
   
   - 如果WAF与APIG在同一VPC下，"源站地址"可以填写私网地址。
   
   - 如果APIG绑定弹性IP，"源站地址"可以填写公网地址。
   
   
   ![](https://support.huaweicloud.com/bestpractice-apig/zh-cn_image_0000002073055286.png "点击放大")
   
   
   
4. 在APIG实例中，为DEFAULT分组绑定已创建的防护域名。 
   1. 在APIG控制台的左侧导航栏中，选择"API管理 \> API分组"。
   
   2. 单击"DEFAULT"分组名称。
   
   3. 在"分组信息"页签中的"域名管理"区域，单击"绑定独立域名"。
   
   4. 在弹窗中添加已创建的防护域名。
   
   
   
   
5. 在APIG实例中，将"real_ip_from_xff"开关打开，并设置参数。 
   1. 在APIG控制台的左侧导航栏中，选择"实例管理"。
   
   2. 在"配置参数"页签中，根据实际的真实IP排序设置"xff_index"参数。 **客户从公网客户端访问WAF时，WAF会在HTTP头部"X-Forwarded-For"中记录用户的真实IP，APIG需要据此指定用户的真实IP。**
      例如，如果WAF在HTTP头部记录的X-Forwarded-For值为："客户端的真实IP，代理服务器1-IP， 代理服务器2-IP，代理服务器3-IP，......"，则"xff_index"的值设置为"0"，表示获取X-Forwarded-For的第一个IP；如果WAF在HTTP头部记录的X-Forwarded-For值为："代理服务器1-IP，客户端的真实IP， 代理服务器2-IP，代理服务器3-IP，......"，则"xff_index"的值设置为"1"，表示获取X-Forwarded-For的第二个IP。
      
   
   
   
   
 
