NitWikit/docs/跨服端/如何抵御网络攻击.md
2024-05-18 05:19:40 +08:00

5.3 KiB
Raw Blame History

sidebar_position
3

如何抵御网络攻击

:::warning

本页面尚在完善中,且考虑到文档面向人群,此内容较为通俗,不完全准确。

:::

随着你的 Minecraft 服务器人数和宣传越来越多,你的服务器越有可能收到其他“友商”或者某些不怀好意的玩家攻击。

别害怕大多数网络攻击没有那么致命可能只是会引起玩家高ping掉线、后台操作卡顿等。

分类

我们在这里提到几种常见的 Minecraft 服务器容易遭受的攻击类型

应用层(高级称呼是L7)

应用层的攻击往往意味着,这些流量看起来是合法的,而且往往是因为应用的 BUG 或者未设置限制,导致可以通过伪造普通客户端的包发送,而服务器将其视为了一次正常的客户端行为

假人攻击

简单来说假人攻击一般是通过模拟客户端协议进入服务器发送进入服务器的数据包,伪造有玩家接入服务器造成的攻击。

这些假人大多数是不动的、名字高度相似或者非常随机的,随着假人的快速加入、退出游戏,

这会导致服务器需要加载、保存玩家数据插件数据区块数据等导致服务器卡顿。

MOTD 攻击

简单来说就是 Ping 服务器,每次 Ping 服务器时,服务器将发送一个 MOTD ,由于 MOTD 中包含图片和文字信息,

且 MC 后端服务器一般是不会对 Ping 进行过滤和记录的,这会导致 Ping 的过程后台不会记录 log ,难以察觉。

对于 Velocity / Bungeecord ,默认 Ping 服务器的行为是会被记录的,类似于:

[/127.0.0.1:61647] <-> InitialHandler has pinged

其他插件

如果你使用了 Plan、Dynmap 等插件,这些插件会在某个端口开启网站。请注意这些端口如果被不怀好意的人知道,

否则这些 HTTP 端口很有可能被。

Minecraft 漏洞攻击

通过利用 MC 游戏本身的漏洞,向服务器发送错误的数据包或发送大量数据包,会造成服务器卡顿甚至崩溃

网络层

网络层攻击是 DDoS 攻击的一种形式它针对于网络基础架构进行攻击。最常见的网络层攻击是IP地址欺骗攻击者可以伪造IP地址并向目标服务器发送大量数据包以消耗目标服务器的网络带宽和系统资源。

Minecraft JAVA服务端采用的是TCP作为通信协议所以说你就会遭受到例如TCP Flood(TCP洪水攻击)

防御这种类型的攻击唯一办法就是增大宽带,没有什么别的好办法

解决方案

使用 Velocity / Bungeecord

不要试图使用单独使用任何后端服务器如Spigot / Paper / Purpur等抵御大规模假人攻击由于后端服务器没有特别设计过大量玩家接入的情况

不可避免会触发一些事件,导致一些性能消耗,一旦攻击规模过大,这会导致后端服务器卡顿甚至崩溃,这些消耗如果在 Velocity / Bungeecord 等代理服务器上,

而反向代理服务器专门用于大量玩家接入Velocity可以轻松应对500+玩家),且反向代理自带单个 IP 多次重新连接的配置:

connection_throttle 4000
connection_throttle_limit 3

这意味着,在 4000ms 内最多能连接 3 次服务器,如果超过则服务器将不再重新 MOTD 一段时间。

在代理端安装反假人插件

你可以在代理端安装机器人过滤插件,同样的,由于代理端提供的 API 相较后端服务器在面对假人时更加高效,请务必在代理端安装插件

这里比较推荐 LimboFiliter ,要是有钱的话,也可以考虑 nAntiBot

一般来说,以上两种反假人插件能够轻松应对 MOTD 攻击和假人攻击,但对于 MC 及其他插件漏洞无能为力。

付费防御核心

如果您非常有钱,您可以打开服务端核心选择选择那些付费的服务端核心NullCordX 是一个较好的选择

但由于其为 Waterfall fork而 Paper 团队将不再维护 Waterfall 不建议为反假人付费,包含了一个完整的反机器人系统和漏洞修复

网络层攻击防御

将服务器托管到高防机房/购买高防 VPS

对于大多数 MC 服务器,托管到拥有 150G 防御是足够的,性价比较高,一般托管一个月大概 800 RMB / 月,速率为 50 Mbps

最多只建议选择到 300G 防御(再多就摆烂吧这是想让你倒闭的),如果是 VPS 建议询问 VPS 提供商咨询防御能力。

套 CloudFlare

最稳定的办法还是白嫖 CF 的免费套餐,无限防御流量,唯一不太好的地方就是免费用户是没有办法使用国内节点的,所以国内访问会较慢

狂套 Frp

这个方法比较缺德,我们只需要疯狂 frp ,一个 frp 被打死了,我们就换另一个 frp ,通知玩家重新连接就可以,根本打不死,此方法有点访问速度快的优点,但是缺点就是比较缺德

更换 IP

打服务器是需要 IP 地址的。大不了我疯狂弹IP地址你一打死我就换再装备个 DDNS ,换 IP 还能顺便更新 DNS 记录

:::danger

如果您使用的是腾讯云之类的大厂 vps ,永远不要尝试硬扛 ddos ,待会被黑洞一年别怪我

:::