分类: LINUX
2016-11-04 18:07:34
目的如题,直接上代码:
#!/bin/bash
#this is for count and block the hack ip for ssh login
ip=`grep “Failed” /var/log/secure | awk ‘{print $(NF-3)}’ | sort | uniq -c | awk ‘{print $1″=”$2}’`
count=”10″
for i in $ip
do
number=`echo $i | awk -F “=” ‘{print $1}’`
blockip=`echo $i | awk -F “=” ‘{print $2}’`
echo “$number$blockip”
if [ $number -gt $count ];then
grep $blockip /etc/hosts.deny > /dev/null
if [ $? -gt 0 ];then
echo “sshd:$blockip” >> /etc/host.deny
fi
fi
done
脚本思路如下:
由于/var/log/secure是以星期为轮询的,所以我们每次可以查看这个文件,利用SHELL脚本统计出其中访问失败比较频繁的IP,并定义一个阀值为10,如果大于10的话就将其放进/etc/hosts.deny文件,阻止其继续访问ssh;然后将其写进crontab计划列表里,每隔一段时间进行一次排查,如果下次排查的某IP次数又大于10,首先检查它在不在我们的黑名单,如果在的话就无视过去;如果不在,就继续添加进/etc/hosts.deny文件。