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

Computer Science

I Pressed My Words Here. Will You Read ?

 
 
 

日志

 
 

关于ssh尝试登录攻击的预防经历  

2013-12-21 00:20:22|  分类: With Ubuntu |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
好像一旦有了邮箱,便会遇到垃圾邮件的问题。有了手机,便会有垃圾短信的问题。当有了VPS,便会遇到SSH的保留破解攻击。这些都归属于“自然现象”了。不过,由于自己是初次遇到,所以在这里记录下吧。
参考:
针对ssh端口扫描,超过指定次数的ip自动加入黑名单 http://www.yuanyueping.cn/linux_system/system_security/security-2-78.html
Ubuntu下的计划任务 -- cron的基本知识 http://darkbaby123.iteye.com/blog/715443
为什么我的系统 /var/log/ 下没有auth.log文件呢 http://bbs.vpser.net/thread-8958-1-1.html

根据上面两个参考文章,这里选择使用Linux系统的/etc/hosts.deny配置文件来拒绝在/var/log/auth.log中记录的多次尝试ssh登录未果的ip地址再次连接(当然,由于系统差异,也可能不是在/var/log/auth.log文件中记录着(参考:为什么我的系统 /var/log/ 下没有auth.log文件呢),安装了rsyslog后便会有)。
首先,根据参考文献中的代码略做改进,写入到/usr/local/bin/denySSHAttack.sh。
#refer to http://www.yuanyueping.cn/linux_system/system_security/security-2-78.html
# Use /etc/hosts.deny to deny ssh attack
cat /var/log/denySSHAttack.log > /var/log/denySSHAttack.log1
date >> /var/log/denySSHAttack.log
cat /var/log/auth.log | grep "\(Failed password for\)" | awk '{ print $(NF-3)}' |
sort -n | uniq -c | awk '{ print $1"="$2}' | sort -nr > /var/log/denySSHAttack.log
cat /var/log/auth.log | grep "\(Invalid user transfer\)" | awk '{ print $(NF-0)}' | sort -n | uniq -c | awk '{ print $1"="$2}' | sort -nr >> /var/log/denySSHAttack.log
#sed -i /65.243.142.192$/d /var/log/denySSHAttack.log
ipaddr=$(cat /var/log/denySSHAttack.log | awk -F= '{ print $2"="$1 }' | sort -n | sed /^65.243.142.192/d);
for in ${ipaddr[*]} ; do
?···IP=`echo $i |awk -F= '{ print $1 }'`;
?···NUM=`echo $i | awk -F= '{ print $2 }'`;
?···if [ $NUM -ge 20 ];
?···then  
?···?···grep $IP /etc/hosts.deny > /dev/null;
?···?···if [ $? -gt 0 ];
?···?···then
?···?···?···echo "sshd:$IP" >> /etc/hosts.deny;
?···?···fi;
?···fi;
done
并记得给其加上执行权限:
# chmod +x /usr/local/bin/denySSHAttack.sh
注:脚本中的ip地址指的是不需要加入hosts.deny当中的。
接着,就是使用cron配置,让系统定时自动执行上面这个脚本。(注意,使用root角色执行下面的命令)。
# crontab -e
接着会有提示让选择使用那个编辑器。然后会用你选择的编辑器打开文件。我们只需在最后一行下方写上:
*/10 * * * * bash /usr/local/bin/denySSHAttack.sh
然后,重启cron定时器服务:
# service cron restart
之后,系统便会每10分钟执行一次脚本。
查看hosts.deny和denySSHAttack.log看是否有数据。如果有数据,而auth.log中仍旧有相关ip的验证失败信息,那么就是hosts.deny没有生效,据说应该自动生效,不过我是在重启系统后看到效果的。

另外,还可以通过修改/etc/ssh/sshd_conf中的Port 22的配置值来修改ssh的登录接口。比如修改成Port 11111。
在重启ssh服务:
# service ssh restart
后,退出再登录,就需要用 ssh 的-p参数接端口值11111,如:
$ ssh -p 11111 root@56.243.142.291
否则,连接将会被拒绝。
END
  评论这张
 
阅读(7)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

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

页脚

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