免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2888 | 回复: 0
打印 上一主题 下一主题

一个对付ssh密码扫描的脚本 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-01-20 10:30 |只看该作者 |倒序浏览
1分钟同一个IP超过10次尝试密码出错,IPTABLES封24小时.
练练手的,应该有更强大的工具的.

  1. #!/usr/bin/env python
  2. import time,syslog,os,sys,re
  3. import bsddb
  4. pid=os.fork()
  5. if pid>0:
  6.         sys.exit(0)
  7. elif pid<0:
  8.         print "fork error"
  9.         sys.exit(-1)
  10. os.setsid()
  11. os.chdir("/tmp")
  12. os.close(0)
  13. os.close(1)
  14. os.close(2)
  15. os.umask(0)
  16. def iptables_fresh():
  17.         ddb=bsddb.hashopen("/var/log/sshdetect.db")
  18.         nowt=time.time()
  19.         for ip in ddb.keys():
  20.                 disable_time=float(ddb[ip])
  21.                 if disable_time<nowt-86400:
  22.                         syslog.syslog("unblock ip address %s" % ip)
  23.                         iptables_delete(ip)
  24.         ddb.close()
  25. def iptables_delete(ip):
  26.         ddb=bsddb.hashopen("/var/log/sshdetect.db")
  27.         cmd="iptables -D INPUT -s %s -p tcp ! --syn -j DROP" % ip
  28.         os.system(cmd)
  29.         os.system("service iptables save")
  30.         del(ddb[ip])
  31.         ddb.close()
  32. def iptables_disable(ip):
  33.         ddb=bsddb.hashopen("/var/log/sshdetect.db")
  34.         nowt=time.time()
  35.         cmd="iptables -I INPUT -s %s -p tcp ! --syn -j DROP" % ip
  36.         os.system(cmd)
  37.         os.system("service iptables save")
  38.         ddb[ip]=str(nowt)
  39.         ddb.close()
  40. cmd="tail -F /var/log/messages"
  41. f=os.popen(cmd)
  42. failips={}

  43. while 1:
  44.         iptables_fresh()
  45.         try:
  46.                 line=f.readline()
  47.         except:
  48.                 f.close()
  49.                 f=os.popen(cmd)
  50.                 continue
  51.         rs=re.search("authentication failure.*rhost=(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})",line)
  52.         nowt=time.time()
  53.         if rs:
  54.                 ip=rs.group(1)
  55.                 if failips.has_key(ip):
  56.                         failips[ip].append(nowt)
  57.                         while failips[ip][0]<nowt-60:
  58.                                 failips[ip].pop(0)
  59.                         if len(failips[ip])>10:
  60.                                 iptables_disable(ip)
  61.                                 del(failips[ip])
  62.                                 syslog.syslog("block ip address %s" % ip)
  63.                 else:
  64.                         failips[ip]=[nowt]

复制代码

[ 本帖最后由 ttvast 于 2007-1-20 10:37 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP