最近公司国外服务器被无限尝试SSH登入
于是有了以下自动ip黑名单添加,及经过一断时间从黑名单中去ip的SSH脚本
#!/bin/bash
#用于防止ssh暴力破解
hr=8 #ip在黑名单中保存的次数 每次运行本定时任务hr减1
tryNum=15 #定时间内可以尝试的次数
denyIps=`grep 'sshd:.*#####' /etc/hosts.deny|awk '{print $1"="$2}'`
for tmp in $denyIps
do
#echo tmp:$tmp
ip=`echo $tmp| awk -F= '{print $1}'`
num=`echo $tmp| awk -F= '{print $2}'`
num=${num:5}
#echo $ip:$num
if [ -z $num ];then #如果num为空,则黑名单不是脚本添加的,不做处理
denyIpTemp=$ip$denyIpTemp"\n"
#echo zz$denyIpTemp
elif [ $num -gt 0 ];then #num自减1
denyIpTemp=$ip"\t#####"$((num-1))"\n"$denyIpTemp
#echo ss$denyIpTemp
fi
done
#echo $denyIpTemp
day=$(date +" %d %H:") #获取当前时间 #查询当前小时内ip登入失败的次数
failStatus=`grep "$day.* Failed password for" /var/log/secure | awk '{print $(NF-3)}'|sort|uniq -c|sort -rn|awk '{print $1"="$2}'`
for i in $failStatus
do
failNum=`echo $i| awk -F= '{print $1}'`
failIp=`echo $i| awk -F= '{print $2}'`
#echo $denyIpTemp
if [ $failNum -gt $tryNum ];then #如果次数达到设定置,
denyIp=`echo $denyIpTemp|grep $failIp`
len=${#denyIp}
mag="sshd:${failIp}""\t#####${hr}\n"
if [ $len -le 0 ];then #如果当前ip不在黑名单中,则将当前ip加入黑名单
denyIpTemp=${denyIpTemp}${mag}
fi
fi
done