Minecraft 服务器被 DDoS 攻击怎么办?症状、止血与防护
MC 服务器被打,症状和别的游戏不太一样:后台看 CPU 不高、内存也正常,但玩家就是进不来,TPS 掉到个位数。很多服主第一反应是"服务器配置不够",加钱升配之后发现一点用没有——因为问题不在服务器上。
ping 127.0.0.1 正常、后台命令不卡,但玩家从外网连不上、或者连上就掉,八成是被打了,不是配置问题。
MC 服务器为什么特别容易被打
这不是运气问题,是 MC 的架构决定的:
- 端口必须公开。Java 版默认 25565,基岩版 19132,玩家要连就得知道 IP 和端口,等于把门牌号贴在公告栏上。
- 服务器列表站会公开 IP。mcbbs、各种服务器导航站、以及 MC 自带的服务器列表 ping,都能反查出真实 IP。
- 玩家圈子小、恩怨多。服与服之间抢玩家、玩家和服主闹矛盾,攻击成本又低(网上几十块就能买一小时打手),所以报复性攻击特别多。
- 单包成本极低。MC 的 UDP 查询协议(Query)和基岩版协议都是无连接的,伪造源 IP 打过来,服务器连"谁打的"都不知道。
五种常见攻击,症状不一样
| 攻击方式 | 玩家侧表现 | 后台能看到什么 |
|---|---|---|
| UDP Flood | 全部掉线,重连超时 | 带宽跑满,网卡出口打满,CPU 反而不高 |
| TCP 连接耗尽 | 卡在"正在连接服务器",进不去 | 大量 SYN_RECV 状态连接,netstat 一片 SYN |
| 假人攻击(bot join) | 在线人数虚高,真人被挤掉线 | 登录日志刷屏,大量陌生 ID 进服又秒退 |
| Query 放大 | 间歇性卡顿,TPS 抖动 | Query 端口(默认 25565 UDP)收到异常查询 |
| MOTD 压测 | 服务器列表里显示离线 | 服务器列表 ping 请求暴涨 |
其中假人攻击最容易被误判。它不占带宽、不打满 CPU,就是不停地模拟玩家登录。原版服务端每个登录都要走一次加密握手 + 世界数据下发,几十个假人同时进就能把主线程拖死。这类攻击靠加带宽、加配置完全无效,必须在连接层做人机识别。
先止血,四步
第一步:确认是不是攻击
在服务器上跑:
# 看当前连接数和状态分布
ss -s
ss -ant | awk '{print $1}' | sort | uniq -c | sort -rn
# 看实时带宽(哪个网卡在跑)
iftop -i eth0 -n
# MC 专用:看 TPS 和在线人数是否异常
# 后台执行 /tps 和 /list
如果 ss -ant 里 SYN_RECV 上千、或者 iftop 显示入向流量远超正常峰值,基本可以确定。
第二步:别急着换 IP
换 IP 只对"IP 已泄露且攻击者只认 IP"的情况有用。MC 的攻击者通常会盯着服务器列表,你换了 IP 只要重新上列表,几小时内又被找到。先藏,再换才有意义——具体见服务器被攻击后要换 IP 吗。
第三步:关掉不必要的公开入口
# server.properties 里关掉 query,减少一个放大面
enable-query=false
# 如果不用 RCON,也关掉
enable-rcon=false
同时把 online-mode 保持为 true。关掉正版验证会让假人攻击成本更低——攻击者不用买正版账号就能批量进服。
第四步:上防护
MC 的防护有一个特殊要求:必须同时支持 TCP 和 UDP。Java 版走 TCP 25565,基岩版走 UDP 19132,很多只做 HTTP 防护的 CDN 根本接不了。选择时确认两点:
- 是否支持自定义端口转发(不是只给 80/443)
- 是否有连接层的人机校验,能挡住假人
游戏盾怎么接 MC
接入流程和普通游戏一样,三步:
- 加源机。填你的 MC 服务器内网或公网 IP + 25565 端口。
- 选协议。Java 版选 TCP,基岩版选 UDP,双版本都开就两个都加。
- 改指向。把域名解析或启动器里的地址改成盾机地址,玩家侧不用改任何东西。
接完之后,玩家看到的 IP 是盾机 IP,你的真实 IP 从链路上消失。攻击者打盾机,清洗后再回源,源站只收到正常流量。
ping 或服务器列表测延迟,接盾后这部分延迟会增加盾机到源机的那一跳。国内同城节点通常增加 3-8ms,跨省 10-20ms。如果服里有 PVP 竞技,建议选离源机同城的节点。
防不住的情况有哪些
说点实话,这几种情况防护效果会打折:
| 情况 | 为什么难防 | 怎么办 |
|---|---|---|
| 攻击者是你服里的玩家,知道你的管理后台地址 | 后台端口暴露在外,防护只护了游戏端口 | 后台走内网 / 加 IP 白名单 / 上 VPN |
| 用插件漏洞打(如某些老版本 Bukkit 插件 RCE) | 这是应用层漏洞,不是流量攻击 | 升级插件、关掉不用的插件,防护层帮不了 |
| 超大流量(T 级)持续打 | 超出清洗能力 | 选清洗能力足够大的方案,或临时切高防 |
| 攻击者同时打你的域名和论坛 | 论坛通常没做防护 | 论坛单独上 CDN + WAF |
一个务实的建议
MC 服主最容易犯的错,是"被打一次买一次高防",钱花了不少,下次照样被打。原因是每次都在被动应对,没有解决IP 暴露这个根因。
正确的顺序是:先把真实 IP 藏起来(接防护),再考虑换 IP、加配置。IP 一旦藏住,攻击者只能打盾机,而盾机的清洗能力是你可以按需选择的。
如果不确定自己的服适合哪种方案,可以说一下在线峰值、Java 版还是基岩版、有没有跨服,我们给具体建议——联系方式在这里。