linux帐号防暴力破解脚本
2016-04-03 18:30
344 查看
问题起始
最近弄了一个做学习用的服务器,忽然有一天发现有人在暴力破解root账户。最简单的想法就是把ssh的root登录禁用,但是不甚爽,于是想到是不是可以做一个脚本自动可以把那些局心不良的ip查出来给封了(虽然我真没有什么可以被偷的),算是做个shell的综合练习吧。解决思路
考虑到这种暴力破解手段都是靠远程ssh登录来进行暴力试错,必然有大量失败登录,那么首先必须找到这些ip。于是找出登录失败的ip是一个重点。经过百度之,知道这个命令是lastb。这是一个需要root权限的命令。执行之可以发现得到如下的东东:第一行是登录的帐号,如果非法帐号就是unkown ,第二列是方式,终端登录是tty,远程是ssh,第三列是ip,接着是时间。对于我们,最想知道的信息是这几个,一个是ip,一个是时间。因为判定攻击ip的条件就是其短时间内大量的失败登录。于是需要使用文本处理出相应的信息。具体的判断是获取离当前时间一个时间段内(如15分钟的ip),进行分类统计。登录次数大于一定数量的如(5次)拉黑。这里涉及到几个知识点,如找出ssh为行选,使用grep比较合适,出现ip为列选,可以用cut或awk,因为需要分类统计,所以awk可以更加灵活地实现这一目标。还有就是时间处理,这里可以用到date命令计算对应时间戳。具体实现我还是偷了个懒,只是统计最近100个符合时间条件的ip,这样遇到一些狡猾的attacker也许会漏掉,比如有多个机器交替攻击的情况。但是,一,小服务器还不值得如此大费周张吧,二,缩短检测时间也是可以解决这个问题的。那么接下的问题是怎么拉黑呢?有iptable的方法,好像挺复杂,也有直接去写hosts文件的方法。可以写两个一个hosts.allow一个hosts.deny.把你查处来的坏ip写到里面就是相当于写死亡笔记啦,写谁死谁。好了,万事具备,还有最后一个定时工具。可以使用crontab这么个强大的工具,帮助你每隔一段时间执行这个脚本。好了,有了这些,让我们编写脚本吧。
脚本
#!/bin/bash#find failed HEAD=$(lastb|grep ssh|head -n 100|tail -n 1|awk '{print $5" "$6" "$7}') echo $HEAD TIME=$(($(date +%s)-$(date +%s -d "$HEAD"))) echo $TIME if [ $TIME -gt 3600 ]; then exit fi #input last 100 echo "get ip config......" lastb|grep ssh|head -n 100| \ awk '{ip[$3]++}END{ for(key in ip){ if(ip[key]>5){print key}}}'>antiip.txt touch antiip_n.txt #write host.deny cat antiip.txt|while read line do DENY_ALREADY=$(echo $line|awk '{print $2}') if [ "$DENY_ALREADY" != "writed" ];then echo "sshd:"$line>>/etc/hosts.deny echo $line>>antiip_n.txt else echo $line" writed">>antiip_n.txt fi done service sshd restart /etc/init.d/sshd restart mv antiip_n.txt antiip.txt
首先,我们找出最近第100个,假设它发生超过时限,这里定义一个小时,则说明最近一个小时内,没有发生攻击。这里用
$(date +%s)来定义一个时间戳变量。对于可能发生攻击的情况,使用awk统计
awk '{ip[$3]++}END{ for(key in ip){ if(ip[key]>5){print key}}}awk支持关联数据类型,因此很容易实现groub by的工作,把大于5的ip添加到一个antiip.txt文件中。然后处理这个文件,先识别前面已经添加黑名单的ip防止重复添加,这个标志是“writed”, 然后将其全部变成加上“writed”添加到一个临时文件antiip_n.txt,重启ssh服务器,最后替换黑名单文件。
然后打开/etc/crontab添加0 * * * * root ./antiip.sh每个小时定时执行任务。/sbin/service crond restart 重启服务。脚本就完成了。
相关文章推荐
- Linux socket 初步
- android wifi 无线调试
- Linux Kernel 4.0 RC5 发布!
- linux lsof详解
- linux 文件权限
- Linux 执行数学运算
- 10 篇对初学者和专家都有用的 Linux 命令教程
- Linux 与 Windows 对UNICODE 的处理方式
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 解決Linux下Android开发真机调试设备不被识别问题
- 运维入门
- 运维提升
- Linux 自检和 SystemTap
- 动态清空 nohup 输出文件
- install scrapy with pip and easy_install
- Ubuntu Linux使用体验
- c语言实现hashmap(转载)