#!/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