OSChina 劫后余生 —— 写在被围攻之后

红薯 发布于 2012/11/07 20:42
阅读 25K+
收藏 145

起因:

所有这一切的起源都是因为我的一篇小博文:OSChina 连接池已经改用 Druid

然后 @整俩硬菜 在论坛发起围攻 OSC 的号召,约定的时间是 16:30:给红薯一次高潮,从你我做起!

过程:

两点时就有人按捺不住,小试了一下,没造成什么影响。然后我去小睡了一会(盖着 @铂金小猪 送的一个小毛毯)。然后睡梦中被同事喊醒:OSChina 挂了,真的挂了,访问不了。

一骨碌爬起来,看了下表刚到16 点,访问页面直接被卡住,这个时候远程登录服务器,包括数据库都很正常,查看连接池中活动连接超过 100。100 的活动连接可能有人觉得不多,事实上这个是非常之高的,因为 OSChina 大多数页面都是缓存的,一般不需要访问数据库。

监控 Nginx 的访问日志,发现了两个 IP 的请求频率非常之高,这两个 IP 我在动弹里贴过,一个是北京,另外一个来自上海。这时候我做错了一件事,我应该直接用 iptables 直接 drop 掉这两个 IP,但我只是启用了备用 Tomcat,因此还是很卡,下面这个图就是 16 点时的访问中断:

从这个图看不出访问量爆发的情况,因为 MRTG 是 5 分钟做一次采样,而攻击一般都是瞬间行为。

然后我才想起直接用 iptables drop 掉后,系统访问速度很快就恢复了。

动弹里开始有人在倒计时,刚才挂掉后让我现在有点紧张,加大监控的密度,@蟋蟀哥哥 跟我说他准备好要开始了。16:30 分一到,没过几秒就卡了,而后我发现来自美国的两个 IP 段请求量巨大,drop 掉一个 IP 后还是有其他的 IP 过来,于是乎整个地址段给 BLOCK 掉。@蟋蟀哥哥 说你封IP就没法玩了。

事先说过了来自服务器的所有压力测试一经发现果断 BLOCK 的。

BLOCK 掉蟋蟀哥哥后,剩下的请求量就不足为据了,参与人员看似没有想象的多,发起人 @整俩硬菜 也没有用压力工具只是手工的在进行测试。

后来五六点的时候还有另外一个 IP 搞了一把,同样 BLOCK 掉。

再过后我们就组队去吃饺子了。

过程就是这样。

劫后分析:

1. 来自服务器的 DoS 攻击,一般 IP 数量是有限的,这种攻击的特点是非常猛,彼此拼的是机器性能和服务器带宽,但是很好防御,只需要把为数不多的几个 IP 封掉即可解决。OSC 目前还是手工处理,也有一些相应的比较智能的方式是某 IP 访问并发大时自动封,但可能会导致误杀,例如现在很多网站都有手机版,而很多手机上网时用的同一个网关地址,就很可能存在这种误杀的情况;

2. DDoS 也就是分布式的 DoS 比较难防御,因为你很难分辨出攻击请求和正常请求,原理和防御可参考 浅谈Ddos攻击攻击与防御。这种攻击一般人发起还是很有难度的。

3. 此次围攻时的并发量峰值超过了 1w,来自联通和电信的两台服务器的总和。比平时高出了近 1 倍。

4. 关于 Druid 。Druid 在此次围攻中完全没有任何问题,表现良好。

5. 事后跟 @wenshao 分析的时候,他问我一个问题:如果 OSChina 的访问量再翻一翻的时候肯定会挂掉?如果访问量翻一翻还是目前的软硬件环境的话,那肯定会挂掉,毋庸置疑。

但是目前 OSChina 还只是跑在一个 Tomcat 上,通过今天的围攻我发现了真正的瓶颈所在 —— Tomcat 处理堵塞。因为就算你访问任何不需要数据库的页面时一样是被卡住的状态,而且这个时候远程访问数据库完全没有任何压力,因此可作出此判断。

因此访问量再进一步提升时,前端的 HTTP 服务器(NGiNX)和后端的 MySQL 数据库不用动,要做的工作就是给 Tomcat 开分店,一个变两个,两个变 4 个!

最后:

感谢大家善意的“攻击”  :)

加载中
0
虫虫
虫虫
应该搞一个高性能版 Tomcat,把不用的功能全砍了
HuaChen
HuaChen
怎么没人通知我的,郁闷,下一次一定要广告一下啊。 我也来参加。
mj4738
mj4738
啊?tomcat还有多少没用的组件?
主编
主编
期待下一次演出
老出
老出
后边访问量再高一倍,还是需要一变二,二变四
0
算法与编程之美
算法与编程之美
有没有想过使用tengix?哈哈,纯属玩笑
可观
可观
已经用nginx了还用tengine干啥
LinkerLin
LinkerLin
回复 @红薯 : 应该考虑下Jetty
算法与编程之美
算法与编程之美
恩,是的,抱歉,一时忘记了,谢谢纠正
盗过你家
盗过你家
淘宝的改的东西,还可以试试,不过有个mod版本,总比没有强。
红薯
红薯
Tengine 吧?
0
Martin_Ye
Martin_Ye
早知道今天下午我来帮忙打量了. 我最喜欢干这个了.  另外Nginx 可以替换成 Tengine  .Tengine 的limit_req模块用上的话. 今天下午就可以继续睡觉了.
匿名t3a
匿名t3a
limit_req 相当有用
0
盗过你家
盗过你家
现在人真无聊啊,何必呢。
啊怪啊怪
啊怪啊怪
没有吧,学习性探讨吧,也不存在恶意攻击
0
啊怪啊怪
啊怪啊怪
lvs分流给多台服务器,是否可以?
红薯
红薯
呵呵,现在哪有那么多机器啊 :)
0
匿名t3a
匿名t3a

不错嘛 很坚挺

0
盗过你家
盗过你家

前些年还试过DDos不过现在已经很多年不搞了,手里也就没有肉鸡了。

不知道流量牵引,目前是否可行。

0
兔bug
兔bug
果然有此事啊 
0
林涵
林涵
Tomcat 处理堵塞 这个瓶颈是什么原因````?
江_南
江_南
回复 @红薯 : 当时并发是多少呢?
红薯
红薯
并发量巨大,一个 tomcat 顶不住
0
枫爱若雪
枫爱若雪
红薯太小气了,搞两台服务器,8个TOMCAT,搞起!现在我这边就有这么办的....两台服务器放一个网站....
返回顶部
顶部