如果您的网站遭受的攻击既有流量型攻击,又混杂精巧的Web应用层攻击时(例如SQL注入、跨站脚本攻击、命令注入等)时,推荐您组合使用阿里云DDoS高防和Web 应用防火墙 WAF(Web Application Firewall),通过多层次的安全防护对抗多种潜在威胁。本文介绍如何同时部署DDoS高防和WAF。
网络架构
DDoS高防和WAF同时部署时采用以下网络架构:DDoS高防(入口层,防御DDoS攻击)->WAF(中间层,防御Web应用攻击)->源站服务器(ECS、SLB、VPC、IDC等)。网站业务流量会先经过DDoS高防清洗,然后转发到WAF过滤Web攻击,最后只有正常的业务流量被转发到源站服务器,保障网站的业务安全和数据安全。业务流量的转发过程如下图所示。
注意事项
访问请求将经过多层中间代理才到达源站,源站不能直接获取请求的真实来源IP。如果您需要获取访问请求的真实来源IP,请参见配置DDoS高防后获取真实的请求来源IP。
前提条件
已购买DDoS高防实例。更多信息,请参见购买DDoS高防实例。
已购买WAF实例。更多信息,请参见购买WAF 3.0包年包月实例或开通WAF 3.0按量付费实例。
说明本文以WAF 3.0为例介绍,如果您使用的是WAF 2.0也可以参考本文操作。
步骤一:网站业务接入WAF
支持CNAME接入和云产品接入两种方式,接入前请您详细了解各接入方式的推荐场景。详细信息,请参见接入概述。
登录Web应用防火墙3.0控制台。在顶部菜单栏,选择WAF实例的资源组和地域(中国内地、非中国内地)。
在左侧导航栏,单击接入管理。
通过CNAME接入或云产品接入,将业务接入WAF。
CNAME接入
- 在CNAME接入页签单击接入。
在配置监听向导页,完成如下配置后,单击下一步。
仅简要介绍各配置项,更详细的配置项介绍,请参见通过CNAME接入为网站开启WAF防护。
配置项
配置说明
域名
填写您的网站域名。
协议类型
选择网站使用的协议类型并填写对应端口。每输入一个端口,按回车确认。
说明选中HTTPS后,您还需要将网站域名关联的证书上传到WAF。如果您的网站要同时支持国密SM2算法,您需要上传国密证书。
选中HTTPS并配置证书后,您也可以根据业务需要,设置是否开启HTTP2、是否开启HTTPS的强制跳转、选择TLS协议版本、选择HTTPS加密套件。
WAF前是否有七层代理(高防/CDN等)
选择是,并设置客户端IP判定方式。
(默认)取X-Forwarded-For中的第一个IP作为客户端源IP
WAF默认读取请求Header字段
X-Forwarded-For(XFF)中的第一个IP地址作为客户端IP。【推荐】取指定Header字段中的第一个IP作为客户端源IP,避免XFF伪造
如果您的网站业务已通过其他代理服务的设置,规定将客户端源IP放置在某个自定义的Header字段(例如,X-Client-IP、X-Real-IP),则您需要选择该选项,并在指定Header字段框中输入对应的Header字段。
说明推荐您在业务中使用自定义Header存放客户端IP,并在WAF中配置对应Header字段。该方式可以避免攻击者伪造XFF字段,躲避WAF的检测规则,提高业务的安全性。
更多配置
根据您的业务,设置是否开启IPv6、是否开启独享IP,选择要使用的防护资源类型。
资源组
从资源组下拉列表中选择该域名所属资源组。如果不选择,则默认加入默认资源组。
在配置转发向导页,完成如下配置后,单击提交。
在接入完成向导页,获取WAF提供的CNAME地址。
配置项
说明
负载均衡算法
源站有多个服务器地址时,根据业务需要设置,以实现负载均衡。
服务器地址
填写网站对应的源站服务器的公网IP地址或源站域名,用于接收WAF转发回源的正常业务请求(回源请求)。
HTTPS高级设置
根据业务需要,设置是否开启HTTP回源、是否启用回源SNI。
其它高级设置
根据业务需要,设置是否启用流量标记、WAF回源到源站的超时时间、回源重试、回源长连接。
云产品接入
具体操作,请参见云产品接入。
如果Web业务已启用阿里云应用型负载均衡(Application Load Balancer,简称ALB)、微服务引擎(Microservices Engine,简称MSE)、函数计算(Function Compute,简称FC)或Serverless 应用引擎 SAE(Serverless App Engine,简称SAE),建议您选择SDK插件接入。如果Web业务已启用阿里云传统型负载均衡(Classic Load Balancer,简称CLB)上、云服务器(Elastic Compute Service,简称ECS),建议您通过反向代理集群接入。
步骤二:网站业务接入DDoS高防
登录DDoS高防控制台。
在顶部菜单栏左上角处,根据DDoS高防产品选择地域。
DDoS高防(中国内地):选择中国内地地域。
DDoS高防(非中国内地):选择非中国内地地域。
在左侧导航栏,选择。
在域名接入页面,单击添加网站,填写网站接入信息,然后单击下一步。
配置项
说明
功能套餐
选择要关联的DDoS高防实例的功能套餐。
实例
选择要关联的DDoS高防实例。
一个网站域名最多可以关联8个DDoS高防实例,且只能关联同一种功能套餐下的多个实例。
网站
填写您的网站域名。
协议类型
选择网站支持的协议类型。
说明选择HTTPS协议时,完成网站配置后,请上传网站域名使用的证书。
选中HTTPS协议后,可以根据需要开启HTTPS的强制跳转、是否开启HTTP回源、是否启用HTTP2。
关于如何上传证书、自定义安全策略、启用OCSP Stapling,请参见添加网站配置。
服务器地址
域名在WAF上的接入模式为CNAME接入时,选择源站域名并填写步骤一中获取的WAF的CNAME地址。
域名在WAF上的接入模式为云产品接入时,选择源站IP并填写源站服务器的公网IP。
服务器端口
根据协议类型,设置源站提供对应服务的端口。
HTTP协议、Websocket协议的端口默认为80。
HTTPS协议、HTTP2协议、Websockets协议的端口默认为443。
您可以单击自定义,自定义服务器端口,多个端口间使用半角逗号(,)分隔。
Cname Reuse
仅DDoS高防(非中国内地)支持配置该参数。选择是否开启CNAME复用。更多信息,请参见CNAME复用。
填写转发配置,然后单击下一步。
回源设置
回源负载算法:当配置了多个源站IP或源站域名时,可通过修改回源负载均衡算法或者为不同服务器设置权重,决定流量在多个源站间的分配方式。
方案
适用场景
机制说明
轮询(默认)
多源站且对源站负载均匀要求较高的场景。
所有请求轮流分配给所有服务器地址,默认所有服务器地址具有相同权重。支持修改服务器权重,服务器权重越大,被分配到请求的可能性越高。
IP hash
需要保持用户会话一致性的场景,极端情况下可能存在负载不均衡。
将来自同一客户端IP的请求始终定向到同一台源站服务器,以保证会话一致性。支持设置IP hash的同时为服务器设置权重,根据服务器的处理能力进行权重分配,可将流量优先导向性能更强的服务器。
Least time
对访问速度和响应延迟极其敏感的业务(如游戏、在线交易)。
通过智能DNS解析能力和Least time回源算法,保证业务流量从接入防护节点到转发回源站服务器整个链路的时延最短。
回源重试:表示对域名转发源站的可用性进行健康检查的探测次数,默认值3。回源重试机制如下:
仅当业务流量访问高防节点时触发回源重试功能,当高防节点检测到域名源站不可用时会进行回源重试。
超过重试次数仍然不可达时将进入静默状态,不再对该源站进行流量转发和探测。
静默结束后重新根据业务流量触发回源重试功能。如果回源重试成功,则对源站重新拉起。
流量标记:
请求头字段转发配置:DDoS高防支持请求头转发配置功能,可以在转发请求到源站时添加或修改HTTP请求头信息,帮助识别和标记通过高防的流量。
插入 X-Client-IP 获取真实IP:用于传递客户端真实原始的IP地址。
插入 X-True-IP 获取建连IP:用于传递客户端建立连接的IP地址。
插入 Web-Server-Type 获取服务类型:通常由第一个代理添加,用于告知后端服务器处理当前请求的前端Web服务器或代理类型。
插入 WL-Proxy-Client-IP 获取建连IP:功能与X-Client-IP相同,为 Oracle WebLogic Server 特有的请求头。
插入 X-Forwarded-Proto 获取监听协议:客户端与第一个代理之间建立连接所使用的协议。
流量标记
默认标记
说明JA3指纹、JA4指纹、客户端TLS指纹、HTTP2.0指纹需联系商务经理配置。
如果业务使用自定义字段代替默认标记,请参考下文自定义Header。配置后,从高防转发到源站的请求中解析该字段,解析示例请参见配置DDoS高防后获取真实的请求来源IP。
客户端真实源端口:HTTP Header中客户端真实源端口所在的头部字段名,通常使用
X-Forwarded-ClientSrcPort字段记录。客户端真实源IP:HTTP Header中客户端真实源IP所在的头部字段名,通常使用
X-Forwarded-For字段记录。JA3指纹:HTTP Header中客户端JA3指纹的MD5哈希值所在的头部字段名,通常使用
ssl_client_ja3_fingerprinting_md5字段记录。JA4指纹:HTTP Header中客户端JA4指纹MD5哈希值所在的头部字段名,通常使用
ssl_client_ja4_fingerprinting_md5字段记录。客户端TLS指纹:HTTP Header中客户端TLS指纹的MD5哈希值所在的头部字段名,通常使用
ssl_client_tls_fingerprinting_md5字段记录。HTTP2.0指纹:HTTP Header中客户端HTTP2.0指纹的MD5哈希值所在的头部字段名,通常使用
http2_client_fingerprint_md5字段记录
自定义Header:在请求中增加自定义HTTP Header(包含字段名称和字段值)来标记经过DDoS的请求。高防在代理网站流量时,会在转发到源站的请求中添加对应的字段值,方便后端服务进行统计分析。
命名限制:为避免关联请求原始头部字段的内容被改写,自定义Header的字段名(Key)不得使用以下保留或常用字段:
高防默认字段:
X-Forwarded-ClientSrcPort:默认被用于获取访问高防七层引擎的客户端端口。X-Forwarded-ProxyPort:默认被用于获取访问高防七层引擎的监听端口。X-Forwarded-For:默认被用于获取访问高防七层引擎的客户端IP。ssl_client_ja3_fingerprinting_md5:默认被用于获取客户端JA3指纹MD5哈希值。ssl_client_ja4_fingerprinting_md5:默认被用于获取客户端JA4指纹MD5哈希值。ssl_client_tls_fingerprinting_md5:默认被用于获取客户端TLS指纹的MD5哈希值。http2_client_fingerprint_md5:默认被用于获取客户端HTTP2.0指纹的MD5哈希值。
标准HTTP字段:如host、user-agent、connection、upgrade等。
常见代理字段:如x-real-ip、x-true-ip、x-client-ip、web-server-type、wl-proxy-client-ip、eagleeye-rpcid、eagleeye-traceid、x-forwarded-cluster、x-forwarded-proto等被广泛使用的自定义HTTP头部字段。
数量限制:最多支持添加5个自定义Header标签。
配置建议:
请优先使用默认标记。
建议先在测试环境验证header字段配置效果后再应用到生产环境。
字段值长度建议控制在100字符以内,避免影响转发性能。
Cname Reuse:选择是否开启CNAME复用。开启CNAME复用后,只需将同一个服务器上多个域名的解析指向同一个高防CNAME地址,即可将多个域名接入高防,无需为每个域名分别添加高防网站配置。更多信息,请参见CNAME复用。
重要仅DDoS高防(非中国内地)支持配置该参数。
其他设置
开启HTTP回源:如果网站不支持HTTPS回源,请务必开启该设置。开启该设置后,所有HTTPS协议请求将通过HTTP协议回源、所有Websockets协议请求将通过Websocket协议回源,且默认回源端口为80。
说明HTTPS非标准端口(443以外的端口)访问的场景下,如果开启了HTTP回源,则访问默认跳转到源站HTTP 80端口。
HTTP2.0回源:启用HTTP2.0回源后,DDoS将通过HTTP2.0协议向源站回源。
警告此功能配置,需联系商务经理开通。
若源站不支持HTTP2.0,请勿配置,否则网站无法访问。
cookie设置
下发状态:默认开启。DDoS高防将会在客户端(如浏览器)植入Cookie用于区分统计不同客户端或者获取客户端的指纹信息等。详细介绍,请参见设置CC安全防护。
重要如果应用在接入高防后出现登录闪退或会话丢失问题,可以尝试关闭此开关。但请注意,关闭后部分CC防护功能将无法生效。
Secure属性:默认关闭。若开启,Cookie只会在HTTPS连接中被发送,而不会在HTTP连接中发送,有助于保护Cookie不被攻击窃取。
说明当网站业务仅支持HTTPS链接时建议开启。
设置新建连接超时时间:DDoS高防尝试建立到源站的连接时间。
说明超过该时间连接未建立完成,会被认定为失败。
设置读连接超时时间:DDoS高防成功建立连接并向源站发出读取数据请求之后,等待源站返回响应数据的最长时间。
设置写连接超时时间:数据从DDoS高防发送出去之后,并由源站开始处理之前,DDoS高防等待的时间长度。
说明超过这段时间,如果DDoS高防还没有成功地将所有数据发送给源站,或者源站没有开始处理数据,会被认定为失败。
回源长连接:由于在缓存服务器与源站之间,TCP连接在一段时间内保持活跃,而不是每完成一次请求就关闭,从而造成资源浪费。开启回源长连接后可减少建立连接的时间和资源消耗,提高请求处理的效率与速度。
复用长连接的请求个数:在DDoS高防向源站建立的一个TCP连接中,支持发送的HTTP请求个数,可以减少因频繁建立和关闭连接所带来的延迟和资源消耗。
说明建议小于等于后端源站(如:WAF、SLB)上配置的长连接请求复用个数,以免长连接关闭造成业务无法访问。
空闲长连接超时时间:DDoS高防向源站建立的一个TCP长连接,在没有数据传输之后,在高防的连接池保持开启状态的最长时间。这个时间段内如果没有新的请求,该连接将被关闭,以释放系统资源。
说明建议小于等于后端源站(如:WAF、SLB)上配置的超时时长,以免长连接关闭造成业务无法访问。
复制DDoS高防提供的CNAME地址。
步骤三:修改域名的DNS解析
请将域名解析指向DDoS高防提供的CNAME地址。以域名DNS托管在阿里云云解析DNS为例介绍,使用其他DNS服务商的域名解析服务时请参考配置。
登录阿里云云解析DNS控制台。
在域名解析页面,定位到目标域名,单击操作列的解析设置。
在解析设置页面,定位到目标解析记录,单击操作列的修改。
说明如果要操作的解析记录不在记录列表中,您可以单击添加记录。
在修改记录(或添加记录)页面,选择记录类型为CNAME,并将记录值修改为域名对应的DDoS高防CNAME地址(即步骤二中获取到的DDoS高防CNAME地址)。
单击确认,等待修改后的解析设置生效。
使用浏览器测试网站访问是否正常。
相关文档
修改DNS解析后,如果网站访问出现异常,请参见业务接入DDoS高防后存在卡顿、延迟、访问不通等问题。
同时部署DDoS高防和CDN时,请参见DDoS高防和CDN或DCDN联动。