Dayz云服务器被假国服DDOS攻击?这样解决

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

本文基于特定业务场景提出的预防方法具有一定针对性,主要适用于普通人。

对于研发人员来说,云服务器并非高不可攀。我们可以在云服务器上部署诸多服务,如文件服务、Web 服务、数据库服务、代码托管服务、邮件服务器,甚至游戏服务器。然而,这也意味着我们的服务将暴露在互联网环境中,必然会带来一系列潜在的风险与挑战。


一、DDOS是什么?

分布式拒绝服务攻击(DDoS)作为一种恶意的网络攻击手段,其目的在于通过大量虚假网络流量使目标服务器、网络或服务不堪重负,致使合法用户无法获得正常服务。攻击者通常借助大量被控制的计算机(即“僵尸网络”),这些计算机可能分布于不同地理位置,同时向目标发送海量请求。攻击流量涵盖各种类型的网络数据包,如TCP、UDP 或 ICMP 数据包。常见的攻击方式包括 SYN Flood、UDP Flood、ICMPFlood 等。

二、被攻击

就我本人的服务器而言,遭遇最多的当属 DDoS 攻击。如图所示,服务器在短短几天内竟被恶意攻击十多次,攻击带宽峰值高达 43.79Gbps。在如此猛烈的攻击之下,服务器或网络极有可能在几分钟内便因无法处理如此巨量的请求而陷入不可用状态。同时,为防止攻击扩散并维护网络性能,云服务器厂商通常会封锁被攻击的 IP,进而导致用户服务无法正常使用。基本上,每遭受一次攻击,IP 就会被封禁 24 小时,且必须拥有高防包才能解封 IP。然而,云服务器本身并不提供 DDoS 攻击防御服务,需用户自行购买,但费用却极为昂贵。一个标准版的高防包一年需一万五千元,如图所示。对于我们这种个人服务器来说,购买高防包实在是太不划算。
云服务器被攻击
在这里插入图片描述

三、攻击者探索

为避免服务持续不可用,以免影响业务的正常运行,我尝试了以下方法来预防 DDoS 攻击。首先,需要下载攻击包并导入到 Wireshark 中进行分析。在进行防御之前,我们必须了解对方的攻击手段,即他们攻击的是我们的哪些端口,同时猜测对方的目的以及针对的是我们的何种服务。虽然来源 IP 可能是一些伪造 IP,或者是攻击者伪造我们的 IP 去请求后得到的响应包的 IP,对我们而言意义不大,但是攻击端口和协议却是需要高度关注的要点。从图中可以看到,协议部分包含两种,一个是 IPv4 协议,另一个是 DNS 协议。令人惊讶的是,为何我的服务器会有 DNS 响应!这种情况只有一个原因,攻击者通过伪造我的 IP 去请求 DNS 服务器,从而使正常的 DNS 服务器也参与到攻击我的行动中来,而且效果还特别显著,因为 DNS 响应通常比查询请求大得多,攻击者可以通过少量的查询请求产生大量的攻击流量,进而实现流量放大的效果。

在这里插入图片描述

另一个是 IPv4 协议。如图所示,我们点开第一个 IP 分片包,去除 MAC 帧头和帧尾后可以看到整个 IP 报文。IP 报文的格式如图所示,我们能够看到该报文的区分服务、生存时间、协议、源地址、目的地址等等内容。注意到协议部分的值是 0x11(17),这表示这个是一个 UDP 请求。接着继续深入分析,去掉 IP 报文头后,便是 UDP 报文。

在这里插入图片描述
在这里插入图片描述

UDP 报文格式如图所示。我们主要关注第三到第四字节的目的端口,即 0xfa01,其十进制为 64001,这是我云服务器所暴露的 steam 查询端口。同时,我发现后面的所有攻击都是针对这一端口,很明显,攻击者的目的是为了不让我的服务器展示在玩家的启动器列表里面,从而导致玩家无法游玩我的服务器。确认了攻击者的目的和人群之后,便可采取反制措施。虽然这些措施不能从真正意义上防御 DDoS 攻击,但也能让我的服务器正常运行下去。

在这里插入图片描述

三、 实战防御探索(此处只针对云服务器的特定业务场景,并非专业方法)

探索一(防火墙):

