V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Useful Links
Minecraft Wiki
合成配方
KasuganoSoras
V2EX  ›  Minecraft

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

  •  
  •   KasuganoSoras · 2019-08-19 00:31:55 +08:00 · 1344 次点击
    这是一个创建于 1957 天前的主题,其中的信息可能已经有所发展或是发生改变。

    相信假人压测是很多 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
    

    大概改成这样就对了:

    img

    然后你可以使用 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 了。

    img

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

    img

    命令列表

    所有的命令都需要 slogin.admin 权限。

    • /recaptcha reload 重载配置文件
    • /recaptcha enable 启用验证码系统
    • /recaptcha disable 禁用验证码系统
    • /recaptcha showattack 开启或关闭显示每分钟被假人攻击的数量

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

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

    第 1 条附言  ·  2019-08-19 06:43:06 +08:00

    版本更新到 2.2,通宵爆改,更新内容如下:

    1. 验证方式大改,从原来的玩家进服就发起一次请求改为了定时请求并缓存数据在本地。本次更新极大地提升了服务器可承载的并发请求量,降低验证服务器的负担。
    2. 加入自定义登录失败提示信息功能
    3. 增加网页上显示自定义服务器名字的功能
    4. 新增一个公共验证服务器

    img

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

    这种插件没有意义呀。
    KasuganoSoras
        6
    KasuganoSoras  
    OP
       2019-08-19 05:13:30 +08:00
    @starsriver #5 这个不是用来防 DDoS 的,它是用来防假人压测的,假人压测指的是模拟 Minecraft 游戏的协议,通过建立大量连接让服务器崩溃,同时还会在游戏聊天栏里大量刷屏等等,属于 Layer7 攻击而不是 Layer4 攻击。
    trys1
        7
    trys1  
       2019-08-19 08:27:59 +08:00 via Android
    reCaptcha 是需要用户扶墙的
    locoz
        8
    locoz  
       2019-08-19 08:33:48 +08:00 via Android
    惊了,我居然在 v2 看到了 MC 的技术帖
    KasuganoSoras
        9
    KasuganoSoras  
    OP
       2019-08-19 08:35:24 +08:00
    @trys1 #7 用的是 recaptcha.net ,有国内镜像,不会被墙
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2817 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 13:57 · PVG 21:57 · LAX 05:57 · JFK 08:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.