NitWikit/docs/maintenance/how-to-defend-against-cyber-attacks.md
2024-06-15 10:12:02 +08:00

7.2 KiB
Raw Blame History

title sidebar_position
如何抵御网络攻击 3

如何抵御网络攻击

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

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

分类

下面将列出几种常见的 Minecraft 服务器容易遭受的攻击类型。

应用层(也称为 L7

在服务器上运行并绑定了指定地址和端口的应用程序,可以在这一层接受连接。

应用层的攻击往往意味着针对某个应用程序发起的攻击。

通常攻击者会利用应用中的漏洞,来让应用占用更多的计算机资源,或者通过大量请求使带宽不堪重负,使服务器难以处理新连接。

假人攻击

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

这些假人大多数是不动的、名字高度相似或者非常随机的。

随着假人的快速加入和退出游戏,导致服务器需要处理大量的数据包,会让服务器卡顿。

MOTD (状态请求) 攻击

简单来说,就是向服务器请求状态 (也就是 Ping),玩家每次 Ping 服务器时,服务器将返回一个 MOTD 。

由于 MOTD 中包含图片和文字信息,大量的请求会占满服务器带宽,使服务器难以处理新的连接。

Minecraft 后端服务器一般是不会对 Ping 进行过滤和记录的,这会导致 MOTD 攻击难以察觉。

但是对于 Velocity / BungeeCord 等反向代理服务端,默认 Ping 服务器的行为是会被记录的,类似于:

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

:::info

可以通过调整设置 log_pings (BungeeCord) 或 show-ping-requests (Velocity) 来启用或禁用反向代理在控制台输出 Ping 日志。

:::

其他插件

如果你使用了 Plan 、 Dynmap 等插件,这些插件会在某个端口开启网站。

请注意这些端口如果被不怀好意的人知道,则可能会导致这些 HTTP 端口遭受攻击。

Minecraft 漏洞攻击

通过利用 Minecraft 游戏本身的漏洞,向服务器发送(可能是大量的)不合法的数据包,造成服务器卡顿甚至崩溃

网络层

网络层攻击是 DDoS 攻击的一种形式,它针对于网络基础架构进行攻击。

最常见的网络层攻击是IP地址欺骗攻击者可以伪造IP地址并向目标服务器发送大量数据包以消耗目标服务器的网络带宽和系统资源。

Minecraft JAVA 服务端采用 TCP 作为通信协议,所以您可能会遭受到如 TCP Flood (TCP 洪水攻击) 等攻击方式。

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

解决方案

使用 Velocity / BungeeCord

不要试图单独使用任何后端服务器 (如 Spigot / Paper / Purpur 等) 抵御大规模应用层攻击。

后端服务器处理连接的速度较慢,这将会导致消耗比代理更多的计算机资源,一旦攻击规模过大,这会导致后端服务器卡顿甚至崩溃。

但对于 Velocity / BungeeCord 等代理服务器,它们被设计为允许接受大量连接,且反向代理自带单个 IP 多次重新连接的配置:

connection_throttle: 4000
connection_throttle_limit: 3

这意味着,在 4000ms 内最多能连接服务器 3 次,如果超过该值,服务器将拒绝其登入请求。

在代理端安装反假人插件

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

以下是推荐的反机器人插件列表

名称 介绍 支持平台 缺点
Sonar 轻量级反机器人,皆在检测和移除机器人,而不影响任何真正的玩家 Velocity, BungeeCord 暂时没有?
LimboFilter 强大的过滤机器人方案 Velocity 笨重且配置复杂,且仅在必要的时候提供更新。 (缺少维护)
nAntiBot 一个高效反机器人插件 Spigot, Velocity, BungeeCord 依赖云服务,无法在服务器网络不好的情况下使用该插件。
EpicGuard 基于事件的反机器人和反VPN插件 Waterfall (停止维护), Paper, Velocity 容易绕过(但没那么烦人)且只支持特定的Paper服务端。

:::warning

该列表目前仅列出了免费的反假人插件,实际情况可能需要使用者自行决定。

使用插件直接对抗超大规模的网络攻击是不太现实的。

如果正在遭受这种攻击,最合理的办法是提升服务器带宽或使用专门针对于此类攻击的代理 (点这里)。

:::

付费防御核心

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

但在没有想好的情况下,不建议为反假人付费

网络层攻击防御

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

对于大多数 MC 服务器150G 的防御是足够的,性价比较高。

一般托管一个月大概 800 RMB速率为 50 Mbps。

建议最多升级到 300G 防御 (再多就放弃吧这是想让你倒闭的)。

如果是 VPS建议向 VPS 提供商咨询防御服务。

套 CloudFlare

最稳定的办法还是白嫖 CloudFlare 的免费套餐,无限防御流量。

但不太好的地方就是免费用户是没有办法使用国内节点的,所以国内访问会较慢。

使用第三方Minecraft代理

例如 TCPShield 和 Infinity-Filter。

包含专门针对于缓解 Minecraft 攻击的负载均衡代理,且能够有效隐藏服务器 IP 地址。

缺点是似乎还没有任何一家这样的代理拥有国内服务器(延迟高),且需要花费一点时间设置。

这些代理的免费套餐都具有一定的限制(例如限制玩家数或流量),除非您升级套餐。

使用前请三思。

狂套 Frp

这个方法比较缺德,我们只需要疯狂 Frp ,一个 Frp 被打死了,我们就换另一个 Frp ,通知玩家重新连接就可以。

缺点就是比较缺德,而且可能面临被 Frp 提供商拉黑的风险!

更换 IP

攻击者需要服务器的 IP 地址才能攻击。

可以不断的更换 IP 地址,打死一个换一个。

还可以使用动态DNS (DDNS),换 IP 还能顺便更新 DNS 记录。

:::danger

如果您使用的是腾讯云之类的大厂 VPS ,永远不要尝试硬扛 DDOS 服务器受攻击流量超过其机房黑洞阈值时VPS 会屏蔽服务器的外网访问,直接断网并且恢复时间未知。

:::