• 沒有找到結果。

当网站没有接入到WAF前,DNS直接解析到源站的IP。网站接入WAF后,需要把DNS 解析到WAF的CNAME,这样流量才会先经过WAF,WAF再将流量转到源站,实现网 站流量检测和攻击拦截。本文介绍通过DNS配置模式接入WAF时,如何在已添加网站 配置后,配置域名解析,实现业务接入。

原理图

● 在域名的DNS服务商处有更新DNS记录的权限。

● (可选)放行WAF回源段IP。源站服务器上已启用非华为云安全软件(如安全 狗、云锁)时,您需要在这些软件上设置放行WAF回源段IP,防止由WAF转发到 源站的正常业务流量被拦截。具体请参考通过配置ECS/ELB访问控制策略保护源 站安全。

● (可选)进行本地验证。通过本地验证确保WAF转发规则配置正常后,再修改网 站域名的DNS解析记录,防止因配置错误导致业务中断。具体请参考本地验证。

操作背景

● 如果您之前在DNS云解析服务上添加的域名主机记录的“类型”是“CNAME-将 域名指向另外一个域名”,可参照CNAME接入完成配置。

有关DNS云解析服务的记录集类型和规则的详细介绍,请参见记录集类型及配置规 则。

CNAME 接入

如果您之前在DNS云解析服务上添加的域名主机记录的“类型”是“CNAME-将域名 指向另外一个域名”,请参照以下操作步骤接入WAF。

以下操作以华为云云解析DNS为例介绍修改域名CNAME解析记录的方法。如果您的域 名的DNS解析托管在华为云云解析DNS上,您可以直接参照以下步骤进行操作;若您 使用华为云以外的DNS服务,请参考以下步骤在域名的DNS服务商的系统上进行类似 配置。

最佳实践 9 WAF 接入配置最佳实践

步骤1 获取CNAME值。

● 如果您正在添加防护域名,在配置域名基本信息后,请参考以下方式获取域名的 CNAME值。

单击“复制”,获取防护域名的CNAME值,如图9-2或图9-3所示。

9-2 域名接入(使用代理)

9-3 域名接入(未使用代理)

● 如果您已完成添加域名,请参考以下操作步骤获取域名的CNAME值。

a. 进入网站配置页面入口,如图9-4所示。

9-4 网站设置入口

b. 在目标域名所在行的“防护网站”列中,单击目标域名,进入域名基本信息 页面。

9-5 查看基本信息

c. 在“CNAME”信息行,单击 ,复制“CNAME”值。

步骤2 域名解析。

– “TTL(秒)”:一般建议设置为5分钟,TTL值越大,则DNS记录的同步和更新 越慢。 CNAME修改为WAF CNAME地址。

– 同一解析记录下,不同DNS解析记录类型间可能存在冲突。例如,对于同一个主机记 录,CNAME记录与A记录、MX记录、TXT记录等其他记录互相冲突。在无法直接修改 记录类型的情况下,您可以先删除存在冲突的其他记录,再添加一条新的CNAME记 录。删除其他解析记录并新增CNAME解析记录的过程应尽可能在短时间内完成。如果 删除A记录后没有添加CNAME解析记录,可能导致域名无法正常解析。

域名解析类型的限制规则请参见添加记录集时,为什么会提示“与已有解析记录冲 突”?。

最佳实践 9 WAF 接入配置最佳实践

9-7 修改记录集

4. 单击“确定”,完成DNS配置,等待DNS解析记录生效。

步骤3 (可选)验证DNS配置。您可以Ping网站域名验证DNS解析是否生效。

说明

由于DNS解析记录生效需要一定时间,如果验证失败,您可以等待5分钟后重新检查。

----结束

10 独享引擎实例升级最佳实践

当您的防护网站以独享模式部署到WAF后,您可以在WAF管理控制台上通过升级操 作,将WAF独享引擎实例升级到最新版本,以获取独享引擎实例最新防护性能。为了 提升业务的高可靠性,请您参照以下操作指导完成独享引擎实例升级操作。

