晚上八点游戏刚开服,玩家排队等待进入主城。公屏突然有人反馈卡顿,紧接着大量玩家掉线,登录页面持续转圈无法进入。查看后台,带宽占满,大量不明连接耗尽CPU资源。遇到这类现象,大概率是遭受DDoS攻击。做游戏相关业务的人都听过这个名词,但很多人说不清防护目标和实现方式。
DDoS攻击,就是控制大量傀儡机器,同时向目标服务器发送海量无效请求。攻击者不关心服务器承载的业务,目标是用尽流量或者连接资源。游戏服务器更容易被盯上,游戏业务对延迟敏感度很高,轻微卡顿就会引发玩家不满,严重情况直接流失用户。游戏存在充值流水,攻击者发起攻击的目的包含勒索、同行竞争或是单纯炫耀技术。

游戏DDoS防护能够拦截多种攻击类型。流量型攻击最为常见,UDP洪水、ICMP洪水都属于这类。攻击方式没有复杂逻辑,依靠超大流量占满出口带宽。游戏大量依靠UDP传输位置、动作数据,UDP洪水流量混杂正常数据包,很难快速区分。反射放大攻击,攻击者伪造目标IP,向DNS、NTP服务器发起请求,服务器返回数十倍甚至上百倍流量打向目标。DNS、NTP、SSDP、memcached协议都曾被滥用,少量请求就能生成巨量回包,攻击者成本低,目标带宽瞬间占满。
连接型攻击干扰效果同样明显。SYN洪水是经典攻击手段,发送大批量半开连接,填满服务器连接表,正常玩家无法完成TCP握手。ACK洪水、FIN洪水这类衍生攻击,持续消耗防火墙和系统资源。游戏服务器需要维持大批量长连接,连接表被无效连接占满,真实玩家连接会被排挤。
应用层攻击,也就是CC攻击。攻击流量规模不大,请求行为和正常访问高度相似。重复调用登录接口、频繁创建房间、反复查询排行榜都属于这类。单条请求合规,但请求量持续上涨,数据库和业务代码扛不住压力。游戏场景的CC攻击隐蔽性更强,攻击者模拟游戏客户端协议发包,普通防火墙很难识别。
协议层攻击专门寻找游戏通信协议漏洞。伪造玩家账号反复发起登录请求,或是利用发包缺陷让服务器陷入死循环。这类攻击不需要大流量,就能瘫痪指定服务。部分外挂制作者同时会发起这类攻击,逼迫运营方采购防护服务。
防护的核心逻辑就是流量清洗。正常状态玩家直接访问源服务器,系统识别攻击行为之后,流量牵引至高防节点。高防节点带宽充足,部署在多个机房,攻击流量抵达节点,依靠特征、访问速率、行为、协议合规度判定数据包。恶意数据包直接丢弃,合法流量转发回源站。整个过程玩家几乎没有感知,延迟小幅上涨几毫秒。
流量牵引存在多种方案。修改DNS解析使用最广泛,域名解析指向高防IP,攻击流量打到高防节点,无法触达真实源服务器。BGP牵引灵活性更强,路由宣告实现流量调度,就近清洗,在靠近攻击源位置丢弃恶意流量,减少带宽消耗。Anycast思路相近,同一个IP在多地域宣告,攻击流量分散到各个节点,降低单点负载。
游戏防护相比普通网站防护难度更高,核心难点是不能误拦截正常用户。网站业务可以弹出验证码、封禁IP段,游戏不能这样操作。封禁单个IP段,可能整个网吧玩家全部无法登录;对局中途弹出验证码,玩家没法操作。游戏防护更多依靠行为分析、协议指纹识别。系统学习正常玩家发包频率、连接时长、数据包特征,访问行为偏离基线就触发限速丢包。部分方案会在客户端与服务端增加私有协议加密,攻击者无法解析协议内容,模拟正常访问的难度提升。
隐藏源IP是另一项关键操作。很多攻击可以直达服务器,根源是源站IP暴露。高防IP代理回源,源服务器仅接收来自高防节点的流量,攻击者就算拿到域名也定位不到真实服务器。搭配弹性带宽,日常按需使用,攻击到来临时扩容,攻击结束缩减资源,对比常年预留大带宽节省成本。
防护手段不是万能的。防护主要处理流量、连接层面的资源挤占,如果业务代码本身存在漏洞,接口缺少访问频率限制,少量请求就能触发数据库慢查询,这类问题只能修改代码解决。防护系统抵御外部流量攻击,但业务本身漏洞依旧会被利用。
实际运维场景,小规模攻击依靠自动清洗几秒内完成处置,大型攻击依靠充足带宽储备、分布式节点承受压力。运营侧也要配套处理,限制单IP登录频次,登录排队增加缓冲,多区分散部署在不同线路。业务侧配置和防护系统配合,稳定性更好。
游戏DDoS防护的目标并不是制服攻击者,而是保证普通玩家感知不到攻击存在。玩家顺利登录、正常对局、延迟平稳,防护就起到效果。攻击者持续攻击无法造成业务影响,一般会更换目标。