1、编写脚本/root/bin/checkip.sh,每5分钟检查一次,如果发现通过ssh登录失败 次数超过10次,自动将此远程IP放入Tcp Wrapper的黑名单中予以禁止防问。
- 若只是5分钟去统计一次总的连接失败次数,用以下脚本
[root@centos7 ~]# cat checkip2.sh
#!/bin/bash
while true;do
awk '/sshd.*Failed password/{
ip[$(NF-3)]++
}END{
for(i in ip){
if(ip[i]>=10){ #大于10次的,记录到TCP Wrapper黑名单中
system("echo sshd:"i" >> /etc/hosts.deny")
}
}
}' /var/log/secure
sleep 300
done
- 若是5分钟去统计一次在5分钟之内的连接失败次数,可用以下脚本
[root@centos7 ~]# cat checkip.sh
#!/bin/bash
while true;do #循环
month=$(date +%b) #获取当前月份,如Jan
day=$(date +%-d) #获取当前日,如7
hour=$(date +%H) #获取当前小时,如11
minute=$(date +%M) #获取当前分钟
awk '/sshd.*Failed password/{ #awk取失败连接的行
if("'$month'" == $1 && "'$day'" == $2){ #只处理当月当天的数据
split($3,array,":") #将日志中的时间分割 如11:40:50
if("'$hour'" == array[1]){ #在当前小时内的数据
if("'$minute'" - array[2] < 5){ #5分钟内的数据
ip[$(NF-3)]++; #统计
}
}else{ #不在当前小时内的数据,主要是当前小时大于日志记录的时间
if("'$minute'" + 60 - array[2] < 5){ #跨小时了但在5分钟之内,如从11:59到12:03
ip[$(NF-3)]++;
}
}
}
}END{
for(i in ip){
if(ip[i]>=10){ #大于10次的,记录到TCP Wrapper黑名单中
system("echo sshd:"i" >> /etc/hosts.deny")
}
}
}' /var/log/secure
sleep 300 #每5钟循环一次
done
2、配置magedu用户的sudo权限,允许magedu用户拥有root权限
编辑sudoers文件vim /etc/sudoers,添加magedu ALL=(ALL) ALL 行配置
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
magedu ALL=(ALL) ALL