# 使用DDoS高防和WAF提升网站全面防护能力
#### 应用场景
随着数字化应用的逐步深入，很多企业业务都通过Web应用来承载，如企业官网网站、网上商城、远程办公系统等，一般都直接暴露在互联网上，极易成为黑客攻击的目标，根据历史数据分析，约75%的信息安全攻击都是针对Web应用的，同时Web应用及组件的漏洞也较多，历史上就爆发过著名的Log4J漏洞，对大部分Web应用都产生了深远的影响。
本实践建立在网站已接入了DDoS高防，如何使网站流量同时经过DDoS高防和WAF进行防护，提升网站全面防护能力。网站接入DDoS高防的操作，请参见[网站类业务接入](https://support.huaweicloud.com/usermanual-aad/aad_01_0057.html)。
#### 方案架构
- [DDoS高防](https://support.huaweicloud.com/productdesc-aad/aad_01_0004.html)通过高防IP代理源IP对外提供服务，将所有的公网流量都引流至高防IP，进而隐藏源站，避免源站（用户业务）遭受大流量DDoS攻击。
  DDoS高防支持防护的对象：域名，华为云、非华为云或本地部署的Web业务。
  
- Web应用防火墙通过对HTTP(S)请求进行检测，识别并阻断SQL注入、跨站脚本攻击、网页木马上传、命令/代码注入、文件包含、敏感文件访问、第三方应用漏洞攻击、CC攻击、恶意爬虫扫描、跨站请求伪造等攻击，保护Web服务安全稳定。
  WAF支持防护域名（包括泛域名、一级域名、二级域名等各级域名）、IP（包括公网IP、私网IP）。不同接入方式，支持的防护对象不同。
  - **云模式-CNAME接入**：域名，华为云、非华为云或本地部署的Web业务。
  
  - **云模式-ELB接入**：域名或IP（公网IP/私网IP），华为云的Web业务。
  
  - **独享模式接入**：域名或IP（公网IP/私网IP），华为云的Web业务。
    
DDoS高防和WAF同时部署可以对华为云、非华为云或本地部署的域名进行联动防护，可以同时防御DDoS攻击（NTP Flood攻击、SYN Flood攻击、ACK Flood攻击、ICMP Flood攻击、HTTP Get Flood攻击等），以及Web应用攻击（SQL注入、跨站脚本攻击、网页木马上传、命令/代码注入、文件包含、敏感文件访问、第三方应用漏洞攻击、CC攻击、恶意爬虫扫描、跨站请求伪造等），确保业务持续可靠运行，配置原理图如[图1]所示。
图1使用代理配置原理   
![](https://support.huaweicloud.com/bestpractice-waf/zh-cn_image_0000002707341005.png "点击放大")
DDoS高防+WAF配置后，流量被DDoS高防转发到WAF，WAF再将流量转到源站，实现网站流量检测和攻击拦截。
![](https://support.huaweicloud.com/bestpractice-waf/zh-cn_image_0000001113462920.png "点击放大")
相关配置说明如下：
- 云模式-CNAME接入 先将域名解析到DDoS高防，再修改DDoS高防域名信息，将源站域名修改为WAF的"CNAME"。同时，为了防止其他用户提前将您的域名配置到WAF上，从而对您的域名防护造成干扰，建议您到DNS服务商处添加一条WAF的子域名和TXT记录。
  
- 云模式-ELB接入 先将域名解析到DDoS高防，再修改DDoS高防域名信息，将源站IP修改为[添加到ELB模式](https://support.huaweicloud.com/usermanual-waf/waf_01_0287.html)中选择的ELB对应的弹性公网IP。
  
- 独享模式 先将域名解析到DDoS高防，再修改DDoS高防域名信息，将源站IP修改为WAF独享引擎实例配置弹性负载均衡绑定的弹性公网IP。
  
 
#### 方案优势
DDoS高防和WAF同时部署可以同时防御DDoS攻击（NTP Flood攻击、SYN Flood攻击、ACK Flood攻击、ICMP Flood攻击、HTTP Get Flood攻击等），以及Web应用攻击（SQL注入、跨站脚本攻击、网页木马上传、命令/代码注入、文件包含、敏感文件访问、第三方应用漏洞攻击、CC攻击、恶意爬虫扫描、跨站请求伪造等），确保业务持续可靠运行。
#### 资源与成本规划
表1资源和成本规划 
| 资源        | 资源说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | 每月费用                                                                              |
|:---|:---|:---|
| DDoS防护    | - 计费模式：包年/包月  - 保底防护带宽：10G  - 弹性防护带宽：10G  - 业务带宽：100Mbps  - 防护域名数：50个                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | 具体的计费方式及标准请参考[计费说明](https://support.huaweicloud.com/price-aad/aad_03_0001.html)。  |
| Web应用防火墙 | 云模式-标准版： - 计费模式：包年/包月  - 域名数量：10个防护域名  - QPS配额：2,000QPS业务请求  - 支持带宽峰值： - 源站服务器部署在华为云内：100Mbps  - 源站服务器部署在华为云外：30Mbps     | 具体的计费方式及标准请参考[计费说明](https://support.huaweicloud.com/price-waf/waf_03_0001.html)。 |
   
#### 约束条件
- "DDoS高防+WAF"联动仅支持域名防护。
- 如果WAF前使用了高防、CDN（Content Delivery Network，内容分发网络）、云加速等代理，配置CC防护规则时，建议"限速模式"选择"用户限速"，并勾选"全局计数"。
 
#### 步骤一：购买云模式标准版
以购买WAF云模式标准版为例进行介绍。
1. [登录Web应用防火墙控制台](https://console.huaweicloud.com/waf/?locale=zh-cn)。
2. 在页面右上角，单击"购买WAF实例"，进入购买页面，"WAF模式"选择"云模式"。 
   - "区域"：根据防护业务的所在区域就近选择购买的WAF区域。
   
   - "版本规格"：选择"标准版"。
   
   - "扩展包"及"购买时长"：根据具体情况进行选择。
   
   
   
   
3. 确认参数配置无误后，在页面右下角单击"立即购买"。
4. 确认订单详情无误后，阅读并勾选《Web应用防火墙免责声明》，单击"去支付"，完成购买操作。
5. 进入"付款"页面，选择付款方式进行付款。 
   订单支付成功后，单击"进入Web应用防火墙控制台"，进入WAF"总览"页面。将鼠标悬停在"版本管理"区域，查看已购实例版本及其详细规格。
   
   
 
#### 步骤二：将网站信息添加到WAF
此处以云模式-CNAME接入为例进行介绍。
- 云模式-ELB接入方式请参见[将网站接入WAF防护（云模式-ELB接入）](https://support.huaweicloud.com/usermanual-waf/waf_01_0287.html)。
- 独享模式接入方式请参见[将网站接入WAF防护（独享模式）](https://support.huaweicloud.com/usermanual-waf/waf_01_0250.html)。
1. 在左侧导航栏，单击"接入管理"。 
   在开始添加防护网站前，可单击页面右上角的"流程引导"，了解接入流程。
   
   
2. 在"接入管理"页面，选择"云模式-CNAME"页签后，单击"添加防护网站"。 
   若仅开通一种接入模式，则直接单击"添加防护网站"。
   
   
3. 根据界面提示，配置网站信息，如[表2]所示。
   
   图2基础信息配置   
   ![](https://support.huaweicloud.com/bestpractice-waf/zh-cn_image_0000002046949960.png "点击放大")
    表2重点参数说明 
   | 参数      | 参数说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | 取值样例                                                                                                                                                                                                                                                         |
   |:---|:---|:---|
   | 防护域名 | 需要添加到WAF中防护的域名。 - 域名已完成备案  - 支持单域名（例如，一级域名example.com，二级域名www.example.com等）和泛域名（例如，\*.example.com）。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | www.example.com                                                                                                                                                                                                                                              |
   | 防护端口   | 需要防护的域名对应的业务端口。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | 标准端口                                                                                                                                                                                                                                                         |
   | 服务器配置 | 网站服务器地址的配置。包括对外协议、源站协议、源站地址、源站端口和权重。 - 对外协议：客户端请求访问服务器的协议类型。包括"HTTP"、"HTTPS"两种协议类型。  - 源站协议：Web应用防火墙转发客户端请求的协议类型。包括"HTTP"、"HTTPS"两种协议类型。  - 源站地址：客户端访问的网站服务器的公网IP地址（一般对应该域名在DNS服务商处配置的A记录）或者域名（一般对应该域名在DNS服务商处配置的CNAME）。  - 源站端口：WAF转发客户端请求到服务器的业务端口。  - 权重：负载均衡算法将按权重将请求分配给源站。                                                                                                                       | 对外协议：HTTP 源站协议：HTTP 源站地址：IPv4 XXX .XXX.1.1 源站端口：80 |
   | IP标记   | 网站接入WAF后，"已使用七层代理"默认为"是"。该场景下，WAF无法直接获取客户端真实IP，导致基于IP的防护规则失效。选择IP标记后，可指定客户端IP的判定方式，帮助WAF获取客户端真实IP。 - **$remote_sockaddr**：当WAF前无其他代理时，如果报文存在TOA（TCP Option Address），且不希望WAF以TCP Option Address作为客户端IP时，选择该选项。配置后，WAF会以报文的3层源IP作为客户端真实IP。  - **$remote_addr**：当WAF前存在四层代理时，如果希望WAF以TCP连接IP作为客户端真实IP，选择该选项。  - **x-forwarded-for**：当WAF前存在七层代理时，选择该选项后，WAF会以X-Forwarded-For（XFF）中的首个IP地址作为客户端真实IP。  - **自定义** ：当WAF前存在七层代理时，选择该项并配置字段名后，WAF优先从配置的字段中获取客户端真实IP。配置多个字段时，WAF从左到右依次读取客户端真实IP。 如果WAF从自定义字段中未获取到客户端真实IP，将依次从CDN-Src-Ip、X-Real-Ip、X-Forwarded-For、$remote_addr字段获取客户端真实IP。    | x-forwarded-for                                                                                                                                                                                                                                             |
      
   
   
4. 单击"下一步"，完成防护网站基本信息填写。根据"添加防护网站"面板提示，完成如下操作： 
   图3添加域名完成   
   ![](https://support.huaweicloud.com/bestpractice-waf/zh-cn_image_0000001920672218.png "点击放大")
   1. [放行回源IP](https://support.huaweicloud.com/usermanual-waf/waf_01_0002.html#section4)
   
   2. [本地验证](https://support.huaweicloud.com/usermanual-waf/waf_01_0002.html#section6)
   
   
   完成上述步骤后，您可以在域名列表，查看已添加的域名"接入状态"。此时，域名"接入状态"为"未接入"，原因为"修改DNS解析"。
   
   
 
#### 步骤三：修改域名解析
在DDoS高防界面，添加WAF的CNAME地址，使流量经过WAF。
- [云模式-CNAME接入配置策略]
  以下操作以华为云DDoS高防为例介绍配置域名解析的方法。如果您使用的是华为云DDoS高防，您可以直接参照以下步骤进行操作；若您使用华为云以外的DDoS高防，请参考以下步骤在其他DDoS高防上进行类似配置。
  1. 获取"CNAME"、"子域名"和"TXT记录"值。 
     1. [登录Web应用防火墙控制台](https://console.huaweicloud.com/waf/#/waf/dashboard/security)。
     
     2. 在"资产管理 \> 防护对象"页面，单击目标域名，进入域名基本信息页面。
     
     3. 确认"已使用七层代理"为"是"。
     
     4. 单击CNAME所在行的![](https://support.huaweicloud.com/bestpractice-waf/zh-cn_image_0000002276094837.png)，复制"CNAME"。在页面顶部，单击"未接入"旁边的![](https://support.huaweicloud.com/bestpractice-waf/zh-cn_image_0000001817096868.png)，在弹出的对话框中，复制"子域名"和"TXT记录"。
     
     
     
     
  
  2. 修改DDoS高防回源IP地址。 
     1. [登录AAD服务控制台](https://console.huaweicloud.com/cnad/?locale=zh-cn)。
     
     2. 在左侧导航树中，选择"DDoS高防 \> 域名接入"，进入域名配置页面。
     
     3. 在使用的DDoS高防代理类服务的域名所在行的"操作"列，单击"编辑"，进入"域名业务配置编辑"页面，将"源站IP/域名"的内容修改为复制的WAF的CNAME值。
     
     4. 单击"确定"，DDoS高防回源地址修改完成。
     
     
     
     
  
  3. （可选）在DNS服务商添加一条WAF的子域名和TXT记录。使用代理场景下，WAF需要通过是否配置TXT记录来[判断域名接入状态](https://support.huaweicloud.com/usermanual-waf/waf_01_0002.html#section8)，建议添加"子域名"和"TXT记录"。
     
     1. 进入云解析页面的入口，如[图4]所示。
        图4云解析页面入口   
        ![](https://support.huaweicloud.com/bestpractice-waf/zh-cn_image_0000001926434245.png "点击放大") 
     
     2. 在页面的右上角，单击"添加记录集"，进入"添加记录集"页面，配置模式如[图5]所示。
        - "记录类型"：选择"TXT-设置文本记录"。
        
        - "主机记录"：[1.d]中复制的TXT记录。
        
        - "线路类型"：全网默认。
        
        - "TTL(秒)"：一般建议设置为5分钟，TTL值越大，则DNS记录的同步和更新越慢。
        
        - "记录值"：将[1.d]中复制的TXT记录加上引号后粘贴在对应的文本框，例如，"TXT记录"。
        
        - 其他的设置保持不变。
        
        
        图5添加记录集   
        ![](https://support.huaweicloud.com/bestpractice-waf/zh-cn_image_0000002164310025.png "点击放大") 
     
     3. 单击"确定"，完成子域名配置。 完成以上配置后，您可以在域名**解析记录**页签，查看已添加的域名解析记录。
        
     
     
     
     
  
  4. （可选）验证DNS配置。您可以Ping网站域名验证DNS解析是否生效。 
     由于DNS解析记录生效需要一定时间，如果验证失败，您可以等待5分钟后重新检查。
     
     
   
- [独享模式/ELB接入配置策略]
  请参考以下步骤在华为云DDoS高防上进行配置操作。
  1. [登录AAD服务控制台](https://console.huaweicloud.com/cnad/?locale=zh-cn)。
  
  2. 在左侧导航树中，选择"DDoS高防 \> 域名接入"，进入域名接入页面。
  
  3. 在目标域名所在行的"操作"列中，单击"编辑"。
  
  4. 在弹出"域名业务配置编辑"对话框中，修改源站IP，如[图6]所示。
     
     - 如果您的业务使用了WAF独享模式，"源站IP/域名"文本框中输入[为弹性负载均衡绑定弹性公网IP](https://support.huaweicloud.com/usermanual-waf/waf_01_0250.html)。
     
     - 如果您的业务使用了WAF云模式-ELB接入，"源站IP/域名"文本框中输入[添加到ELB模式](https://support.huaweicloud.com/usermanual-waf/waf_01_0287.html)中选择的ELB对应的弹性公网IP。
     
     
     图6修改源站IP   
     ![](https://support.huaweicloud.com/bestpractice-waf/zh-cn_image_0000001863414197.png "点击放大")
     
     
  
  5. 单击"确定"，完成源站IP配置。 
     完成以上配置，您可以在域名接入列表，查看修改后的域名信息。
     
     
   
#### 操作结果验证
- 验证接入状态
  完成接入配置后，WAF会根据以下条件，每隔30分钟**自动检测** 两周内新增或更新的域名接入状态。如果域名创建时间在两周前，且最近两周内没有任何修改，您可以在域名"接入状态"栏，单击![](https://support.huaweicloud.com/bestpractice-waf/zh-cn_image_0000002363575577.png)，**手动刷新** 接入状态。
  - 是否为网站域名配置了**CNAME记录** 或者**TXT记录**（有代理场景）
  
  - 是否有流量经过，即网站在过去1天内的访问请求是否达到50次。例如，网站成功接入WAF时间为14:50，从这个时间点倒推一天，该时间段内的访问请求达最少达到50次。
   
  接入状态判断逻辑如[图7]所示。
  图7接入状态判断逻辑   
  ![](https://support.huaweicloud.com/bestpractice-waf/zh-cn_image_0000002329657060.png "点击放大")
  用户可在"云模式-CNAME"页签，查看域名接入状态：
  - **已接入域名**：已成功接入WAF的域名，即域名已配置CNAME记录；或域名已配置TXT记录，且网站有流量经过。
  
  - **未接入** **域名** ：未成功接入WAF的域名，网站域名没有配置CNAME记录和TXT记录，且网站没有流量经过。您可以根据接入状态提示，进行**回源IP加白** 、**本地验证** 、**修改DNS解析** 。如果手动刷新接入状态后，仍然为"未接入"，可参照[域名/IP接入状态显示"未接入"，如何处理？](https://support.huaweicloud.com/trouble-waf/waf_01_0278.html)重新完成域名接入。
  
  - **DNS解析异常** **域名**：网站域名配置了TXT记录，但网站没有流量经过。您可以在过去1天内访问网站50次以上后，手动刷新接入状态，查看是否更新为"已接入"。
    
- 防护效果验证 手动模拟简单的Web攻击命令（例如\<被防护域名\>/?id=1 and 1=1，id=1 and 1=1为用作测试的SQL注入攻击代码），验证WAF防护是否生效。
  
 
