游戏服务器防御DDoS攻击实践记录

555 阅读5分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情

前情提要:我在华为云租了一台服务器用于搭建minecraft公益服,在服务器安稳运行了96天后,于2022/3/27日第一次遭到DDOS攻击。攻击从11:07分开始,直到11:17分触发华为流量封堵关进黑洞。

异常察觉

中午打开qq群,发现大量玩家反应游戏服务器无法登陆,第一时间怀疑服务器进程崩了,但在qq群内发现仍有玩家在服务器中游戏。ssh登录后台查看,但发现ssh服务被停掉了。 这是十分怪异的表现,我立即登录了华为云控制台,发现了大量的预警报告和通知。这才知道了事情的经过。 服务器遭受了DDos攻击,并且被服务商关进黑洞了。24小时后自然解封。 图片.png 导致出入流量全部被ban了,但游戏服务仍在运行,这也就是为什么服务期内仍有玩家,但其他人却进不去的原因。

复盘调查

根据华为云提供的流量分析和溯源手段,我找到了攻击者的源ip,之前对ddos有所了解,通常是大量的肉鸡,集群式的流量攻击,ip也往往定位在国外。可这次针对我们服务器的攻击显然并不高级,5000Mbps的流量攻击仅来源两个ip,均定位中国广东,攻击方式单一,仅使用了UDP Flood。

图片.png

虽然攻击简单,但仍然把我们的服务打进了黑洞,导致短期内游戏服务瘫痪。这给了我们一个教训,在逐渐运营扩大服务器规模的同时,安全问题不容小觑。 如何避免ddos等网络攻击?怎样增强服务器的安全性? 项目组花了一下午的时间进行沟通讨论安全策略,学习和测试了一些工具来尝试做一些安全升级。

安全布防

通过这次事件,我们借机升级服务器的安全性能。 最简单一点,服务器的22端口一直处于default暴露状态,有着ssh暴力破解的风险,为了增强安全性,使用安全组划分了ip段。同样也为其他端口做了filter处理。

对于ddos的处理:

  1. 首先封禁ddos ip,禁止流量再进入。
  2. 使用iptable划分ip白名单,添加协议白名单保护。
  3. 使用iptable的 limit 限制恶意流量进入 iptable配置示例:
# vim /etc/sysconfig/iptables
# 先全部禁用
*filter

:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]

-N whitelist

#再添加白名单

-A whitelist -s 1.2.3.0/24 -j ACCEPT
-A whitelist -s 4.5.6.7 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j whitelist

#设置端口开放,以下端口不受白名单限制

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j whitelist
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j whitelist

#设置icmp协议不使用白名单,如果需要的话就删掉

-A INPUT -p icmp -j ACCEPT

#其他协议的白名单开放情况

-A INPUT -i lo -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

#防止dos流量攻击
-A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT

COMMIT

#配置完毕后,运行命令重启防火墙使规则生效
#systemctl restart iptables.service

二次攻击

28日11:07,服务器黑洞24小时过后自动解封,自认为已经做好防护的我们如期的开启了服务器,还兴致勃勃的加入了新的插件。万万没想到的是,就在下午3点34分,服务器再次瘫痪,流量无法进出,看到shell的异常连接,不由得倒吸一口冷气。

打开华为云,果然又收到了故障提醒,服务器再次被打进了黑洞,我们的防御手段形同虚设。

经调查溯源,第二次攻击源ip分别来自美国和中国安徽。

反省,我们的防御手段为什么无效?除开购买价格高昂的ddos高防,我们应该如何做防御?

二次布防

由于缺少安全攻防知识,我们自己只会用pentmenu进行压力测试,再结合服务器运营商提供的可视化流量统计查看攻击强度以及防御强度。

图片.png 图片.png

测试效果并不理想,根本不能确定防御的有效性。 最后,是在我的催促盘问下,提给华为云的工单有了安全工程师的反馈。 图片.png

图片.png 我们了解到: 对于ddos公网源ip的攻击,无法使用acl 安全组拦截,就算流量走不到服务器,ip还是会被打进黑洞。 同时,我们也了解到cloudflare这个服务提供商,可以免费为站点提供cdn支持,免费提供了防dos的能力。

Cloudflare 如何工作?

Cloudflare 可保护和加速任何线上网站。一旦您的网站加入 Cloudflare,其网络流量就会通过我们的智能全球网络进行路由传输。我们会自动优化您的网页传送,以便您的访问者获得最快的页面加载时间和最佳性能。我们还会阻止威胁并限制滥用机器人和爬网程序浪费您的带宽和服务器资源。

回过头来整理一下我们当前的处境:

  1. 公网源IP已暴露。
  2. 攻击者ip设置了跳板(肉鸡),不能依靠banip来防御。
  3. 服务器安全组和iptable防御策略无效,公网ip一旦被打,依然会进黑洞。

最终得出了如下的布防策略:

图片.png

我认为,整个布防最最重要的一点就是隐藏公网源ip

布防效果

在二次布防之后,ddos攻击者只能打到代理机或cloudflare的集群上。 多个代理机的条件下,就算一台被打挂掉了,也并不会影响游戏服务器的正常运行。 下图为其中一台代理机成功抗下dos攻击的数据图。 图片.png