UDP 游戏服的难点不是“把包挡得越多越好”,而是异常流量和正常游戏数据可能使用同一端口。配置过严,会让共享公网地址的玩家一起掉线;回源规则过宽,则可能让攻击流量绕过入口直接打到服务器。制定 UDP游戏服务器的攻击缓解方案时,应先区分流量类型,再逐项调整限速与回源。
限速先分清限制对象
限速至少有两种口径:按带宽限制比特率,适合控制链路占用;按包速率限制每秒数据包数,适合应对小包密集的冲击。只看带宽可能漏掉包速率异常,只看包速率则可能误伤包体较大的正常状态更新。应同时观察入口带宽、每秒包数、丢包和游戏进程负载。
不要轻易按单个源地址一刀切
按源地址限速配置简单,但家庭路由器、校园网或移动网络可能让多名玩家共用一个公网地址。阈值太低时,一个地址上的多人会共同触发限制。令牌桶可允许短时突发,较适合玩家操作产生的瞬时流量;持续超限后再丢弃或降级,比固定窗口内超量即全部拒绝更平滑。具体阈值应从正常时段的分位数和不同玩法数据中校准,不能把某款游戏的包速率直接套用到另一款。
如果游戏把登录、匹配和实时对局放在不同端口或消息类型上,应分别设限。登录请求可限制单位时间内的新建尝试;实时对局则应优先保障已建立会话的必要数据。若协议允许源地址校验或挑战响应,可在分配昂贵的会话状态之前先验证请求,减少源地址伪造带来的资源消耗。
回源设置要防绕过,也要防误断
回源指流量经过缓解入口后转发到游戏服务器。入口只允许可信转发节点访问业务端口,可以降低直接绕过缓解层的风险;但白名单要与实际出口地址、协议和端口逐项核对。若配置只覆盖一个地址段、漏掉备用转发节点,切换时可能出现全服不可达;若把管理端口也开放给所有转发来源,则扩大了暴露面。
还要确认转发后服务器看到的是玩家源地址还是代理侧地址。若多个玩家都呈现为同一个转发地址,服务器端的源地址限速会把他们当成一组;若真实地址通过额外字段传递,也需确认游戏服务端确实可信地解析该字段,不能仅凭客户端可填写的信息作限速依据。
Linux 上的 conntrack 会为 UDP 流量维护有限时状态,短时间内大量新源地址可能增加状态表压力。不要只调高限速而忽略状态表占用,也不要未经评估就大幅延长 UDP 超时:过长会让失效状态留存,过短则可能中断间隔较长的游戏通信。应结合实际会话间隔和系统监控调整,并确认入口设备与源站的路由返回路径符合服务商的转发要求。
按顺序调整,保留回退条件
记录正常对局、登录高峰和维护时段的带宽、包速率、丢包率及服务器负载,按端口和流量类型分开查看。
先在入口侧对明显无效或不需要的 UDP 端口设规则;对业务端口从较宽松的限速开始,分别测试带宽与包速率门槛。
配置回源白名单时核实所有转发出口、业务端口和备用路径,并从外部确认源站不能被非授权路径直接访问。
观察玩家掉线、匹配失败、丢包、状态表占用和源站入流量。每次只改一类参数,保留原值与变更时间;出现正常玩家明显受影响时,先回退最近变更,再分析触发规则。
实际处置中,入口限速与源站回源规则要配套:只在源站丢包,可能是回源链路或源站资源瓶颈;入口流量异常但源站稳定,则需检查缓解策略是否有效。UDP游戏服务器的攻击缓解方案不应追求单一“万能阈值”,而要用可观测数据验证每次调整。
常见问题
能否直接把所有 UDP 流量限到同一个速率?
不建议。不同端口、消息类型和玩法的包速率差异明显,统一阈值容易误伤正常对局,也可能放过小包高频流量。
按公网源地址限速为什么会误伤玩家?
多个玩家可能共享同一公网地址。应结合端口、会话或协议特征细分;协议无法区分时,需提高突发容忍并谨慎下调阈值。
回源白名单配置后还要检查什么?
检查备用转发路径是否也在白名单内、源站业务端口是否只能经授权入口访问,以及故障切换时返回路由是否正常。
限速调整后多久判断是否有效?
没有适用于所有游戏的固定观察时长。至少覆盖相应业务的登录或对局周期,并比较调整前后的丢包、掉线、源站负载和入口流量。