• 周年纪念勋章活动已圆满结束,如有已购买但仍未申请的用户,可以通过对应勋章的下载链接申请~

教程 【Java服】我在防 DDoS 网络攻击这块的一些个人见解

[MD]
# 我在防 DDoS 网络攻击这块的一些个人见解

本帖原文发布在我的blog:https://producer.mrxiaom.top/post/mc-ddos

> 运营 Minecraft 服务器,尽可能低成本地防 DDoS 的一次尝试

本文是我在 [QQ空间的说说](https://user.qzone.qq.com/2431208142/311) 的补全。
我并非网络相关从业者,仅业余研究,个别专有名词可能出错,请见谅。

防 DDoS,简单来说就是一句话:`得加钱。`

## 前言

开 Minecraft 服务器的,提供网络服务的,稍微做大了之后,总会得罪同行或者用户,就免不了受到网络攻击。

网络有很强的匿名性,网络攻击也一样。

攻击者可以从「国外」的木马劫持大量用户(俗称僵尸网络),针对一个IP发动攻击,诸如 UDP Flood,TCP SYN Flood 等等,攻击者对僵尸网络中的设备有完全控制权,他们想怎么打就能怎么打,使得你的服务器无法为正常的用户提供服务。又因为攻击来自世界各地的被控制设备,以我们普通用户的视角,从技术上几乎不可能跟踪到攻击者。

攻击者还可以从「国外」的匿名邮箱向网络服务提供者(我)发动挑衅,炫耀自己瘫痪网络服务的所谓「高光时刻」和「展示优越感」。

我两次提及国外,就是因为虽然《中华人民共和国刑法》中有规定「破坏计算机信息系统罪」,但是攻击者的匿名性极高,以我个人开发者的角度考虑,国家没有必要浪费宝贵的网安资源,为了一个无足轻重的互联网服务把攻击者揪出来。也不是在说我国的法律存在漏洞或者执法人员不作为,而是站在互联网的视角,这是相当困难的一件事。即使国家全力帮助,也不一定能揪出来,因为这涉及了跨国的所谓「隐私」网络服务,别国不一定给数据。所以,当资金不足时(如个人业余开设网络服务,常见于 Minecraft 服主),遇到了网络攻击是非常无奈的一件事。

我本来不想说,西方对于「隐私」的自由,变成了犯法者「隐藏自己」的自由。这是很悲哀的。

## 之前我是怎么做的

综上所述,在相当长一段时间里,我的应对策略就是不管,毕竟我可控的范围只有路由的下游,也就是服务器。网络流量先经过路由再传输到服务器,我编写软件拒绝了流量又怎么样,量大的时候依然占用服务器算力,过了阈值之后路由还是会把应当传输到服务器的流量指向黑洞。

回到了那句话,想要提升防御,得加钱。对于个人来说,购买防御会对月租产生巨大影响,使得防御成为服务器的最大支出,所以,我也没什么办法,你爱打我我让你打个够吧。防御跟不上,但精神不能怂,来「威胁」我,必骂回去。

今年二月左右,服务器被攻击过,攻击者还通过匿名邮件服务 proton.me 发来了「预告」,

![](https://pic.imgdb.cn/item/66ea3cadf21886ccc0197119.png)

btw,经过之后群友的确认,对方是冒充成维塔斯的,维塔斯拒不承认这是他。

攻击者并没有达到他承诺的“打到服务商退机”,打了几天就没动静了。

反正没打了,那我也不管什么攻击了。

## 现在我是怎么做的

2024年9月17日,中秋节,下午13点半左右受到攻击,当时我没看服务器,下午14点左右,在我向群里的人公布服务器被攻击后,我又收到了一封匿名邮件

![](https://pic.imgdb.cn/item/66ea3e0cf21886ccc01adbf7.png)

看着很像2月的老熟人啊,但是严谨来说,我也只能说和他很像,一样说僵尸网络不算资源(这次还截了在 FinalShell 执行 botnet 命令的图来炫耀,我就懒得放出来了,没啥好看的),一样不勒索纯攻击,很像,不一定是。这次可能是虚了,只打了几个小时,下午四点多就没打了。

看他不回复我就把 proton.me 这个域的邮件全部拒收了,他会一击脱离我也会一击脱离。

事不过三,我开始想怎么能低成本的尽可能防范 DDoS 攻击。

## 学习Web的策略,不要暴露源站

Web 的什么策略我不知道,毕竟我不是相关从业人员,只是业余搞网络安全的,我只记得有个机制是有源站和节点(负载均衡?),源站是 Web 服务器的核心逻辑,而节点用于分担服务器负担,顺带过滤掉一部分无用流量。

攻击者尽管打,只能打死节点,除了节点服务器和源站管理员,没有人知道源站的IP,源站一直是安全的,不会因为网络攻击而进入流量黑洞。

在这个模式下,攻击者打死节点之后,管理员可以迅速恢复服务的正常访问,只需要再建一个节点就行了,毕竟源站没进黑洞,不需要等解封时间。建节点的成本是很低的,国外最低有 8¥/mon 的(配置太低了,没租过),还支持支付宝和 Paypal 支付,我租的 16¥/mon 的作为备用。尽管打,大不了我这个月多租几个节点(只租一个月),一些节点不公开,只给部分信任的玩家使用。

这个价钱,总比每个月千把块托管费升级 300G 或更多一点的防御好多了吧?对于像是我的服务器一样有点名堂但不是特别火的服务器,是支付不起那么高的托管费的。虽然这个方法不能 100% 扛住,但至少能保证服务不会中断很久。

以上想法我已经基本实现了,未经过测试,理论是可以做到快速恢复正常访问的。
现在源站IP还是暴露的,我在等下一次攻击者来攻击源站,因为现在攻击者没在攻击,玩家还要正常游戏,不能打断玩家。等攻击者来攻击,我再向机房申请换一个 IPv4 地址,测试这套机制的效果。

## 具体做法

正如你所见,节点服务器的配置非常低,这才能让我们低成本地去租赁它。首先就是要找一个服务商,能够稳定地出租这么低价的云服务器,并且起码要有 25565 端口使用(如果你不在乎这个,其它端口也没关系)。

补充:主要使用的节点请尽可能购买**中国大陆境内**的大带宽云服务器,除非你想让玩家延迟人均 200ms。国外的低成本云服务器用来兜底。
国内便宜的、带独立IP的云服务器不好找,毕竟国内金子带宽,没办法,我也没找到。我现在在用 60¥/mon 的不限流量 25M 上下对等带宽的云服务器凑合着用。
btw,尽量不要买限制流量、流量耗尽时降带宽的云服务器。就我服务器而言,一天下来,上行加下行要跑 200G,付流量费肉疼。

所谓「节点」的实现方法是「反向代理」,这里我使用的反向代理软件是开源的 [hopper-rs](https://github.com/BRA1L0R/hopper-rs),在 x86 架构的 Debian Linux 系统上运行。

首先下载 `hopper-rs` 到 `/opt/hopper` 目录,以下命令在 root 用户下运行
```shell
mkdir /opt/hopper
chmod u+x .
wget -O hopper.tar.xz https://github.com/BRA1L0R/hopper-r...pper-rs_null_x86_64-unknown-linux-musl.tar.xz
xz -d hopper.tar.xz
tar -xvf hopper.tar
chmod u+x hopper
```

是的,`hopper-rs` 不会自己创建配置文件,所以配置文件得你自己来。
创建 `Config.toml`,将 `<节点端口>` 替换成一个该节点需要开放的服务器端口号 (比如`25565`),将 `<源站IP>` 替换为你自己的服务器IP,后面的端口号先待定,之后要改,反正肯定不是你之前进服的端口。
```toml
listen = "0.0.0.0:<节点端口>"
[routing]
default = { ip-forwarding = "proxy_protocol", ip = "<源站IP>:25560" }
```

然后先别急着启动,要修改源站的服务端配置

> 配置请前往[原文](https://producer.mrxiaom.top/post/mc-ddos/#bungeecord)查看

以上配置均为重启服务端生效。

配置完了,在节点服务器 cd 到 `/opt/hopper` 目录,执行命令 `./hopper`,并使用 Minecraft 客户端尝试连接,检查反向代理是否工作正常。确认正常后,以下开始配置系统服务(开机启动)。

首先创建文件 `hopper.service`
```
[Unit]
Description=hopper-rs
After=network.target

[Service]
ExecStart=/opt/hopper/hopper
WorkingDirectory=/opt/hopper
Restart=always

[Install]
WantedBy=multi-user.target
```

然后执行以下命令即可
```shell
cp hopper.service /usr/lib/systemd/system/
systemctl daemon-reload
systemctl enable hopper
systemctl start hopper
```
最后执行
```shell
systemctl status hopper
```
查看服务是否正常运行即可。

hopper-rs 的占用很小,主程序加上配置文件的储存占用不到 5MB,运行内存占用目测不到 100MB,比较适合在低配的机器上运行。

![](https://pic.imgdb.cn/item/66ea4c17f21886ccc030ed1f.png)

而且配置也不算复杂,我只要配置好一次,写个脚本,需要创建节点的时候,购买云服务器后上传执行就完成了。

补充:为了避免被扫出源站,请不要使用与本教程相同的 `25560` 端口,并且应当配置好防火墙,
+ 将原本的 `25565` 禁止外网访问,如果你不需要在内网直连可以直接删掉
+ 将代理端口 (如 `25560`) 设为仅能由节点服务器访问

各个系统有各个系统的配置方法,请通过搜索引擎搜索方法。

## 尾声

这就是我现阶段针对 DDoS 做出的一些尽可能的挽救措施,不让服务器的可用性被攻击者和流量黑洞牵着走。最坏的情况是攻击者把所有节点都攻陷了,但这时源站依然是没事的,这样你就可以在后台更新服务器玩法,给玩家建立期待,而不是干等着攻击者停止攻击,浪费时间。

## 彩蛋

题外话,在2月被攻击到7月被攻击的这几个月间隔时间里,3389 端口一直在被刷 RDP 请求,看日志估计是在暴力破解 Administrator 的密码。

我的应对措施是开源的 RDP 自动封禁软件 fail2ban-win。
同时因为 Administrator 太过常用,而且我们服务器后台有良好的用户习惯,根本没人在用 Administrator 这个账户,于是我决定把这个账户弃用,禁止远程控制登录的同时,将密码改到了上百位,并且我没有保存密码。

这还不够,我修改了 fail2win,使得所有试图登录 Administrator 失败的 IP 都有 50% 的几率被添加到防火墙黑名单。正如你所见,我禁用了远程控制登录,登录 Administrator 必失败,这个账户变成了一个捕兽夹,封禁了非常多肉鸡的 IP。[如图所示](https://pic.imgdb.cn/item/66ea4e61f21886ccc033255c.png),图太大了,就只放链接吧。[/MD]
 
内容版权许可
CC BY-NC-SA 署名-非商业性使用-相同方式共享
最后编辑:
相对于维护服务器的成本 攻击服务器的往往会更大
 
我们永远不能活在过去的影子里
 
大佬们,纯小白,有点看不懂了
但我看上面说很多都是国外搞事情,国内有但较少
我屏蔽掉国外的ip,开启正版验证的情况下被搞的概率也很高么
 
大佬们,纯小白,有点看不懂了
但我看上面说很多都是国外搞事情,国内有但较少
我屏蔽掉国外的ip,开启正版验证的情况下被搞的概率也很高么
我遇到的攻击者只是用国外的匿名邮箱服务来和我通信,攻击来源肉鸡是国内的。这种情况不套盾还真没啥好的解决方法。
正版验证开不开都一样,只要是使用 IP 协议的网络服务,都能被搞,只看有没有人来搞你。
 
对于HAProxy
我认为使用FRP是更好的选择(?)
 
windows防止rdp爆破方法:
1、安装火绒等具备网络防御的杀毒管理软件,并配置其防御拦截周期,火绒拦截短时间黑名单为120分钟,破一次基本等一个半小时才能再破一次
2、不定期更新密码,密码尽量设置复杂,最好小谢大写字母数字特殊符号都用上,再不会随便找个密码生成平台生成好后自己改点数字防止被人找
linux防止远程爆破思路大致相似,一方面安装雷池waf社区版或者1p面板这类具有网络防护能力的程序,另一方面设置足够复杂密码并且有良好的使用习惯基本没啥大问题
最后关键一点就是要有备份的习惯,最长每隔一个月时间关服对整个端或者整套系统进行备份,至少机器被攻破了能快速恢复
 

在线会员

  • 小李子plum
  • jiangyi
  • 丽鸢
  • 夏·辰星
  • xiaoyou2233
  • moco YANKE
  • LLabc
  • 云中鱼
  • Cyan0205
  • 法官
  • xuantianzhilin
  • k kkljlk
  • NaiveGod
  • 枫叶的温柔
  • Fendonacc
  • Czzyh
  • 三秒记忆的石子
  • anbandun
  • 界限
  • 一箭开天门
...和 51 更多。
后退
顶部 底部