#!/bin/bash
#检查安全日志,如果超过20非法登录,则将主机或IP加入黑名单
dir=/home/zhao/ip_list.txt #定义存放所匹配内容的文件
>$dir #如果有则清空
x=`awk '/Failed/{ip[$11]++}END{for(i in ip){print i","ip[i]}}' /var/log/secure`
#查找登录失败的用户
num=0
for i in $x #i=ip,次数
do
ip=${i%,*} #获取ip
nu=${i#*,} #获取次数
#echo $ip
[ $nu -gt 20 ] && echo $ip >> $dir #累计20次则写入到文件
done
echo "总共`cat $dir | wc -l`个用户,出现违规登录被拒。"
num=0
for i in `awk '$1!~/^[0-9]{1,3}\.([0-9]{1,3}\.)([0-9]{1,3}\.)([0-9]{1,3})$/' $dir`
#匹配主机名
do
echo $i >>/etc/hosts.deny #写入ssh黑名单
let num++
done
echo "$num个用户被加入hosts.deny。"
sleep 0.5
num=0
for i in `awk '/^[0-9]{1,3}\.([0-9]{1,3}\.)([0-9]{1,3}\.)([0-9]{1,3})$/' $dir`
#匹配IP地址
do
firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=$i drop"
#将IP加入防火墙黑名单
let num++
done
echo "$num个IP被加入防火墙黑名单"
firewall-cmd --reload