须知

对于可靠性要求较高的业务,建议您至少购买2个独享引擎实例部署为双活或多活高可 靠架构。如果业务部署单引擎实例,当实例对应的ECS发生故障时,WAF将不可用。

前提条件

防护网站以“独享模式”接入WAF。

单独享引擎实例节点升级

如果您的业务只部署了一个独享引擎实例,请参照以下操作升级实例。

步骤1 建议参见购买WAF独享模式购买一个新的独享引擎实例。

新购买的独享引擎实例为最新版本。当实例为最新版本时,“升级”按钮为灰化状 态。

步骤2 在原独享引擎实例所属VPC下的任一台ECS上,执行curl命令,验证业务是否正常。

● HTTP业务

curl http://WAF独享引擎实例IP:业务端口 -H "host:业务域名" -H "User-Agent: Test"

● HTTPS业务

curl https://WAF独享引擎实例IP:业务端口 -H "host:业务域名" -H "User-Agent: Test"

检查业务是否正常,如果业务正常,请执行步骤3;如果业务异常,请参照域名/IP接 入状态显示“未接入”,如何处理?和如何排查404/502/504错误排查故障后,再执 行步骤3。

最佳实践 10 独享引擎实例升级最佳实践

说明

执行curl命令的主机需要满足以下条件:

网络通信正常。

已安装curl命令。Windows操作系统的主机需要手动安装curl,其他操作系统自带curl。

步骤3 将新购买的独享引擎实例添加到ELB的后端服务器上。

新的请求不会转发到权重为0的后端。

步骤2 待业务流量降下来后,升级独享引擎实例版本。

查看独享实例的云监控信息,“新建连接数”较小时(例如,小于5),说明业务流量 已经降下来。

1. 进入独享引擎页面,如图10-2所示。

10-2 进入独享引擎页面

2. 在目标实例所在行的“操作”列,单击“升级”。

3. 在弹出的对话框中,确认并勾选业务已满足提示框中所描述的相关配置后,单击

“确定”,升级实例版本。

升级大约需要5分钟。

10-3 升级独享引擎实例版本

步骤3 在独享引擎实例所属VPC下的任一台ECS上,执行curl命令,验证业务是否正常。

● HTTP业务

curl http://WAF独享引擎实例IP:业务端口 -H "host:业务域名" -H "User-Agent: Test"

最佳实践 10 独享引擎实例升级最佳实践

● HTTPS业务

curl https://WAF独享引擎实例IP:业务端口 -H "host:业务域名" -H "User-Agent: Test"

检查业务是否正常,如果业务正常,请执行步骤4;如果业务异常,请参照域名/IP接 入状态显示“未接入”,如何处理?和如何排查404/502/504错误排查故障后,再执 行步骤4。

说明

执行curl命令的主机需要满足以下条件:

网络通信正常。

已安装curl命令。Windows操作系统的主机需要手动安装curl,其他操作系统自带curl。

步骤4 参见后端服务器配置权重,在ELB管理控制台上,将引擎实例的流量权重从0调整为步 骤1中记录的原值。

步骤5 参照步骤1~步骤4,分别对其他独享引擎实例节点执行升级操作。

----结束

11 获取客户端真实 IP

客户端IP指的是访问者(用户设备)的IP地址。在Web应用开发中,通常需要获取客户 端真实的IP地址。例如,投票系统为了防止刷票,需要通过获取客户端真实IP地址,限 制每个客户端IP地址只能投票一次。

当您的网站已接入Web应用防火墙(Web Application Firewall,简称WAF)进行安全 防护后,WAF作为一个反向代理存在于客户端和服务器之间,服务器的真实IP被隐藏 起来,Web访问者只能看到WAF的IP地址。此时,您可直接通过WAF获取客户端的真 实IP,也可以通过配置网站服务器获取客户端的真实IP。

