防DDoS脚本 in python

这篇博可以说连开场白都可以省掉了,之所以被DDoS,并不是因为惹了疯狗被追着咬,而是因为VC悲剧之后流量全到simplecd来了。

不仅如此,一些笨蛋们在抓站,一些笨蛋们在用迅雷下载,100Mbps的端口居然已经满负荷运作十几个小时了,这是什么概念?100Mbps满负荷1天,流量就是1000G,这样下去不用多久,我就可以等着上百刀的罚单了,泪飙。

此外,100Mbps的速度使得硬盘都快转不动了,严重拖累网站的响应速度,卡得我欲仙欲死啊真是。想当年VC挂了一天,被抓站的家伙们搞得一个礼拜半残废状态(其中那些家伙包括我在内,汗)。simplecd就更支撑不了了。

事实上这种人肉DDoS比正常的DDoS更加难以区分和预防,不过也就只能尽人事,听天命了,参考一些文章写了个python的防止DDoS的脚本,加入cron每分钟执行即可。

实现原理是,查询netstat的连接数,同IP超过一定连接的用iptables封禁一定时间,自动封禁,自动解封。

from subprocess import Popen,PIPE
import re
import time
import sqlite3
 
CONCURRENCY_ALLOWED = 30
OUTDATE_TIME = 86400
 
# initializing database
db = sqlite3.connect("/tmp/ddos.db3")
c = db.cursor()
try:
    c.execute("create table ddos (ip text unique,date integer);")
except:
    print "database exists"
 
# blocking ips has more than CONCURRENCY_ALLOWED connections
pipe = Popen("netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n > /tmp/ddos.txt",shell=True,bufsize=1024,stdout=PIPE).stdout
#ddos = pipe.read()
ddos = open("/tmp/ddos.txt").read()
ct = re.compile(r"(\S+)\s+(\S+).*\n").findall(ddos)
for count,ip in ct:
    if int(count)>CONCURRENCY_ALLOWED and (ip != "127.0.0.1") and (not ip.startswith("192.168")):
        out = Popen("iptables -I INPUT -s %s -j DROP"%ip,shell=True,bufsize=1024,stdout=PIPE).stdout
        print "blocking %s for %s visits" % (ip,count)
        c.execute('replace into ddos values (?,?)',(ip,int(time.time())))
        time.sleep(0.1)
db.commit()
 
# unblocking outdated blockings
c.execute("select * from ddos")
ddos = c.fetchall()
for ip,date in ddos:
    if date + OUTDATE_TIME < time.time():
        c.execute("delete from ddos where ip=?",(ip,))
        print "unblocking %s" % ip
        out = Popen("iptables -D INPUT -s %s -j DROP"%ip,shell=True,bufsize=1024,stdout=PIPE).stdout
        time.sleep(0.1)
db.commit()

目前来说这个脚本的效果是0,封了500多号人了,但是还是满速,真是可怕。

24日 更新:
同时用这个脚本,外加转移桌面版的站点到一个10M unlimited的地方以后,似乎天下太平了(吗?)

This entry was posted in Linux, python, 站长, 编程 and tagged , , , . Bookmark the permalink.

