导语:各大公司发现它们需要一种高效节能、简单易用的双向通信机制来保证数据的实时传输。在此背景下,基于HTML5规范的、有Web TCP之称的WebSocket应运而生。也就是我们一直说的web通讯的长连接。
0x01、WebSocket应用描述&安全业务需求
伴随着互联网技术的发展,实时交互的应用场景在互联网公司大规模使用,例如:
(1)多玩家App游戏,例如棋牌游戏
(2)Web导航中的地理位置获取
(3)即时聊天通讯
各大公司发现它们需要一种高效节能、简单易用的双向通信机制来保证数据的实时传输。在此背景下,基于HTML5规范的、有Web TCP之称的WebSocket应运而生。也就是我们一直说的web通讯的长连接。
WebSocket在建立连接后,WebSocket服务器和Client Agent都能主动的向对方发送或接收数据,就像Socket一样。
在DDoS攻防领域目前很多游戏,包括棋牌类游戏,百万竞猜答题,都在使用WebSocket协议做通讯。服务器端是Apache Jetty or Tomcat等。传统WebSocket和WSS防护瓶颈,
(1)由于对Web层协议无法支持,主要是基于DDoS防火墙4层防御,看不到内部的通讯原理4层防火墙程序一旦配置不当,App游戏会出现卡顿和掉线情况。
(2)针对CC攻击,由于4层防火墙限制基于源和目的的限速会导致误杀,无法处理特别是NAT后IP请求频率,需要动态调整。
(3)由于客户App程序超时时间为变动值,有可能触发4层防护墙防护空连接检查策略
0x02、4/7层防火墙原理探究
为了更好的理解WebSocket防护原理,我们首先要研究一下高防产品4/7层防护系统是如何处理进入到防火墙集群的数据如何流转。哪些细节是涉及到针对使用WebSocket or WSS的App游戏。
数据流主要经过几个阶段,包括SYN、ACK、HTTP。所以从以上3个阶段分析一下。再此之前要先看一下DDoS整体处理流程。
DDoS防火墙处理大致流程:
备注:由于各家防火墙防护机制不同,部分处理有差异
数据流进入DDoS防护引擎需要经过群组流控、全局白名单、全局ACL控制、全局黑名单、畸形包处理、然后进入到SYN防护流程、ACK防护流程、UDP防护流程、ICMP防护流程、还有其他协议的处理流程(SIP等)。
SYN处理流程:
SYN处理流程经过:报文合法性检测,群组源IP带宽限制,空连接处理,连接数耗尽处理,3秒重传检测,最后进入防护SYN算法(达到pps阈值防护算法,同时设置限制反向探测阈值)
ACK防护流程:
ACK防护流程:主要是包含几部分,第一部分是判断是不是http数据流,如果是进入URL-ACL处理部分和CC处理部分,如果不是则通过ACK用户设置pps判断进入ACK算法处理流程,同时如果选择带回探算法,需要设置探测截止pps,如果回源流量收钱的话,这是降低成本的方法。
CC防护策略:
CC防护流程:首先处理用户自定义策略,比如:哪些主机IP、Referer、URL(支持正则)、User-agent、X_forwarded_for等黑白名单。然后确定CC策略是否开启,进入判断CC_QPS,判断如果单IP和总量超过用户设定的QPS阈值。然后进入对超出阈值的IP访问进行防机器人提交的方法,从轻到重的处罚,302跳转、JS跳转、弹验证等。
通过以上防护策略描述大家应该知道哪些配置影响websocket游戏长连接处理。
0x03、高防产品如何支持Web socket&WSS
这个问题涉及到你高防系统架构问题,如果你的高防防火墙是4/7处理后再转发到用户源站,还是前端防护墙只处理4层DDoS攻击,然后把7层处理放到7层转发系统之上。各有利弊,放到前面可以复用4层处理的数据,包括动态信任列表等,放到后面SLB升级灵活。
如果你的slb在nginx 或者tengine上修改的。
WebSocket使用 ws 或 wss 的统一资源标志符,根据高防产品共享Nginx代理方式,我们需要同时支持http和WebSocket转发。Nginx1.3版本以上就支持WebSocket了,但是要求http支持1.1版本。如果高防产品是自动化配置管理,那还需要升级自动化配置程序,WSS证书和https配置相同。
server { listen80; server_namews.test location / { proxy_pass http://127.0.0.1:8001/; proxy_redirectoff; proxy_http_version1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } }
针对WS协议的攻击目前还没有太牛的案例,所以使用传统CC防护算法可以满足需求,如果出现在一个连接中出现海量提交,可以在代码中加入特殊处理流程。