最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python實(shí)現(xiàn)的防DDoS腳本

 更新時(shí)間:2011年02月08日 23:24:36   投稿:mdxy-dxy  
實(shí)現(xiàn)原理是,查詢netstat的連接數(shù),同IP超過一定連接的用iptables封禁一定時(shí)間,自動(dòng)封禁,自動(dòng)解封。

這篇博可以說連開場(chǎng)白都可以省掉了,之所以被DDoS,并不是因?yàn)槿橇睡偣繁蛔分?,而是因?yàn)閂C悲劇之后流量全到simplecd來了。
不僅如此,一些笨蛋們?cè)谧フ?,一些笨蛋們?cè)谟醚咐紫螺d,100Mbps的端口居然已經(jīng)滿負(fù)荷運(yùn)作十幾個(gè)小時(shí)了,這是什么概念?100Mbps滿負(fù)荷1天,流量就是1000G,這樣下去不用多久,我就可以等著上百刀的罰單了,淚飆。
此外,100Mbps的速度使得硬盤都快轉(zhuǎn)不動(dòng)了,嚴(yán)重拖累網(wǎng)站的響應(yīng)速度,卡得我啊真是。想當(dāng)年VC掛了一天,被抓站的家伙們搞得一個(gè)禮拜半殘廢狀態(tài)(其中那些家伙包括我在內(nèi),汗)。simplecd就更支撐不了了。
事實(shí)上這種人肉DDoS比正常的DDoS更加難以區(qū)分和預(yù)防,不過也就只能盡人事,聽天命了,參考一些文章寫了個(gè)python的防止DDoS的腳本,加入cron每分鐘執(zhí)行即可。
實(shí)現(xiàn)原理是,查詢netstat的連接數(shù),同IP超過一定連接的用iptables封禁一定時(shí)間,自動(dòng)封禁,自動(dòng)解封。

復(fù)制代碼 代碼如下:

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()

目前來說這個(gè)腳本的效果是0,封了500多號(hào)人了,但是還是滿速,真是可怕。
24日 更新:
同時(shí)用這個(gè)腳本,外加轉(zhuǎn)移桌面版的站點(diǎn)到一個(gè)10M unlimited的地方以后,似乎天下太平了(嗎?)

相關(guān)文章

最新評(píng)論

彭州市| 平罗县| 积石山| 庆元县| 邮箱| 许昌县| 石屏县| 九江县| 河池市| 温泉县| 高台县| 博白县| 达日县| 都兰县| 织金县| 云浮市| 江西省| 云龙县| 武陟县| 丹东市| 本溪市| 三原县| 清丰县| 宁晋县| 道孚县| 三亚市| 陆川县| 长顺县| 桑植县| 洛隆县| 丰城市| 彭阳县| 定日县| 木兰县| 潮州市| 福鼎市| 东丰县| 沙田区| 钦州市| 绍兴市| 津南区|