kn007的个人博客
♥ You are here: Home > 软件与网络 > VPS > 简单谈下怎么防御DDOS或CC攻击

简单谈下怎么防御DDOS或CC攻击

by | 62 Comments

提醒:本文最后更新于 2828 天前,文中所描述的信息可能已发生改变,请仔细核实。

ddos-cc-protection
作为一个被D经历超过两年的博主(好悲催)。。。如何防D防C,一直是辛酸史。

博客目前配置:4G RAM、3核QEMU Virtual CPU。由PaulHost提供服务,已经使用Paulhost近3年了。

简单介绍个各应用内存占用情况:

1.MySQL是内存大户,最低1G,最高1.8G内存。目前1.09G。
2.Varnish内存使用是在150+M到1G。峰值是不到500M。
3.PHP静态进程50个,每个占用5~100M,含共享内存。按照内存统计,目前占用了4.16G。。。实际占用是1.1G左右。
4.Memcache最高是256M可被占用。目前一直在135.43M,一般就是20M~170M的范围波动。
5.Redis占用23.22 MB,相对固定。因为存储的数据原因,每月会固定增加0.5~4M。
6.Nginx占用也比较稳定,一直在100M左右,目前92.43M。
7.其他杂七杂八,几百M吧。

再发个写的系统检测信息:
servstats-20150402

服务器一般我都是禁用Swap的。因为硬盘I/O不行,可能是因为服务器虚拟化是KVM有关。

当内存到一定值,会自动启用Swap(通过脚本)。一般也就被ddos或cc时,会出现各应用占用高峰,这时SWAP就会打开,来应付攻击。

同时自己写的流量清洗(其实就是连接数和并发量检测),就会起作用。各种ip被ban(通过iptables),可能会误伤,但这是必要的。

如果SWAP来不及打开,怎么办?这时可能会触发到OOM Killer。

PHP虽然占用多,但是极为分散,平均20+M,所以首当其冲的就是MySQL了。

而作为数据库,崩溃是不能容忍的。所以我把MySQL的OOM触发Killer等级降低了。

也就是内存占用突增时,Varnish会被杀掉。

为什么这样做呢,没有Varnish不是不能访问网站么?

没错,但却预留了至多1分钟的时间,来进行流量清洗。

1分钟后web_keepalived被触发,Varnish满血复活。

因为大部分流量的ip已经被ban,这时候就不怕攻击了。

web_keepalived详见上篇文章:《再说博客服务器的KeepAlive》。

上面一切都是在同一组脚本执行的,一定程度上减少减缓被攻击形势,也保证了服务器应用的稳定性。

文章结束,睡觉。

转载请注明转自:kn007的个人博客的《简单谈下怎么防御DDOS或CC攻击

donate
有所帮助?

Comments

62 Comments立即评论
  1. LV1回复

    啥真相?要我去机房把防薇墙拆给你看?还是管理后台

    1. MOD回复

      @敏: 薇的相片啦,你们总是防薇墙,好歹我也要知道薇长啥样子。。不然怎么防。

  2. 最近在研究隐藏服务器的真实IP,IP隐藏了,能起到很好的防护作用

    1. MOD回复

      @World: 前面加层cdn或者其他的,或者在搞个vps反代?

    2. @kn007: 差不多 我的想法是多级服务器 不过这样太烧钱 :cry:

    3. MOD回复

      @World: 确实,话说隐藏还不如均衡负载。。

    4. @kn007: 以后暴发户了再弄个 哈哈 :cool: :cool: :cool:

    5. MOD回复

      @World: 哈,好吧

  3. LV5回复

    Redis是用来缓存前台的吗? :???: 那不是和Varnish冲突了么

    1. MOD回复

      @Xider: Redis当数据库一样用的,在我这。比较大的数据和不经常改动的数据

    2. LV5回复

      @kn007: 把数据库主次分离开了吗。 :roll: redis+mysql效率会高一些吗? :mrgreen:

    3. MOD回复

      @Xider: 也不是,wp还做不到那一步,mysql已经足够快了,我也不需要读写分离。
      只是我有个页面单页面大小好几M,只能用redis来缓存起来。

    4. LV5回复

      @kn007: 下午特地去搜了一下,发现redis对缓存的效率高于内存级别的memcached,挺吃惊的,到时候研究一下 :mrgreen:

    5. MOD回复

      @Xider: 但是通过php module却无法快过。redis跟php不是一伙的。只能是redis配合nginx lua,然后php来访问nginx来调动redis

icon_wink.gificon_neutral.gificon_mad.gificon_twisted.gificon_smile.gificon_eek.gificon_sad.gificon_rolleyes.gificon_razz.gificon_redface.gificon_surprised.gificon_mrgreen.gificon_lol.gificon_idea.gificon_biggrin.gificon_evil.gificon_cry.gificon_cool.gificon_arrow.gificon_confused.gificon_question.gificon_exclaim.gif