MCreCAPTCHA | 一个基于 Swoole 开发的我的世界服务器反假人压测插件

2019-08-19 00:31:55 +08:00
 KasuganoSoras

相信假人压测是很多 Minecraft 服主很头疼的一件事情,熊孩子为了恶意报复服主经常会使用假人压测工具对服务器发起类似于 CC 的攻击,从一开始的单机压测演变为现在的集群压测,各种变种类型的攻击层出不穷。

要防御假人攻击也不难,首先我们需要了解假人攻击的原理,它其实很简单,就是模拟大量客户端登录服务器,导致服务器无法承受超高的连接数而崩溃,同时有些假人攻击软件还会在登录服务器后发送大量的消息将聊天栏刷屏,严重影响了正常玩家的游戏体验。

本插件是受到 https://www.mcbbs.net/thread-901461-1-1.html 这篇帖子的启发而制作的,验证服务器使用 Swoole 开发,原生支持多线程,并且使用内存表储存数据,可以承受更高并发,彻底防止熊孩子攻击。

使用效果演示视频: https://www.bilibili.com/video/av63470947/

插件新版本更新了什么?

  1. 新版本 2.1 性能测试结果:在一台 i5-4590 CPU、12G 内存、20Mbps 宽带的服务器上,成功抵御了另外两台服务器使用 EndMinecraftPlus 发起的每分钟接近 2000 次的假人攻击,并且正常玩家在通过验证后可以直接进入服务器,延迟几乎不受影响,服务器 TPS 稳定在 19.95 以上。
  2. 新版本加入了日志屏蔽功能,可以在配置文件中指定开启,你就不会被 Disconnect 的消息刷屏了。同时加入了未验证不允许发消息的功能,禁用 Tab 补全,防止消息刷屏以及 Tab 攻击。
  3. 加入了攻击状态显示功能,可以显示每分钟遭受到的压测数量统计信息。
  4. 加入了自动监测攻击的功能,可以在配置文件中开启,当受到超过指定阈值的攻击数量时会自动打开防御,攻击结束后自动关闭,全程无需人工干预。

注意:本插件仅用于防御假人压测,不能防御其他类型的攻击(例如 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 权限。

配置非常灵活,随时开关,自由操作,适合在受到攻击时临时打开,攻击过去后随时关闭。

MCBBS 原贴: https://www.mcbbs.net/thread-901577-1-1.html (有号的话欢迎给我评分)

1154 次点击
所在节点    Minecraft
9 条回复
CallMeReznov
2019-08-19 00:36:09 +08:00
先进 980 端口拿 token 然后去游戏里打验证码?
KasuganoSoras
2019-08-19 00:39:13 +08:00
@CallMeReznov #1 不是
1. 玩家在 980 端口输入自己的游戏名,并且需要通过 reCAPTCHA v3 验证
2. Swoole 验证服务器把你的游戏名存到内存表中
3. 打开游戏客户端,进入服务器
4. Minecraft 服务器查询 Swoole 验证服务器,判断玩家是否已经验证。
5. 查询到玩家已经通过验证就允许进入游戏,否则就拒绝进入并断开连接
chinvo
2019-08-19 00:44:27 +08:00
开正版验证解决所有问题
KasuganoSoras
2019-08-19 00:47:02 +08:00
@chinvo #3 正版验证会被 Disconnect 消息疯狂刷屏……我试过了,而且关不掉的那种
starsriver
2019-08-19 04:24:14 +08:00
ddos 攻击除了肉鸡模式以外用路由器就能防住,更不用说还有防火墙。

这种插件没有意义呀。
KasuganoSoras
2019-08-19 05:13:30 +08:00
@starsriver #5 这个不是用来防 DDoS 的,它是用来防假人压测的,假人压测指的是模拟 Minecraft 游戏的协议,通过建立大量连接让服务器崩溃,同时还会在游戏聊天栏里大量刷屏等等,属于 Layer7 攻击而不是 Layer4 攻击。
trys1
2019-08-19 08:27:59 +08:00
reCaptcha 是需要用户扶墙的
locoz
2019-08-19 08:33:48 +08:00
惊了,我居然在 v2 看到了 MC 的技术帖
KasuganoSoras
2019-08-19 08:35:24 +08:00
@trys1 #7 用的是 recaptcha.net ,有国内镜像,不会被墙

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/592985

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX