登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

梦想之鹰的天空

天高任鸟飞......放飞....心情..........放飞.....梦想

 
 
 

日志

 
 

自动封堵暴力破解ssh账号的入侵者  

2011-05-11 16:52:09|  分类: 程序设计 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

无限发现他的ssh服务器有人企图暴力破解账号,我也自查了一下,发现我也一样受到了此类攻击,ssh中的相关log如下:


  1. May 10 23:20:21 localhost sshd[9075]: Invalid user x from x.x.x.x
明显x.x.x.x在进行账号猜测。随即写了个ruby脚本,监控sshd的此类日志,并对连续输错用户名十次以上的IP用iptables进行封堵。

  1. #!/usr/bin/ruby
  2. #

  3. class Daemon
  4. def Daemon.start
  5. exit!(0) if fork
  6. Process::setsid
  7. exit!(0) if fork
  8. Dir::chdir("/")
  9. File::umask(0)
  10. STDIN.reopen("/dev/null")
  11. STDOUT.reopen("/dev/null", "w")
  12. STDERR.reopen("/dev/null", "w")
  13. yield if block_given?
  14. end
  15. end

  16. def block_ip(ip)
  17. cmd = "iptables -A block_ip -s #{ip} -j DROP"
  18. system(cmd)
  19. end

  20. def block_invalid(filename)
  21. block_limit = 10

  22. log_file = File.new(filename)
  23. ips = Hash.new
  24. blocked_ips = Hash.new
  25. log_file.each do |line|
  26. field = line.split
  27. if field[5] == "Invalid"
  28. ip = field[field.length - 1]
  29. if ips.key?(ip)
  30. ips[ip] += 1
  31. else
  32. ips[ip] = 1
  33. end
  34. if ips[ip] > block_limit and not blocked_ips.key?(ip)
  35. blocked_ips[ip] = 1
  36. block_ip(ip)
  37. end
  38. end
  39. end
  40. end

  41. if system("iptables -nvL block_ip &>/dev/null")
  42. system("iptables -F block_ip")
  43. else
  44. system("iptables -N block_ip")
  45. system("iptables -I INPUT -j block_ip")
  46. end

  47. Daemon.start do
  48. block_invalid("/var/lib/myips.fifo")
  49. end
本质上,这就是一个简单的LIPS--基于日志的入侵防护系统。
  评论这张
 
阅读(475)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018