109 Responses to 防DDoS脚本 in python

  1. snail5 says:

    我说怎么访问你的BLOG,突然,就挂了·!

  2. xslidian says:

    楼主适时中断下吧… 偶不想看谁做公益被罚… = =

    • observer says:

      看情况吧,希望暂时可以支撑到4G,之后如果还这么夸张我就关闭列表模式,只保留搜索,相信那样就能安然无恙地到月底了。

    • observer says:

      看情况吧,希望暂时可以支撑到4t,之后如果还这么夸张我就关闭列表模式,只保留搜索,相信那样就能安然无恙地到月底了。

  3. LAOP says:

    楼主做个捐助链接吧,人多力量大。

  4. 楼喽 says:

    楼主加油
    的确
    我捐款噢!
    楼主在国外要好好过我.我也是学生!!!也在国外!!!
    支持!

  5. xiamipi says:

    支持博主,我建议可以先中断连接一会儿,让那些二百五们清醒清醒再说。

  6. joejoenoob says:

    请问楼主对于我这种不会太多电脑知识,无法从技术上帮助您,但是又有很多verycd上的资源没有下完的人来说,如何能够帮助simplecd继续下去?好多宝贵的东西没有下完,全力抢救啊TT

  7. wsh0408 says:

    老大,不知道为什么桌面版更新资源数和网页上不一样?网页上资源有16113页,桌面版只有15110页,少了1000页?

    • observer says:

      等增量数据包,由于架构原因,桌面版的更新结果很不靠谱

      • wsh0408 says:

        哈哈,按照你的说法就是架构太土鳖了啊。那我等增量数据包了。多谢老大,你这几天肯定要很忙了,哈哈,时事造英雄啊。

  8. rick says:

    可以考虑在哪个门户的博客开个博 然后把simplecd的客户端 数据库文件放到网盘上去 博客只发网盘连接

  9. wsh0408 says:

    老大,用不用我把我更新的数据库传到115分一下压力?

  10. dongchen says:

    站长如果设捐款链接,我一定捐(一点点,呵呵)!

  11. 我勒个去 says:

    把源码数据库放到网盘上去吧 否则 真的就被墙内的百万民众给DDOS死了

  12. dodgepudding says:

    这个太欢乐了,你在首页就写上大大个不要爬站的提醒,看来你的站真的火了。

  13. be.truth says:

    真不知道爬站的要做神马?只是单纯要数据?

  14. Dull says:

    我猜主要是客户端占用资源多 可以考虑静态文件托管到别处 比如google那里 然后适当的加验证码 比如访问100次验证下 比如没有来路 没有cookie的要求验证下 这样可以阻挡大部分的不道德访问
    最后热烈祝贺楼主百M端口跑满

  15. TLF影视 says:

    向博主致敬

  16. Adp_r says:

    建议:
    1. 暂时关闭页面浏览,先保证资源生成增量包
    2.桌面版的文件充分利用国内国外的网盘分流,有些网盘根据下载量还能给你提供些收入
    3.加广告,也能产生些收入

  17. Paul says:

    楼主求twitter号。。我想fo你。。

  18. Dreamer says:

    亲切的叫您一声——大神~
    大神您挺住!这只是刚刚开始,而且,目前的SC是满足不了我们的,建议大神把资源发布功能再完善一些,用户体验再改进一些……争取将原VC的用户转移到这里,并且要低调,以免被封……

    我承认我有点贪婪了~但对于您这样热衷于公益事业的技术大神,我们别无依靠了……

    OK,资金有问题我带头捐款!这是一项公益事业!

  19. foxsheep says:

    悲剧,只是搜索了十几次,下载了十几次,就突然上不了了。。。
    起初还以为是simplecd被墙,结果翻墙出来一看,是我被BAN了。。。
    还好只有24小时。。。

  20. foxsheep says:

    PS:万一有人让某个强大的翻墙服务器被BAN了,会不会祸害苍生?呃,要是的话我还是等明天再来吧。。。

  21. aa says:

    你搞个收费的会员吧,我愿意交年费。

  22. Mr.nn says:

    刚知道楼主的simplecd,对我们这些用了verycd六七年的来说真是福音。我也在国外,楼主若有需要请开设paypal等捐款通道,相信人多力量大,一定能渡过难关!

  23. aax says:

    挂个广告呗?这年头有几个没广告,别太影响界面就行。。。。还有楼主用web.py写的SimpleCD?刚开始学。。。

  24. liruqi says:

    公开一个paypal 帐号,让用户捐助呗。
    国外不少自由开发者都这么干的。

  25. LAOP says:

    数据库115下载链接,更新到最新数据库
    http://u.115.com/folder/f35f9b49a8d

  26. alex31 says:

    我说怎么浏览速度这么快,原来在海外,比verycd好用哦!如果早知道这里,我就不去verycd了,那乌龟速度,也就在墙内自娱自乐还可以。

  27. huhu says:

    支持楼主,支持捐款

    小心 FBI

  28. holoo says:

    那个数据包怎么用的 我下完了但是没法浏览的

  29. yu says:

    阴谋陷害啊,怎么simplecd首页热度都是些不雅图片啊??别被扫黄给扫了啊~~
    为了simplecd安全,博主还是把热度屏蔽了吧

  30. jacqueline says:

    那个什么…… 不好意思啊站长 今天也没多想就用迅雷了…… 见谅见谅 以后不用了
    我下载没速度是因为被封了吗?

  31. aries says:

    冤有头,债有主,直接把那些抓站和迅雷的重定向到文化部去吧。

  32. ern says:

    115下载中,分流115我觉得还是比较好的,呵呵。赶紧广播这个消息吧

  33. lairuo says:

    楼主你真是太好了,大好人啊,VC倒掉后我看论坛里面就有人公布你做的网址了,真希望在境外有个VC这样的网站,只要资源多,有安全保障,我愿意交年费啊,想想现在淘宝支付那么多,如果在国外有个资源丰富的网站收费(不要太多哦)我也愿意啊!

  34. zephyr says:

    呃 希望LZ保持冷静 和低调..ls一些言论不敢苟同

  35. holoo says:

    那个数据包 我update完了还是没有任何显示。。这个是怎么回事。。

  36. LAOP says:

    要是收费的话那还是emule吗?emule的精神就是共享。

  37. foxsheep says:

    诶,貌似没到24小时已经解禁了~求教LZ,用迅雷下ed2k链接,应该是对该资源吸血不会影响LZ吧?LZ说的,应该是指用迅雷抓站的?

  38. lu8899wei says:

    我想注册http://mirror.simplecd.org/ 老大怎么弄啊?

  39. zhangzhang says:

    http://soido.org/blog/857
    牛人用GFW来防DDos攻击

    “这样一来,世界上最强大的防火墙就为我挡掉了许多攻击,一直被我们痛恨的GFW终于为我立功了!”

    pf_miles:也不能说利用gfw完全把攻击挡住了吧,据我了解,gfw只是先于你的服务器往客户的浏览器发送了一个错误信息;但实际上这次请求还是到了你的服务器的,也就是说这次请求的资源消耗还是存在的

    回pf_miles :
    兄弟所言不假, 第一次请求总是会发送到服务器的.
    我做了测试, 一分钟内,访问不带敏感词和带敏感词的url, 分别刷新20次, 查看服务器log发现:不带敏感词的20次访问都写入了log, 而后者只写入了3次.经多次测试, 有时候也不只3次, 但被过滤的还是大部分.
    Comment by honk

  40. Hanna says:

    捐助吧。虽然我下载的不多,但是支持。

  41. very says:

    能把图片打包下载吗?本地看的话…有些图片无法打开…但新窗口打开又可以看,汗….以后要是被墙不是看不到图片上的重要信息了……

    • observer says:

      图片40G,我看不出一丝能打包下载的可能性,你有米国VPS的话我可以rsync给你

      • very says:

        数据有了…图片没有,汗啊~~~~我是这样处理的.图片按文件夹分开.如一个文件夹4.7G(DVD)或CD(760M)容量,然后多个压缩包按ed2k或迅雷链下载..大家下载后再解压力自行拆解…另外我 css也写得不错.可以帮你建站.

  42. Illusion says:

    observer,建意你当务之急还是先去找个投资人,现在这种情况光靠你一个人肯定是顶不住的,BTCHINA和VERYCD之所以受欢迎就是因为列表模式做的好,而且有投资人的话,以后也好发展,就算退一万步讲,将来被海产局找去谈话也会更有低气。淫民大众是绝对不希望SimpleCD最后步上veryCD的后尘。

  43. simplefans says:

    又跟大侠学到新知识了,呵呵!加您做好友如何?

  44. GXB says:

    首先感谢博主的simpleCD
    然后提供一点点子
    可不可以把桌面版发展成基于P2P的资源发布和搜索系统并且使用用分布式爬虫爬VC
    提供用户注册,资源发布 和搜索功能
    用户注册信息和资源信息根据软件用户自己选择把数据部分或全部存在本地
    把本地的数据库做成P2P形式发布给所有节点
    每个用户为一个节点
    根据用户机器和网络的能力选出中心节点
    中心节点组成主干网
    机器和网络比较差的做为普通节点连接到最近的中心节点
    注册用户可以用这个桌面版发布资源
    新发布资源索引首先传到中心节点组成的主干网再逐步扩散到普通节点
    这样用P2P的方式可以给你的FWQ减掉不少压力应该
    然后发布的资源像VC一样普通用户可以给他一个RANK以及评论
    所有的数据依然以P2P模式存储

    关于资源发布功能和搜索功能可以加上semantic提取
    在发布时提示已经存在的发布
    搜索时提供跟精确的搜索结果

    另外可不可以把这个系统作成开源模式
    提供给全球的用户使用使发布的资源尽可能最大化

    前段时间刚做了个基于P2P的爬网和搜索报告
    再加上最近看到VC嗝屁的消息
    突然有了灵感
    再加上看博主的桌面版软件 小弟就在这献丑给点提供点主意

    • observer says:

      很好的主意,但是高估我的能力了,这种东西我全职开发半年都不一定搞得定,关键是对P2P协议一窍不通,P2P是一个很专精的分类,思想、算法等全部都要学,完全不知道这东东的学习成本如何,如果有p2p开发的资深经验者参与倒是可以考虑。

    • wus says:

      我看还不如直接更新离线数据包,然后用emule传播方便。

      • GXB says:

        VC挂了以后离线数据从哪里来?
        在SCD上发布么
        等到VC用户转移到SCD后
        SCD会不会变成下一个被光腚肿菊看上的目标

        • observer says:

          数据来自SCD的更新(不一定是发布),因为本来VC开始自宫以来,SCD就开始自动follow好几个字幕组的更新了。水产局也许会盯上,不过我更怕MPAA之流的巨头盯上,这才时SCD的末日。

          • GXB says:

            树大招风
            为了规避风险
            所以最好只专注于资源发布软件的研究
            但主站不提供任何资源发布服务
            把发布资源的任务交给用户,字幕组,压片组
            同时在主站声明完全不进行商业化,不支持非法共享

            再或可否选择基于电骡网络
            把官方电骡拿来改一个专有mode或选择与一个mode合作 加强其发布与搜索功能
            不知道这个思路如何

            在下能力也是有限
            只能提供一些思路 在软件编写方便无法提供有效帮助 抱歉抱歉
            上一次完全投入编程项目还是09年在本科毕业设计的时候
            现在的专业虽然跟IT也有关系但跟编程方面还是有很多距离 很久没有研究程序了 手完全生了

  45. TK says:

    netstat太慢了,直接读/proc/net/tcp吧

  46. haibaraai says:

    辛苦了
    lz可以鼓励国内众多用迅雷或旋风离线下载,应该能在一定程度上减轻自己主站的下载压力

  47. theflash says:

    再次感谢sc,建议将耗费流量的下载的放到115 uudisc mediefire 这些网盘上,一次多放几个,一定有人会无耻的举报的

    再次感谢~ 加油~

  48. Charlie says:

    首先感谢博主的simpleCD
    然后提供一点点子
    可不可以把桌面版发展成基于P2P的资源发布和搜索系统并且使用用分布式爬虫爬VC
    提供用户注册,资源发布 和搜索功能
    用户注册信息和资源信息根据软件用户自己选择把数据部分或全部存在本地
    把本地的数据库做成P2P形式发布给所有节点
    每个用户为一个节点
    根据用户机器和网络的能力选出中心节点
    中心节点组成主干网
    机器和网络比较差的做为普通节点连接到最近的中心节点
    注册用户可以用这个桌面版发布资源
    新发布资源索引首先传到中心节点组成的主干网再逐步扩散到普通节点
    这样用P2P的方式可以给你的FWQ减掉不少压力应该
    然后发布的资源像VC一样普通用户可以给他一个RANK以及评论
    所有的数据依然以P2P模式存储

    关于资源发布功能和搜索功能可以加上semantic提取
    在发布时提示已经存在的发布
    搜索时提供跟精确的搜索结果

    另外可不可以把这个系统作成开源模式
    提供给全球的用户使用使发布的资源尽可能最大化

    前段时间刚做了个基于P2P的爬网和搜索报告
    再加上最近看到VC嗝屁的消息
    突然有了灵感
    再加上看博主的桌面版软件 小弟就在这献丑给点提供点主意

    这位仁兄是正解呀,技术实现上,博主在simplecd.org 上面链接关于技术援助的文章,我想有很多像你一样的大侠会拔刀相助的。毕竟,verycd 这块上面的精神财产可太宝贵了。
    博主要保护好自己,危机关头也可以全身而退。

  49. 梦幻美战Arica says:

    应该让更多的人知道,不用抓站,直接下SimpleCD Desktop和在115上的更新包就好了。

  50. BonbonDur says:

    辛苦了observer
    我想知道SimpleCD能支撑多久?

  51. Smoking says:

    你真的太太太牛了!!!謝謝哦!!我昨天在報紙上看到說驢子要被和諧的消息,心裡失落了很久很久…然後今天在搜索一些被和諧了的資源的時候搜到simplecd了!真的好感動好感動…..
    不過等了你的博客,發現你真的厲害厲害!!完全看不懂那些程序語言,但是我有一個問題請教。
    怎樣爬牆上國外的網站哇?像www.ask.com;twwiter;youtube.
    我嘗試研究了一下,也下了一些代理軟件,但是還是沒有搞明白吖!試了很多次都沒有成功…

  52. lovedmu says:

    兄弟,你很牛!过来学习学习!

  53. awaycosmos says:

    不知站長願不願意,
    把如何使用非閹割版的正宗eMule、正宗eMule MOD的教學及相關訊息,
    分別放在SCD的主網頁和bbs論壇網頁上最顯眼的位置,
    好讓eMule的核心價值與精神廣為傳佈,
    一掃VC對VC閹割騾廣大用戶的蒙蔽與扭曲?

    懇請站長考慮!感謝!

  54. 13号避难所专业外出打酱油人员 says:

    This is comment message.

    • 13号避难所专业外出打酱油人员 says:

      原来不要注册的······

      感谢站长的SimpleCD.
      有了离线数据库就有了一个资源宝库啊.

      但是VeryCD马上就要死了的样子,作为VCD镜像的SimpleCD的未来会怎样呢?
      还会继续更新下去么?

  55. littlesheep says:

    up主你的恶趣味的avfun001还在- -

    上次其实因为avfun001的事情这个IP被GFW完全墙过一次-。-

    打算怎样处理那个-_-~

  56. thank! says:

    向楼主致敬!

  57. kenny says:

    用迅雷下载的笨蛋默默爬过

    原来simplecd这样来的啊
    太谢谢楼主了!!!
    咳咳……以后不会故意那个啥了

  58. lightblue says:

    Scd 其实早就知道,大神的精神真是佩服啊,

  59. Kevin Ren says:

    看博主写。。好像不是P2P的下载?这样怎么行呢,服务器绝对受不了啊。我觉得VeryCD是个很好的榜样,可以模仿其运营模式,把大部分客户转到simple来

  60. rgwan says:

    算鸟。我试试自己也架一个山寨VCD出来……PHP(网页)+SQLite(数据库)+PHP(命令行爬虫)。我习惯php。没怎么用py.

  61. 青花狐 says:

    楼主你做个捐款链接,我绝对捐钱,f*ck光腚的

  62. sjolzy says:

    我也天天ddos simplecd~~ 嘎嘎。。。哈哈

  63. grt says:

    身为一个计科的大一新生,表示对LZ很崇拜啊。只是,首页那些比较yellow的东西能不能低调点,小心河蟹之风刮过来。

  64. Pingback: python防止ddos攻击 | 一步一步学python

  65. 地毯材质 says:

    linux只用过一段时间,学习了!!博客很不错,能学到很多

  66. 地毯材质 says:

    呵呵,linux的命令我也只记得一些了

  67. 手机 says:

    防ddos可能会对搜索抓取有影响

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>