当遭遇流量攻击时,流量清洗往往是最先被想到的应对措施。云服务通常也提供防火墙供用户进行配置。在此情况下,首先关闭所有端口,接着开放自身 IP 的远程桌面,随后逐个为玩家添加防火墙白名单以放行针对玩家的流量。此时,我们认为除非攻击者伪造玩家的 IP 发动攻击,否则其他 IP 都将被拦截。如图所示。

在这里插入图片描述

在正常运行一天后,服务器再次被攻击导致掉线。攻击者依旧采用相同的操作方式,而服务器也再次面临被封禁的结果。由此,我怀疑在云服务器遭受流量攻击后,即便有防火墙进行过滤,但当流量过大时,仍会被云服务厂商封禁 IP。

探索二(限制端口隐藏服务器):

关闭不必要的端口是一种有效的安全措施,对于云服务器默认开放的端口如 22、80、443 等,尽管目前攻击者可能未针对这些端口进行攻击,但未来攻击策略的变化难以预测,因此关闭这些端口可降低潜在风险。同时,关闭 Steam 查询端口可避免服务器显示在服务器列表中,从而降低成为攻击目标的可能性,使用户能够通过直接连接的方式进入服务器。然而,在服务器运行了七八个小时左右,再次被攻击导致下线。由于此次使用的是与之前相同的 IP 地址,因此有理由怀疑攻击者并非在服务器列表中寻找猎物,而是记录了之前所有服务器的 IP 地址,这使得服务器即使采取了一定的防护措施,仍面临被攻击的风险。

探索三(使用反向代理隐藏真实IP):

此方法可采用市面上较为常见的端口映射工具,例如路由侠、花生壳等。然而,免费版本仅提供每月 1G 的流量,可依据业务需求进行升级。但由于本人并未选用该方法,故而并不知晓这些工具所提供的 IP 在遭受 DDoS 攻击后的具体情况。为实现一劳永逸的防护效果,我选用了抗攻击能力较强的高防物理机。旨在以最低的资金投入实现最为有效的防护。可以租用配置相对较低(以节省资金)但带宽稍大一些的物理机作为我们真实对外暴露的 IP。这是因为我们仅在物理机上部署 frps(https://github.com/fatedier/frp),这是一款开源的反向代理软件,而真实的业务则运行在真实的高性能服务器上。

在这里插入图片描述

如图所示,我们在代理服务器上运行frps.exe -c config.ini命令之后,代
理服务器就启动了,配置文件如下:

[common]
#主端口(可以自定义)
bind_port = 2000
#token 如果配置了,客户端需要配置成一致的
token = dwafafefeffef
# frp管理后台端口,请按自己需求更改
dashboard_port = 3500
# frp管理后台用户名和密码,请改成自己的
dashboard_user = dwadafef
dashboard_pwd = dwadwadwa4534t4t4t4
enable_prometheus = true

在客户端,我们启动frpc程序去主动连接代理服务器的frps,因此我们的真实服务器无需暴露任何端口,在客户端执行frpc.exe -c frpc.ini,执行之后客户端会自动连接服务端。

在这里插入图片描述

客户端配置文件如下:

[common]
server_addr = 物理机IP     
server_port = 2000
token = dwafafefeffef 
#此处名称可自定义
[dayz] 
#此处为协议,还有tcp、udp、http、https、stcp
type = udp                 
local_ip = 127.0.0.1
#此处为本端开放的端口
local_port = 38383
#此处为公网地址转换的端口,此端口可任意调换
remote_port = 9099 

此后,用户通过访问物理机的 IP 地址以及端口 9099,所有请求将被转发至真实服务器进行处理。在此过程中,真实服务器的 IP 无需暴露,且无需开放任何端口,具有极高的安全性。然而,这一方案的前提是高防物理机具备高度可靠性。在隐藏真实 IP 后,便不再出现因攻击导致的掉线情况。
最后,云服务器厂商对服务器 IP 进行封禁操作,其实际效果表现为外网无法对该云服务器进行访问,然而云服务器自身仍能够向外网发起请求。鉴于此情况,可采用 frp 内网穿透预先将远程桌面的 3389 端口映射至其他服务器,同时将业务端口也映射至别的服务器,提前建立好连接。随后关闭所有真实服务器的端口,如此一来,即便真实服务器遭受攻击而被隔离,依然能够通过远程桌面连接到被隔离的服务器,并且可以正常对外提供服务。所以针对本文描述的业务场景,该方法能完美解决DDOS攻击云服务器的问题,并且做到业务永远不掉线。


总结

666

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值