中国教育和科研计算机网
EDU首页 |  中国教育 |   高校科技 |   教育信息化 |   CERNET
教育信息化

资讯 | 专题 会议 观点 专栏 访谈 企业 产品 CIO 技术 校园信息化 下一代互联网 IPv6视频课堂

中国教育网 > 教育信息化
您现在的位置: EDU首页 > 教育信息化 > 技  术 > 网络 > 网络管理
让SSH远程管理更安全
http://www.edu.cn   2011-07-15 中国教育网络 作者:刘振昌

字体选择:【大】 【中】 【小】

  方案3  自动判断用户登录,封禁非法SSH入侵

  实施方法有两种:

  安装DenyHost软件

  DenyHosts是Python语言写的一个程序,它会分析sshd的日志文件,当发现重复的攻击时就会记录I P 到/etc/hosts.deny文件,从而达到自动屏蔽IP的功能。安装与使用方法大家可以到官方网站上查看。

  DenyHosts官方网站为:http://denyhosts.sourceforge.net,它是开源软件。

  自己编写脚本

  a 、预期效果

  每分钟都检查日志/var/log/messages,发现10分钟内有重复登录SSH失败超过5次的IP后即对其进行封禁10分钟处理,10分钟后自动解封。

  b、编写思路

  1、客户端通过ssh登录服务器失败会在/var/log/messages中生成日志,格式如下:

  Mar 30 05:46:21 hostname sshd(pam_unix)[29499]: authentication
  failure; logname= uid=0 euid=0 tty=ssh ruser=
  rhost=ip addressuser=root

  其中时间,authentication failure; tty=ssh,rhost=ip address可以作为下一步分析的特征。

  2、分析日志。把10分钟内登录验证失败超过5次的IP地址找出来。格式化,格式为:sshd:ip address,并存入/etc/hosts.deny.tmp文件中。

  3、禁止这个IP地址在封禁时间内通过SSH登录。方法是把hosts.deny.tmp文件中的内容添加到hosts.deny中,并重新启动SSH服务使封禁生效。

  c、Shell脚本

  内容如下:

  #!/bin/bash
  #filename:auto_forbid_ssh.sh

  #这段代码在RHEL4下测试通过。

  #1、使用awk命令分析10分钟内产生的日志,把ssh登录验证失败超过5次的IP地址找出来并存入hosts.deny.tmp文件中。

  awk '
  BEGIN {
  FS=" ";
  TIME_RANGE=600;#封禁时间,600秒。
  LOG_FAIL_TIMES=5;#登录失败次数
  tstamp_now = systime();#获取当前时间戳
  while("tail -1000 /var/log/messages"|getline)
  {

  #格式化时间格式

  gsub(/:/," ",$3);
  tstamp_formatStr=strftime("%Y %m",tstamp_now)" "$2"
  "$3;
  tstamp=mktime(tstamp_formatStr);
  tstamp_diff=tstamp_now-tstamp;#获取时间差
  # 根据特征分析出符合条件的记录if((t stamp_di ff
  <=TIME_RANGE)&&($11~"tty=ssh")&&($6~"authentication")
  &&($7~"failure;"))
  {
  gsub(/rhost=/,"sshd:",$13);
  print $13;
  }
  }
  }'|sort|uniq -c |awk '$1>=LOG_FAIL_TIMES{print $2;}
  '>/etc/hosts.deny.tmp
  #2、把/etc/hosts.deny.bak 和hosts.deny.tmp文件中的内容合并并写入到hosts.deny中。
  cat /etc/hosts.deny.bak /etc/hosts.deny.tmp >/etc/
  hosts.deny
  file_size=`ls -l /etc/hosts.deny.bak | awk '{print $5}
  '`
  如果生成的hosts.deny文件比hosts.deny.bak文件大,说明程序发现符合条件的入侵IP。这时重启sshd服务即可使封禁立即生效。

  ls -l /etc/hosts.deny|awk '$5>$file_size{service sshd
  restart}'
  rm -f /etc/hosts.deny.tmp
  echo "Task is completed!";

页面功能 【打印】 【关闭】 【我有话说

MOOC风暴来袭

版权所有:中国教育和科研计算机网网络中心 CERNIC,CERNET,京ICP备15006448号-16,京网文[2017]10376-1180号

关于假冒中国教育网的声明 | 有任何问题与建议请联络:Webmaster@staff.cernet.com