python實現的防DDoS指令碼

來源:互聯網
上載者:User

這篇博可以說連開場白都可以省掉了,之所以被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的地方以後,似乎天下太平了(嗎?)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.