本章节介绍了通过WAF直接获取真实IP的方法,以及不同类型的Web应用服务器(包 括Tomcat、Apache、Nginx、IIS 6和IIS 7)如何进行相关设置,以获取客户端的真实 IP。

背景信息

通常情况下,网站访问并不是简单地从用户的浏览器直达服务器,中间可能部署有 CDN、WAF、高防等代理服务器(架构为“用户 > CDN/WAF/高防等代理服务 > 源站 服务器”)。以WAF为例,部署示意图如图11-1所示。

11-1 部署 WAF 原理图

最佳实践 11 获取客户端真实 IP

说明

● 当网站没有接入到WAF前,DNS直接解析到源站的IP,用户直接访问服务器。

● 当网站接入WAF后,需要把DNS解析到WAF的CNAME,这样流量才会先经过WAF,WAF再 将流量转到源站,实现网站流量检测和攻击拦截。

在这种情况下,访问请求到达源站服务器之前可能经过了多层安全代理转发或加速代 理转发,服务器如何获取发起请求的真实客户端IP呢?

一个透明的代理服务器在把用户的HTTP请求转到下一环节的服务器时,会在HTTP的 头部中加入一条“X-Forwarded-For”记录,用来记录用户的真实IP,其形式为“X-Forwarded-For:客户端的真实IP,代理服务器1-IP, 代理服务器2-IP,代理服务器3-IP,……”。

因此,您可以通过获取“X-Forwarded-For”对应的第一个IP来得到客户端的真实IP。

通过 WAF 直接获取客户端真实 IP

网站接入WAF后,WAF作为一个反向代理部署于客户端和服务器之间,实现网站安全 防护。根据业务需求,您可以通过以下两种推荐方式获取客户端真实IP:

● WAF使用X-Forwarded-For的方式获取客户端的真实IP地址。

WAF将“真实的客户端IP”放在HTTP头部的“X-Forwarded-For”字段,格式如 下:

X-Forwarded-For: 用户真实IP, 代理服务器1-IP, 代理服务器2-IP,...

说明

当使用此方式获取客户端真实IP时,获取的第一个地址就是客户端真实IP。

各种语言通过调用SDK接口获取X-Forwarded-For字段的方式:

ASP:

Request.ServerVariables("HTTP_X_FORWARDED_FOR")ASP.NET(C#):

Request.ServerVariables["HTTP_X_FORWARDED_FOR"]

PHP:

$_SERVER["HTTP_X_FORWARDED_FOR"]

JSP:

request.getHeader("HTTP_X_FORWARDED_FOR")

● WAF服务还支持使用X-Real-IP变量,获取客户的来源IP(使用过程中考虑了后面 经过的多层反向代理对该变量的修改)。

各种语言通过调用SDK接口获取X-Real-IP字段的方式:

ASP:

Request.ServerVariables("HTTP_X_REAL_IP")ASP.NET(C#):

Request.ServerVariables["HTTP_X_REAL_IP"]

PHP:

$_SERVER["HTTP_X_REAL_IP"]

JSP:

request.getHeader("HTTP_X_REAL_IP")

Tomcat 如何在访问日志中获取客户端真实 IP

如果您的源站部署了Tomcat服务器,可通过启用Tomcat的X-Forwarded-For功能,获 取客户端的真实IP地址。

步骤1 打开“server.xml”文件(“tomcat/conf/server.xml”),AccessLogValve日志记录 功能部分内容如下:

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

prefix="localhost_access_log." suffix=".txt"

pattern="%h %l %u %t "%r" %s %b" />

步骤2 在pattern中增加“%{X-Forwarded-For}i”,修改后的server.xml为:

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

prefix="localhost_access_log." suffix=".txt"

pattern="%{X-Forwarded-For}i %h %l %u %t "%r" %s %b" />

</Host>

步骤3 查看“localhost_access_log”日志文件,可获取X-Forwarded-For对应的访问者真实

步骤3 查看“localhost_access_log”日志文件,可获取X-Forwarded-For对应的访问者真实

相關文件