将网站接入WAF防护(云模式-CNAME接入)
如果您的业务服务器部署在华为云、非华为云或云下,您可以使用云模式的CNAME接入方式将网站的域名添加到WAF进行防护。业务开通WAF后,您需要将网站接入WAF才能开启防护。CNAME模式下,WAF将作为一个反向代理,使用特定的回源IP段将经过WAF检测后的正常流量转发回Web业务的源站服务器。
如果您已开通企业项目,您可以在“企业项目”下拉列表中选择您所在的企业项目,在该企业项目下添加防护网站。
方案概述
CNAME模式下,将网站接入WAF,就是实现将网站流量牵引到WAF进行检测,再将检测后的流量转发到源站的过程。网站接入WAF后,流量访问示意图如图1所示。
- 用户在浏览器输入域名后,客户端会向DNS发送请求,查询域名解析地址。
- DNS返回域名解析地址。
- 如果无代理(例如CDN、DDos高防等),DNS返回的域名解析地址为WAF IP,客户端通过WAF IP访问WAF。如果存在代理:
- DNS返回的域名解析地址为代理IP,客户端通过代理IP访问代理。
- 代理通过WAF IP访问WAF。
- WAF对流量进行检测后,拦截异常流量,使用回源IP(段)将正常流量转发到源站服务器。
接入流程
根据网站是否使用代理(例如高防、CDN、云加速等),您需要完成如下接入操作。
操作步骤 |
说明 |
---|---|
介绍如何将防护域名 、源站信息等添加到WAF。 |
|
介绍如何获取回源IP,放行回源IP。 |
|
介绍如何在本地计算机验证域名接入配置是否生效。 |
|
介绍如何验证域名是否接入成功、基础防护是否生效。 |
步骤一:添加防护域名
为了将业务接入WAF防护,您需要将防护域名、源站信息等,添加到WAF。
- 登录管理控制台。
- 在管理控制台左上角,单击,选择区域或项目。
- 在页面左上方,单击,选择 。
- 在左侧导航树中,单击“网站设置”,进入“网站设置”页面。
- 在网站列表左上角,单击“添加防护网站”。
- 选择“云模式-CNAME接入”并单击“开始配置”。
- 基础信息配置,如图2所示,参数说明如表1所示。
表1 基础信息参数说明 参数
参数说明
取值样例
防护域名
需要添加到WAF进行防护的域名,支持单域名(例如,一级域名example.com,二级域名www.example.com等)和泛域名(例如,*.example.com)。
须知:- 入门版不支持添加泛域名。
- 泛域名添加说明如下:
- 如果各子域名对应的服务器IP地址相同:输入防护的泛域名。例如:子域名a.example.com,b.example.com和c.example.com对应的服务器IP地址相同,可以直接添加泛域名*.example.com。
- 如果各子域名对应的服务器IP地址不相同:请将子域名按“单域名”方式逐条添加。
- 同一个域名对应不同端口视为不同的域名,例如www.example.com:8080和www.example.com:8081视为两个不同的域名,将占用两个不同的域名防护额度。
- 请确保域名经过ICP(Internet Content Provider)备案,WAF会检查域名备案情况,未备案域名将无法添加。
-
网站名称(可选)
自定义网站名称。
WAF
网站备注(可选)
网站的备注信息。
waftest
防护端口
要防护的端口。
- 配置为80、443端口时,在下拉框中选择“标准端口”。
- 配置为其他端口时,所选端口必须在可选端口范围内。您可以单击“查看可添加端口”,查看WAF支持的HTTP和HTTPS端口。更多信息请参见WAF支持的端口范围。
说明:如果配置了除80/443以外的其他端口,访问网站时,需要在网址后面增加非标准端口进行访问,否则访问网站时会出现404错误。
81
服务器配置
网站服务器相关信息,包括对外协议、源站协议、源站地址、源站端口和权重。
- 对外协议:客户端请求访问服务器的协议类型,包括“HTTP”、“HTTPS”两种。
HTTPS协议是HTTP的安全版本,它在HTTP下增加了 SSL/TLS 协议,提供了数据加密、完整性校验和身份验证。因此,选择HTTS协议时,需要配置证书。
“对外协议”选择“HTTPS”时,支持开启HTTP2协议。
说明:“防护端口”选择“标准端口”时,HTTPS协议默认防护的443端口,HTTP协议默认防护的80端口。
- 源站协议:网站服务器支持的协议类型。也是Web应用防火墙转发客户端请求的协议类型。包括“HTTP”、“HTTPS”两种协议类型。
说明:
如果“对外协议”与“源站协议”不一致,WAF会将“对外协议”转换为“源站协议”,使用“源站协议”来转发客户端的请求。
- 源站地址:客户端访问的网站服务器的公网IP地址(一般对应该域名在DNS服务商处配置的A记录)或者域名(一般对应该域名在DNS服务商处配置的CNAME)。支持以下两种IP格式:
- IPv4,例如:XXX.XXX.1.1
- IPv6,例如:fe80:0000:0000:0000:0000:0000:0000:0000
须知:仅专业版和铂金版支持IPv6防护。
- 源站端口:WAF转发客户端请求到服务器的业务端口。
- 权重:负载均衡算法将按权重将请求分配给源站。
对外协议:HTTP
源站协议:HTTP
源站地址: XXX .XXX.1.1
源站端口:80
证书选择
“对外协议”设置为“HTTPS”时,需要选择证书。
- 如果您未创建证书,单击“导入新证书”,在“导入新证书”对话框,填写证书相关参数。更多信息,请参见上传证书。
成功导入的新证书,将同步添加到“证书管理”页面的证书列表。
- 如果已创建证书,在下拉框“已有证书”中选择正确、有效的证书。
- 如果您已经在同一个账号下使用了CCM中证书,也可以直接在下拉框中选择SCM证书,此处选择的SCM证书名称与CCM里证书名称一致。
须知:- WAF当前仅支持PEM格式证书。如果证书为非PEM格式,请参考如何将非PEM格式的证书转换为PEM格式?将证书转换为PEM格式,再上传。
- 目前华为云SCM证书只能推送到“default”企业项目下。如果您使用其他企业项目,则不能选择使用SCM推送的SSL证书。
- 选择的SCM证书会自动在“证书管理”页面生成一条记录,该证书支持在“证书管理”页面修改证书名称,但不会同步修改CCM里显示的证书名称。
- 如果您的证书即将到期,为了不影响网站的使用,建议您在到期前重新使用新的证书,并在WAF中同步更新网站绑定的证书。
WAF支持证书过期时发送告警通知,您可以在“告警通知”界面配置证书过期提醒,具体的操作请参见开启告警通知。
- 域名和证书需要一一对应,泛域名只能使用泛域名证书。如果您没有泛域名证书,只有单域名对应的证书,则只能在WAF中按照单域名的方式逐条添加域名进行防护。
-
最低TLS版本和加密套件
选择证书后,需要选择最低TLS版本和加密套件。
WAF默认配置的最低TLS版本为TLS v1.0,加密套件为加密套件1。更多信息,请参见配置PCI DSS/3DS合规与TLS。
最低TLS版本:TLS v1.0
加密套件:加密套件1
是否使用七层代理
- 是:使用了DDoS高防(七层代理)、CDN、云加速等Web代理产品。
- 否:没有使用七层代理。
须知:- 选择“是”后,即在WAF前使用了七层代理,WAF将从配置的Header头中的相关字段获取用户真实访问IP,详见配置攻击惩罚的流量标识。
无代理
- 高级配置,如图3所示。
表2 高级配置参数说明 参数
参数说明
取值样例
负载均衡算法
存在多个源站服务器地址时,需选择多源站服务器间的负载均衡算法。
- 源IP Hash:将某个IP的请求定向到同一个服务器。
- 加权轮询:所有请求将按权重轮流分配给源站服务器,权重越大,回源到该源站的几率越高。
- Session Hash:将某个Session标识的请求定向到同一个源站服务器,请确保在域名添加完毕后配置攻击惩罚的流量标识,否则Session Hash配置不生效。
更多信息请见修改负载均衡算法。
加权轮询
IPv6防护
如果该域名存在IPv6协议的访问请求,请选择“开启”,开启后WAF将为域名分配IPv6的接入地址。更多信息请参见开启IPv6防护。
说明:- 仅专业版和铂金版支持IPv6防护。
- “源站地址”选择“IPv6”时,默认开启“IPv6防护”。
- “源站地址”选择“IPv4”时,开启“IPv6防护”后,WAF将为域名分配IPv6的接入地址,即将IPv4源站转化成IPv6网站,将外部IPv6访问流量转化成对内的IPv4流量。具体的请参见WAF如何解析/访问IPv6源站?。
- 当源站存在IPv6地址,默认开启IPv6防护。WAF为了防止客户IPv6的业务中断,禁止关闭IPv6的开关,如果确定不需要IPv6防护,需要先修改服务器配置,在源站删除IPv6的配置,具体的操作方法请参见修改服务器配置信息。
开启
HTTP2协议
如果您的网站需要支持HTTP2协议的访问,则选择“使用”。
HTTP2协议仅适用于客户端到WAF之间的访问,且“对外协议”必须包含HTTPS才支持使用。
须知:- 仅专业版和铂金版支持HTTP2协议。
- “服务器配置”中至少有一条源站地址的“对外协议”配置为HTTPS,开启后才会生效。
- 当客户端最大支持TLS 1.2时,HTTP2才生效。
使用
防护策略
选择要启用的防护策略。
系统自动生成策略
表3 系统自动生成策略说明 版本
防护策略
策略说明
标准版
Web基础防护(“仅记录”模式、常规检测)
仅记录SQL注入、XSS跨站脚本、远程溢出攻击、文件包含、Bash漏洞攻击、远程命令执行、目录遍历、敏感文件访问、命令/代码注入等攻击行为。
专业版、铂金版
Web基础防护(“仅记录”模式、常规检测)
仅记录SQL注入、XSS跨站脚本、远程溢出攻击、文件包含、Bash漏洞攻击、远程命令执行、目录遍历、敏感文件访问、命令/代码注入等攻击行为。
网站反爬虫(“仅记录”模式、扫描器)
仅记录漏洞扫描、病毒扫描等Web扫描任务,如OpenVAS、Nmap的爬虫行为。
“仅记录”模式:发现攻击行为后WAF只记录攻击事件不阻断攻击。
- 单击“下一步”,添加域名完成。
步骤二:放行回源IP
回源IP是WAF转发正常客户端请求到服务器时用的源IP,在服务器看来,接入WAF后所有源IP都会变成WAF的回源IP,而真实的客户端地址会被加在HTTP头部的XFF字段中。
如果源站使用了其他防火墙、网络ACL、安全组、杀毒软件等,很容易把WAF的回源IP当作恶意IP进行拦截。因此,建议您在源站服务器上配置只放行WAF回源IP的访问控制策略,防止黑客获取源站IP后绕过WAF直接攻击源站。
- WAF的回源IP会因为扩容/新建集群而增加,对于一个客户的存量域名,一般回源IP会固定在2~4个集群的几个C类IP地址(192.0.0.0~223.255.255.255)上。
- 一般情况下,在没有灾备切换或其他调度切换集群的场景下,回源IP不会变。且WAF后台做集群切换时,会探测源站安全组配置,确保不会因为安全组配置导致业务整体故障。
- 获取WAF的回源IP。
- 打开源站服务器上的安全软件,将复制的IP段添加到白名单。
- 源站服务器部署在华为云ECS上,请参考源站服务器部署在ECS上,放行WAF回源IP进行操作。
- 源站服务器部署在华为云ELB上,请参考源站服务器部署在华为云ELB上,放行WAF回源IP进行操作。
- 如果您同时使用了华为云云防火墙(CFW),请参考添加防护规则放行WAF的回源IP。
- 如果后端资源在其他云厂商,请在对应安全组、访问控制等中添加信任WAF的回源IP。
- 如果源站服务器只安装了个人版杀毒软件,通常这些软件没有配置加白IP的界面。如果是对外提供Web业务的服务器,建议您安装服务器版本的企业安全软件,或华为云主机安全服务产品,这些产品会识别一些请求量较大的IP的socket,并偶发断开连接,一般情况下不会拦截WAF的回源IP。
- 完成以上操作后,勾选“已完成回源IP加白”。
步骤三:本地验证
您可以修改本地计算机的hosts文件,设置本地计算机的域名寻址映射(仅对本地计算机生效的DNS解析记录),在本地计算机上将网站域名的解析指向WAF的IP地址。这样就可以通过本地计算机访问被防护的域名,验证WAF中添加的域名接入设置是否正确有效,避免域名接入配置异常导致网站访问异常。
进行此操作前请确认:
- 确保添加的域名(例如:www.example5.com)的源站服务器协议、地址、端口配置正确,如果“对外协议”选择了“HTTPS”,也必须确保上传的证书和私钥正确。
- 已完成步骤二:放行回源IP。
- 获取CNAME值。
- 方式一:完成步骤二:放行回源IP后展开“步骤二:本地验证”,或者在“网站设置”页面中“接入状态”列单击“本地验证”,在弹出的页面中复制CNAME值。
- 方式二:在网站设置页面,在目标域名所在行中,单击目标域名名称,进入域名基本信息页面,在“CNAME”信息行,单击,复制“CNAME”值。
- ping“CNAME”值并记录“CNAME”对应的IP地址。
以域名www.example5.com为例,该域名已添加到WAF的网站配置中,且WAF为其分配了以下CNAME值:xxxxxxxdc1b71f718f233caf77.waf.huaweicloud.com。
在Windows中打开cmd命令行工具或者Linux中的bash工具,运行ping xxxxxxxdc1b71f718f233caf77.waf.huaweicloud.com获取WAF的接入IP。如图6所示,在响应结果中可以看到用来防护您的域名的WAF接入IP。如果ping cname没有获取到WAF的接入IP,可能是由于您的网络不稳定,请确保您的网络运行正常,再执行以上操作。
- 在本地修改hosts文件,将域名及“CNAME”对应的WAF接入IP添加到“hosts”文件。
- 用文本编辑器打开hosts文件,hosts文件路径如下:
- Windows:“C:\Windows\System32\drivers\etc\”
- Linux:“/etc/hosts”
- 在hosts文件添加如图7内容,前面的IP地址即在2中获取的WAF接入IP地址,后面的域名即被防护的域名。
- 修改hosts文件后保存,然后在命令行工具运行ping一下被防护的域名。
图8 ping域名
预期此时解析到的IP地址应该是2中绑定的WAF的接入IP地址。如果依然是源站地址,可尝试刷新本地的DNS缓存(Windows的cmd下可以使用ipconfig/flushdns命令,Linux的bash下可以使用systemd-resolved命令)。
- 用文本编辑器打开hosts文件,hosts文件路径如下:
- 访问验证。
- 清理浏览器缓存,在浏览器中输入防护域名,测试网站域名是否能正常访问。
- 手动模拟简单的Web攻击命令,测试Web攻击请求。
- 将Web基础防护的状态设置为“拦截”模式,具体方法请参见配置Web基础防护规则。
- 清理浏览器缓存,在浏览器中输入模拟SQL注入攻击的测试域名,测试WAF是否拦截了此条攻击,如图9所示。
- 在左侧导航树中,选择“防护事件”页面,查看防护域名测试的各项数据。 ,进入
- 完成上述步骤后,勾选“已完成本地验证”。
步骤四:修改域名DNS解析设置
将域名添加到WAF后,WAF作为一个反向代理存在于客户端和服务器之间,服务器的真实IP被隐藏起来,Web访问者只能看到WAF的IP地址,所以您必须将域名的DNS解析指向WAF提供的CNAME地址,才可以使域名的Web请求解析到WAF进行安全防护。本地验证通过后,您需要在DNS服务商处修改DNS解析设置,将网站的Web请求解析到WAF进行安全防护。
修改域名DNS解析设置前请确认:
- 已完成步骤一:添加防护域名、步骤二:放行回源IP、步骤三:本地验证。
- 您拥有在域名的DNS服务商处修改域名解析设置的权限。
未使用代理
- 获取WAF的CNAME。
- 方式一:完成步骤三:本地验证后展开“步骤三:DNS解析”,或者在“网站设置”页面中“接入状态”列单击“修改DNS解析”,在弹出的页面复制CNAME值。
- 方式二:在网站设置页面,在目标域名所在行中,单击目标域名名称,进入域名基本信息页面,在“CNAME”信息行,单击,复制“CNAME”值。
- 修改域名DNS解析为WAF的CNAME值。
到该域名的DNS服务商处,配置防护域名的别名解析,具体操作请咨询您的域名服务提供商。
以下为华为云DNS的CNAME绑定方法,仅供参考。如与实际配置不符,请以各自域名服务商的信息为准。
- 单击页面左上方的,选择 。
- 在左侧导航栏中,选择“公网域名”,进入“公网域名”页面。
- 在目标域名所在行的“操作”列,单击“管理解析”,进入“解析记录”页面。
图10 解析记录
- 在目标记录集的所在行“操作”列,单击“修改”。
- 在弹出的“修改记录集”对话框中修改记录值。
- “主机记录”:在WAF中配置的域名。
- “记录类型”:选择“CNAME-将域名指向另外一个域名”。
- “线路类型”:全网默认。
- “TTL(秒)”:一般建议设置为5分钟,TTL值越大,则DNS记录的同步和更新越慢。
- “记录值”:修改为已复制的WAF CNAME地址。
- 其他的设置保持不变。
图11 修改记录集
关于修改解析记录:
- 对于同一个主机记录,CNAME解析记录不能重复,您需要将已存在的解析记录的CNAME修改为WAF CNAME地址。
- 同一解析记录下,不同DNS解析记录类型间可能存在冲突。例如,对于同一个主机记录,CNAME记录与A记录、MX记录、TXT记录等其他记录互相冲突。在无法直接修改记录类型的情况下,您可以先删除存在冲突的其他记录,再添加一条新的CNAME记录。删除其他解析记录并新增CNAME解析记录的过程应尽可能在短时间内完成。如果删除A记录后没有添加CNAME解析记录,可能导致域名无法正常解析。
域名解析类型的限制规则请参见添加记录集时,为什么会提示“与已有解析记录冲突”?。
- 单击“确定”,完成DNS配置,等待DNS解析记录生效。
使用代理
- 获取WAF的CNAME。
- 方式一:完成步骤三:本地验证后单击“步骤三:修改回源地址”,或者在“网站设置”页面中“接入状态”列单击“修改代理回源地址”,在弹出的页面中复制CNAME值。
- 方式二:在网站设置页面,在目标域名所在行中,单击目标域名名称,进入域名基本信息页面,在“CNAME”信息行,单击,复制“CNAME”值。
- 确认DNS的解析已指向代理,同时将使用的代理类服务(高防、CDN服务等)的回源地址修改为复制的目标域名的CNAME。
为了防止其他用户提前将您的域名配置到Web应用防火墙上,从而对您的域名防护造成干扰,建议您的DNS服务商处添加“子域名”和“TXT记录”。
- 获取“子域名”和“TXT记录”:在域名基本信息页面顶部,单击“未接入”旁边的,在弹出的对话框中,复制“子域名”和“TXT记录”。
- 到DNS服务商处添加“子域名”,并为它配置“TXT记录”。具体的配置方法请参见未配置子域名和TXT记录的影响。
WAF会根据配置“子域名”和“TXT记录”判断域名的所有权属于哪个用户。
配置验证
完成如上配置后,您需要验证域名的CNAME是否配置成功。
- 在Windows操作系统中,选择“cmd”,按“Enter”。 ,在弹出框中输入
- 执行nslookup命令,查询CNAME。
如果回显的域名是配置的CNAME,则表示配置成功,示例如图12所示。
以域名www.example.com为例。
nslookup www.example.com
- 完成以上步骤,勾选“已完成DNS解析”。
步骤五:接入验证
- 接入状态验证。
一般情况下,如果您确认已完成域名接入,“接入状态”为“已接入”,表示域名接入成功。
如果防护域名已接入WAF,“接入状态”仍然为“未接入”,可单击,刷新状态,如果仍然为“未接入”,可参照域名接入状态显示“未接入”,如何处理?重新完成域名接入。
- 网站访问验证。
后续操作
域名接入成功后建议您完成以下操作:
- 网站接入后推荐配置
- 防护网站的“对外协议”使用了“HTTPS”协议时,支持配置PCI DSS/3DS合规与TLS、开启HTTP2协议、开启Cookie安全属性。
- 开启IPv6防护:帮助源站实现IPv6协议请求的安全防护。
- 配置WAF到网站服务器的连接超时时间:WAF到源站的连接超时时长默认为30秒,支持自定义“连接超时”、“读超时”、“写超时”的时间。
- 配置攻击惩罚的流量标识:配置客户端IP标识、Session标识或User标识,实现IP、Cookie或Params恶意请求的攻击惩罚功能。
- 配置Header字段转发:添加Header字段后,WAF会将该字段插入到Header中,转发给源站,用以标记请求。
- 修改拦截返回页面:自定义触发WAF拦截时的返回页面。
- 根据防护需求,调整防护域名配置的防护策略,详见防护配置概述。