相信假人压测是很多 Minecraft 服主很头疼的一件事情,熊孩子为了恶意报复服主经常会使用假人压测工具对服务器发起类似于 CC 的攻击,从一开始的单机压测演变为现在的集群压测,各种变种类型的攻击层出不穷。
要防御假人攻击也不难,首先我们需要了解假人攻击的原理,它其实很简单,就是模拟大量客户端登录服务器,导致服务器无法承受超高的连接数而崩溃,同时有些假人攻击软件还会在登录服务器后发送大量的消息将聊天栏刷屏,严重影响了正常玩家的游戏体验。
本插件是受到 https://www.mcbbs.net/thread-901461-1-1.html 这篇帖子的启发而制作的,验证服务器使用 Swoole 开发,原生支持多线程,并且使用内存表储存数据,可以承受更高并发,彻底防止熊孩子攻击。
插件新版本更新了什么?
- 新版本 2.1 性能测试结果:在一台 i5-4590 CPU、12G 内存、20Mbps 宽带的服务器上,成功抵御了另外两台服务器使用 EndMinecraftPlus 发起的每分钟接近 2000 次的假人攻击,并且正常玩家在通过验证后可以直接进入服务器,延迟几乎不受影响,服务器 TPS 稳定在 19.95 以上。
- 新版本加入了日志屏蔽功能,可以在配置文件中指定开启,你就不会被 Disconnect 的消息刷屏了。同时加入了未验证不允许发消息的功能,禁用 Tab 补全,防止消息刷屏以及 Tab 攻击。
- 加入了攻击状态显示功能,可以显示每分钟遭受到的压测数量统计信息。
- 加入了自动监测攻击的功能,可以在配置文件中开启,当受到超过指定阈值的攻击数量时会自动打开防御,攻击结束后自动关闭,全程无需人工干预。
注意:本插件仅用于防御假人压测,不能防御其他类型的攻击(例如 Motd 压测),因此建议配合其他反压测插件使用,然后关闭其他插件的反假人压测功能,使用本插件来防护假人压测即可。具体的可承受并发数受到你的服务器性能和网络影响。
前置依赖
服务器一般来说只支持 Linux,Windows 的话可以用 Cygwin 运行,也可以用 BashOnWindows ( WSL )。
首先你需要安装 PHP 7.X,同时还需要安装 Swoole,下面这个命令在大部分纯净的 CentOS 7 服务器上应该都可用(需要 root 权限)。
cd ~/
curl https://tql.ink/php.sh | bash -
curl https://tql.ink/swoole.sh | bash -
执行之后它会自动给你安装 PHP 7.3.8 ZTS 版本并自动安装好 Swoole 扩展。
安装 reCaptcha 服务端
输入以下命令安装服务端。
git clone https://github.com/kasuganosoras/MCreCaptcha_Server recaptcha_server/
cd recaptcha_server/
然后是申请 reCaptcha 的秘钥需要登录谷歌,这里需要科学上网,具体申请方法可以看这篇帖子: https://www.mcbbs.net/thread-901461-1-1.html
申请到 Site Key 和 Server Key 之后,将它填入到 server.php 的开头配置那部分里面:
vim server.php
大概改成这样就对了:

然后你可以使用 Screen 来运行,如果没有安装的话可以用 yum install screen -y 或者 apt install screen 来安装。
screen -S recaptcha
php server.php
# 此时可以按下 Ctrl + A + D 后台运行
安装插件端
点击下载:MCreCAPTCHA.jar
下载后丢进 plugins,重启服务器,然后会生成配置文件,修改后输入 /recaptcha reload 重载配置即可。 执行重载命令需要拥有 slogin.admin 权限。
测试效果
浏览器访问 http://你的服务器 IP:980/ 查看是否正常,如果出现下面的界面就说明 OK 了。

然后试下进入游戏,如果你没有验证的话应该是进不去的,服务器 Log 里会输出调试信息,可以查看验证结果是否正确。

命令列表
所有的命令都需要 slogin.admin 权限。
- /recaptcha reload 重载配置文件
- /recaptcha enable 启用验证码系统
- /recaptcha disable 禁用验证码系统
- /recaptcha showattack 开启或关闭显示每分钟被假人攻击的数量
配置非常灵活,随时开关,自由操作,适合在受到攻击时临时打开,攻击过去后随时关闭。
MCBBS 原贴: https://www.mcbbs.net/thread-901577-1-1.html (有号的话欢迎给我评分)

