08 - 反作弊与安全防护
08 - 反作弊与安全防护
8.1 作弊类型概览
8.1.1 常见作弊手段
| 作弊类型 | 说明 | 危害等级 | 示例客户端 |
|---|---|---|---|
| Xray/矿透 | 透视方块,只看到矿石 | ⭐⭐⭐⭐ | Xray Resource Pack, Wurst |
| KillAura | 自动攻击附近实体 | ⭐⭐⭐⭐⭐ | Wurst, Impact |
| Reach | 增加攻击/放置距离 | ⭐⭐⭐⭐ | |
| Fly | 飞行作弊 | ⭐⭐⭐ | |
| Speed | 移动加速 | ⭐⭐⭐ | |
| ESP | 透视玩家/实体 | ⭐⭐⭐ | |
| Jesus | 水上行走 | ⭐⭐ | |
| Scaffold | 自动搭路 | ⭐⭐⭐ | |
| Nuker | 快速破坏方块 | ⭐⭐⭐⭐ | |
| Inventory Hack | 远程操作箱子 | ⭐⭐⭐ | |
| Dupe | 物品复制漏洞 | ⭐⭐⭐⭐⭐ | |
| Crash Exploit | 崩服漏洞 | ⭐⭐⭐⭐⭐ |
8.1.2 作弊检测原理
玩家输入 → 服务端验证 → 规则检查 → 判定
↓
位置数据 → 移动合法性检查
攻击数据 → 攻击范围检查
方块交互 → 放置/破坏合法性
速度数据 → 速度限制检查
8.2 Paper 内置安全功能
8.2.1 反 Xray
Paper 内置了高效的反 Xray 功能,无需额外插件:
# config/paper-world-defaults.yml
anticheat:
anti-xray:
# 启用反 Xray
enabled: true
# 引擎模式
# 1 = 替换矿石为假矿石(性能好,推荐)
# 2 = 替换所有方块为石头(效果好,性能开销大)
engine-mode: 1
# 被隐藏的方块(engine-mode: 1 时有效)
hidden-blocks:
- gold_ore
- deepslate_gold_ore
- iron_ore
- deepslate_iron_ore
- coal_ore
- deepslate_coal_ore
- lapis_ore
- deepslate_lapis_ore
- diamond_ore
- deepslate_diamond_ore
- redstone_ore
- deepslate_redstone_ore
- emerald_ore
- deepslate_emerald_ore
- copper_ore
- deepslate_copper_ore
# 岩浆是否遮挡矿石
lava-obscures: true
# 更新半径
update-radius: 2
# 使用权限节点(允许特定玩家绕过)
use-permission: false
engine-mode 对比:
| 模式 | 效果 | 性能影响 | 推荐 |
|---|---|---|---|
| 0 | 关闭 | 无 | 不推荐 |
| 1 | 替换矿石 | 低 | ⭐ 推荐 |
| 2 | 替换所有不透明方块 | 中 | 高安全需求 |
注意:反 Xray 仅在服务端启用时有效。对于客户端资源包作弊(Resource Pack Xray),Paper 的反 Xray 同样有效,因为它修改的是发送给客户端的区块数据。
8.2.2 飞行检测
# server.properties
allow-flight=false
# 设为 false 时,服务端会检测飞行并踢出
# 但会误判创造模式和滞留药水
# config/paper-global.yml
unsupported-settings:
# 检测到非法移动时的行为
# 可以配置踢出信息
8.2.3 移动检查
# spigot.yml
settings:
# 移动过快检测阈值
moved-too-quickly-multiplier: 10.0
# 移动错误阈值
moved-wrongly-threshold: 0.0625
8.2.4 实体碰撞限制
# config/paper-global.yml
collisions:
# 禁用玩家碰撞(减少碰撞作弊利用)
enable-player-collisions: false
# 实体碰撞最大数
max-entity-collisions: 4
8.3 反作弊插件
8.3.1 插件对比
| 插件 | 价格 | 检测能力 | 误判率 | 性能影响 | 推荐度 |
|---|---|---|---|---|---|
| Vulcan | 付费 | ⭐⭐⭐⭐⭐ | 低 | 低 | ⭐⭐⭐⭐⭐ |
| GrimAC | 免费 | ⭐⭐⭐⭐ | 低 | 低 | ⭐⭐⭐⭐ |
| NoCheatPlus | 免费 | ⭐⭐⭐ | 中 | 低 | ⭐⭐⭐ |
| Matrix | 免费/付费 | ⭐⭐⭐⭐ | 中 | 中 | ⭐⭐⭐ |
| Spartan | 付费 | ⭐⭐⭐ | 中 | 中 | ⭐⭐ |
8.3.2 Vulcan 配置
Vulcan 是目前检测能力最强的反作弊插件:
# plugins/Vulcan/config.yml
# 全局设置
settings:
# 是否在违规时取消操作(而非踢出)
cancel: true
# 日志详细程度
verbose: false
# 性能模式
performance-mode: true
# 检查模块
checks:
movement:
speed:
enabled: true
max-vl: 10 # 最大违规次数
punish: "kick" # 惩罚:kick / ban / warn
fly:
enabled: true
max-vl: 10
nofall:
enabled: true
max-vl: 5
combat:
killaura:
enabled: true
max-vl: 15
# 检测类型
rotation: true # 旋转检测
hitbox: true # 命中框检测
multi: true # 多目标检测
reach:
enabled: true
max-vl: 10
max-distance: 3.5 # 最大攻击距离
critical:
enabled: true
max-vl: 5
player:
scaffold:
enabled: true
max-vl: 10
fastbreak:
enabled: true
max-vl: 5
fastplace:
enabled: true
max-vl: 5
# 处罚配置
punishments:
broadcast: true # 广播违规信息
broadcast-message: "&c[Vulcan] &7%player% &c因 &7%check% &c被处罚"
commands:
- vl: 10
command: "kick %player% 检测到违规行为"
- vl: 30
command: "tempban %player% 1d 重复违规"
8.3.3 GrimAC 配置
GrimAC 是免费开源的高性能反作弊:
# plugins/GrimAC/config.yml
# 应用层设置
application:
# 反应时间(毫秒)
delay: 500
# 是否使用异步检测
async: true
# 检查设置
checks:
# 移动检查
movement:
# 速度检查
speed:
enabled: true
setback: true # 回弹非法移动
# 飞行检查
fly:
enabled: true
setback: true
# 游泳检查
swimming:
enabled: true
# 战斗检查
combat:
# 攻击距离
reach:
enabled: true
distance: 3.0
# 攻击速度
attack-speed:
enabled: true
# 暴击检查
critical:
enabled: true
# 方块交互检查
placement:
# 放置距离
reach:
enabled: true
distance: 4.5
# 放置速度
speed:
enabled: true
# 踢出设置
knockback:
# 是否回弹
setback: true
# 回弹消息
message: "&c检测到非法移动"
8.3.4 NoCheatPlus 配置
老牌免费反作弊,配置简单:
# plugins/NoCheatPlus/config.yml
# 严格模式
strict:
falsepositive:
active: true
# 检查配置
checks:
movement:
survivalfly:
# 生存模式飞行检查
actions:
first: cancel
then:
- cancel vl>100
- kick vl>200
creativefly:
# 创造模式飞行检查
actions:
first: cancel
blockbreak:
fastbreak:
# 快速破坏检查
actions:
first: cancel
then:
- cancel vl>50
fighting:
reach:
# 攻击距离检查
actions:
first: cancel
then:
- cancel vl>30
- kick vl>100
8.4 防熊策略
8.4.1 WorldGuard 区域保护
# 安装 WorldGuard 后设置全局标志
# 禁止放置 TNT
/rg flag __global__ tnt deny
# 禁止火焰蔓延
/rg flag __global__ fire-spread deny
# 禁止液体流动(保护建筑)
/rg flag __global__ lava-flow deny
/rg flag __global__ water-flow deny
# 禁止爆炸破坏
/rg flag __global__ creeper-explosion deny
/rg flag __global__ tnt-explosion deny
# 禁止活塞推动(防止活塞虫)
/rg flag __global__ piston deny
# 限制实体生成(防止大量动物堆积)
/rg flag __global__ mob-spawning deny
8.4.2 CoreProtect 方块日志
# plugins/CoreProtect/config.yml
# 保留日志时间(天)
purge: 90
# 方块日志
logging:
# 记录方块放置/破坏
block: true
# 记录方块交互(开箱、按按钮等)
interact: true
# 记录容器操作(拿取/放入物品)
container: true
# 记录实体变化
entity: true
# 记录玩家死亡
player-death: true
# 常用 CoreProtect 命令
/co inspect # 开启检查模式
/co lookup u:<用户> r:<范围> t:<时间> # 查询操作
/co rollback u:<用户> t:<时间> r:<范围> # 回滚操作
/co restore # 恢复回滚
/co purge t:<天数> # 清理旧日志
8.4.3 登录插件(AuthMe)
对于盗版服务器,AuthMe 是必备的:
# plugins/AuthMe/config.yml
settings:
# 强制注册
ForceSingleSession: true
# 登录超时(秒)
RegistrationTimeout: 60
# 密码最小长度
minPasswordLength: 6
# 密码最大长度
maxPasswordLength: 30
Protection:
# 保护设置
enableProtection: true
# 安全位置(未登录时传送的位置)
safetySpawn: true
# 限制未登录玩家的命令
allowCommands:
- /login
- /register
- /help
8.5 网络层安全
8.5.1 连接限流
# server.properties
# 连接限流(毫秒)
connection-throttle=4000
# 每 IP 最大连接数
rate-limit=3
8.5.2 防止代理连接
# server.properties
prevent-proxy-connections=true
8.5.3 白名单
# server.properties
white-list=true
enforce-whitelist=true
# 添加白名单
/whitelist add PlayerName
/whitelist on
8.6 安全配置最佳实践
8.6.1 服务器安全检查清单
| 检查项 | 配置位置 | 推荐值 | 说明 |
|---|---|---|---|
| 在线模式 | server.properties | true | 防止盗版登录 |
| 反 Xray | paper-world-defaults.yml | engine-mode:1 | 防矿透 |
| 白名单 | server.properties | 按需 | 限制玩家进入 |
| 爆炸保护 | WorldGuard | deny | 防止 TnT 破坏 |
| 方块日志 | CoreProtect | 启用 | 可追溯和回滚 |
| 反作弊 | Vulcan/GrimAC | 启用 | 检测作弊行为 |
| 玩家碰撞 | paper-global.yml | false | 减少碰撞作弊 |
| IP 限流 | server.properties | 4000ms | 防止连接刷 |
| OP 管理 | LuckPerms | 权限组替代 | 不使用 OP |
8.6.2 游戏规则安全设置
# 禁用命令方块(防止恶意命令方块)
gamerule commandBlockOutput false
# 限制命令方块执行权限
# server.properties
enable-command-block=false
# 禁用调试棒(防止利用)
gamerule sendCommandFeedback false
# 设置出生点保护
# server.properties
spawn-protection=16
8.7 应急响应
8.7.1 发现作弊玩家
# 1. 使用 CoreProtect 检查操作记录
/co lookup u:<玩家名> t:24h r:100
# 2. 使用 Spark 检查该玩家的行为
/spark activity --player <玩家名>
# 3. 临时封禁
/tempban <玩家名> 1d 可疑作弊行为
# 4. 使用反作弊插件的详细日志
/vulcan log <玩家名>
8.7.2 发现漏洞利用
# 1. 立即封禁利用者
/ban <玩家名> 漏洞利用
# 2. 检查损失
/co lookup u:<玩家名> t:1h r:50
# 3. 回滚操作
/co rollback u:<玩家名> t:1h r:50
# 4. 检查服务器日志
grep -i "exploit\|dupe\|hack" /opt/minecraft/paper/logs/latest.log
# 5. 更新插件和 Paper 到最新版本
8.7.3 DDoS 攻击应对
# 1. 启用防火墙限制
sudo ufw limit 25565/tcp
# 2. 使用 fail2ban 限制频繁连接
sudo fail2ban-client set minecraft banip <攻击IP>
# 3. 启用 TCP SYN Cookie
echo 1 | sudo tee /proc/sys/net/ipv4/tcp_syncookies
# 4. 考虑使用 DDoS 防护服务(详见第 10 章)
8.8 反作弊性能影响
| 插件 | CPU 开销 | 内存开销 | 说明 |
|---|---|---|---|
| Paper 反 Xray | 低 | 低 | 仅影响区块生成 |
| Vulcan | 低-中 | 低 | 检查频率可调 |
| GrimAC | 低 | 低 | 异步检测 |
| NoCheatPlus | 低 | 低 | 老牌插件,轻量 |
| WorldGuard | 极低 | 低 | 区域检查 |
| CoreProtect | 低 | 中 | 日志存储占空间 |
8.9 常见问题
Q1:反作弊误判正常玩家?
# 1. 调整反作弊的严格度
# 2. 给特定玩家添加绕过权限
/lp user <玩家名> permission set vulcan.bypass true
# 3. 检查是否是网络延迟导致
# 高延迟玩家容易被误判
Q2:Xray 仍然有效?
# 1. 确认 Paper 反 Xray 已启用
# paper-world-defaults.yml 中 anticheat.anti-xray.enabled: true
# 2. 尝试 engine-mode: 2(更严格但更耗性能)
# 3. 确认修改后重启了服务器
Q3:如何测试反作弊是否工作?
# 使用测试客户端(如 Horion 在教育版测试环境)
# 或邀请信任的玩家使用已知作弊客户端测试
# 记录检测率和误判率
8.10 本章小结
| 要点 | 说明 |
|---|---|
| Paper 内置反 Xray | 最基本的安全防护,必须启用 |
| 反作弊插件是核心 | Vulcan 或 GrimAC 检测大部分作弊 |
| WorldGuard + CoreProtect | 区域保护和操作日志 |
| 登录插件用于盗版服 | AuthMe 保护玩家账户 |
| 权限管理避免 OP | 使用 LuckPerms 权限组替代 |